简单的SQL查询

时间:2012-06-25 21:18:03

标签: sql

我有以下数据:

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

现在是我提出的数据库设计:两个表=>学生,课程 Student.ID是添加的新字段 - >学生表的主要唯一键

现在查询John Doe(其Student.ID = 1234)所有课程的查询是什么?

我需要课程的名称,而不是ID。

5 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

我会添加一个第三个表来加入学生和课程。这将允许许多学生参加许多课程。该表将存储StudentId和CourseId。然后,您可以使用以下查询获得所需的结果:

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

答案 2 :(得分:0)

作业? 你需要一个新的表格,比如说学生课程,它代表学生和他参加的课程之间的关系。您需要将CourseId添加到Course表中。因此,StudentsCourses定义为:

StudentCourses(StudentId, CourseId)

此时,您通过加入获得有人参加的课程:

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

答案 3 :(得分:0)

你的桌面设计存在缺陷。您将所有课程列在一个列(Student.Courses)中,并且您无法使用该列中的单个项目的可移植sql。您需要第三个表(注册),它将studentID与courseID(可能还有一年/一个学期)配对。

但假设你添加这个表,sql看起来像这样:

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

答案 4 :(得分: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