2012-06-25 2 views
0

다음 데이터가 있습니다.간단한 SQL 쿼리

Student.Name; Student.RollNum; 학생. 이메일; 학생. 코스; 학생. 생일; Course.ID; Course.Name; Course.Instructor

지금 heres는 내 제안 DB 설계 : 두 개의 테이블 => 학생, 코스 Student.ID 새로운 필드 added- 학생 테이블> 차 고유 키 이제

검색 쿼리를 어떻게 될지 John Doe (그의 Student.ID = 1234)가 취한 모든 과정 ??

ID가 아닌 코스 이름이 필요합니다.

+3

이 과제입니까? –

+0

테이블 디자인에 결함이 있습니다. 모든 강좌를 단일 열 (Student.Courses)에 함께 나열하면 해당 열의 개별 항목을 사용하는 올바른 휴대용 SQL을 구현할 수 없습니다. studentID와 courseID (그리고 아마도 year/term)를 짝 지어주는 세 번째 테이블 (Enrollments)이 필요합니다. –

답변

2

나는 3 개 테이블을 설계 할 것 :

Students - ID; Name; RollNum; Email; Birthday; 
Courses - ID; Name; Instructor 
Students_Courses - a join table between the students and the courses 

그런 다음 다음과 같은

SELECT c.Name 
FROM Students s 
INNER JOIN Students_Courses sc 
    ON s.id = sc.studentId 
INNER JOIN Courses c 
    ON sc.course_id = c.courseid 
WHERE s.id = 1234 

또는 학생 정보 중 하나를 원하지 않는 경우, 당신은 단축 할 수있는 쿼리를 수행 할 수 있습니다 로 :

SELECT c.Name 
FROM Students_Courses sc 
INNER JOIN Courses c 
    ON sc.course_id = c.courseid 
WHERE sc.studentId = 1234 
0

나는 스터드에 가입하는 세 번째 테이블를 추가 ents 및 코스. 이렇게하면 많은 학생들이 많은 과목을들을 수 있습니다. 표에는 StudentId 및 CourseId가 저장됩니다. 다음 쿼리를 사용하여 원하는 결과를 얻을 수 있습니다.

0

숙제? 새로운 테이블이 필요합니다. 학생과 그가 다니는 과목 간의 관계를 나타내는 StudentsCourses를 가정 해 봅시다. CourseId를 Course 테이블에 추가해야합니다. 그래서 StudentsCourses과 같이 정의된다 :이 시점에서

StudentCourses(StudentId, CourseId) 

, 당신은 가입으로 참석 과정을 구하십시오

SELECT Courses.* 
FROM Courses JOIN StudentsCourses sc ON sc.CourseId = Courses.CourseId 
WHERE sc.StudenId = [DesideredStudentId] 
0

테이블 디자인 결함이있다. 모든 강좌를 단일 열 (Student.Courses)에 함께 나열하면 해당 열의 개별 항목을 사용하는 올바른 휴대용 SQL을 구현할 수 없습니다. studentID와 courseID (그리고 아마도 year/term)를 짝 지어주는 세 번째 테이블 (Enrollments)이 필요합니다. 이 같은

그러나이 테이블을 추가 가정하면,은 SQL이 보일 것이다 무언가 :

SELECT c.Name 
FROM Enrollments e 
INNER JOIN Courses c on c.ID = e.CourseID 
WHERE e.StudentID = 1234 
0

실제로 각 학생이 촬영 한 코스를 보유하고 세 번째 테이블을 필요, 2 열 것처럼 간단 할 수있다 표 (StudentId, CourseId)이고 검색어는

SELECT c.Name 
FROM Students as s 
JOIN CoursesTaken as t on t.StudentId = s.Id 
JOIN Courses as c on c.id = t.CourseId 
WHERE s.Id = 1234