2012-06-25 153 views
0

我有以下數據:簡單的SQL查詢

Student.Name; Student.RollNum; Student.Email; Student.Courses; Student.Birthday; Course.ID;課程名; Course.Instructor

現在我的繼承人提出的DB設計:兩個表=>學生,課程 Student.ID是一個新的領域added-學生表>主唯一鍵

現在會是什麼查詢,檢索John Doe(其Student.ID = 1234)採取的所有課程?

我需要課程的名稱,而不是ID。

+3

這個功課? –

+0

你的餐桌設計有缺陷。您將所有課程列在一個列(Student.Courses)中,並且您無法正確使用將使用該列中的單個項目的便攜式SQL。你需要第三個表格(Enrollments),它將studentID與courseID(可能是一年/學期) –

回答

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

我想補充一個第三個表加入梭哈課程和課程。這將允許許多學生開設許多課程。該表將存儲StudentId和CourseId。然後,您可以通過以下查詢實現所需的結果:

SELECT c.Id, c.CourseName 
FROM Courses c 
    INNER JOIN StudentCourse sc 
    ON c.CourseId = sc.CourseId 
WHERE sc.StudentId = 1234 
0

作業? 你需要一個新表格,讓我們假設StudentsCourses表示一個學生和他參加的課程之間的關係。您需要將CourseId添加到課程表。所以StudentsCourses被定義爲:

StudentCourses(StudentId, CourseId) 

在這一點上,你有加入獲得參加課程:

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

你的表的設計是有缺陷的。您將所有課程列在一個列(Student.Courses)中,並且您無法正確使用將使用該列中的單個項目的便攜式SQL。你需要第三個表格(Enrollments),它將studentID與courseID(可能是一年/學期)配對。

不過,假設你加入這個表中,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