问题:从S(学号,姓名,年龄,生日)表和SC(学号,课程号,成绩)表中查询出没有选择课程号为1001的课程的所有学生的学号和姓名。
摘抄与论坛,链接:http://bbs.csdn.net/topics/330176966
请问这个查询SQL语句该怎么写?
论坛求助答案:
SELECT 学号,
姓名
FROM S
WHERE NOT EXISTS (SELECT 1
FROM SC
WHERE SC.课程号 = '1001'
AND S.学号 = SC.学号) ;
我的理解是根据 SC.课程号 = '1001'来筛选,然后根据 S.学号=SC.学号 来判断S表中存在不存在的,就是两个表共有或相似的字段。
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
附exists/not exists语法:
EXISTS subquery ;
参数
subquery:是一个受限的
SELECT
语句 (不允许有 COMPUTE 子句和
INTO
关键字)。
结果类型:Boolean
结果值:如果子查询包含行,则返回
TRUE
。
NOT
EXISTS 的作用与 EXISTS 正相反。如果子查询没有返回行,则满足
NOT
EXISTS 中的
WHERE
子句。