sql笔记 not exists

问题:从S(学号,姓名,年龄,生日)表和SC(学号,课程号,成绩)表中查询出没有选择课程号为1001的课程的所有学生的学号和姓名。

请问这个查询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 子句。

摘抄与论坛,链接:http://bbs.csdn.net/topics/330176966

你可能感兴趣的:(MySQL)