选择没有相应课程的学生

时间:2015-03-06 05:13:59

标签: sql sql-server tsql

我有一个简单的问题,但我想使用没有。我有两个表:student_table和student_course

STUDENT (
    ID,
    Name
)

STUDENT_COURSE (
    ID,
    student_ID,
    course_ID
)

我想在STUDENT_COURSE表中选择那些没有任何相应course_ID的学生姓名,所以我写了

SELECT *
FROM STUDENT
LEFT JOIN STUDENT_COURSE ON STUDENT_COURSE.STUDENT_ID = STUDENT.ID

但是我怎么写下没有?

2 个答案:

答案 0 :(得分:4)

要查找没有STUDENT的{​​{1}},您可以使用不同的方法。请参阅此article进行比较:


使用STUDENT_COURSE

NOT EXISTS

使用SELECT s.* FROM STUDENT s WHERE NOT EXISTS( SELECT 1 FROM STUDENT_COURSE c WHERE c.STUDENT_ID = s.ID )

LEFT JOIN

使用SELECT s.* FROM STUDENT s LEFT JOIN STUDENT_COURSE c ON c.STUDENT_ID = s.ID WHERE c.ID IS NULL

NOT IN

答案 1 :(得分:4)

只需添加[STUDENT_COURSE].[STUDENT_ID] IS NULL过滤器即可找到未参与任何课程的学生

Left Outer join会为正确的表格列生成NULL个值,但这些值不匹配。

SELECT *
FROM   [STUDENT]
       LEFT JOIN [STUDENT_COURSE]
              ON [STUDENT_COURSE].[STUDENT_ID] = STUDENT.ID
WHERE  [STUDENT_COURSE].[STUDENT_ID] IS NULL