EXISTS/NOT EXISTS实现全称量词的查询(双重否定)

Posted whix

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了EXISTS/NOT EXISTS实现全称量词的查询(双重否定)相关的知识,希望对你有一定的参考价值。

例1:

查询选修了全部课程的学生姓名。
(Longrightarrow) 对与满足条件的学生,应该是:不存在一门课程他没有选而课表中存在。

SELECT Sname
FROM Student
WHERE NOT EXISTS(
      SELECT *
      FROM Course
      WHERE NOT EXISTS(
            SELECT *
            FROM SC
            WHERE Sno=Student.Sno 
            AND Cno=Course.Cno
      )
)

两层的嵌套查询,可以类比于两层的 ‘for‘ 循环,第一层为学生,第二层为课程,循环里面是去判断。

例2:

查询至少选修了学生201215122选修的全部课程的学生的学号。
(Longrightarrow) 不存在这样的课程,学生201215122选修了,而当前学生没有。

SELECT DISTINCT Sno
FROM SC SCX
WHERE NOT EXISTS(
      SELECT *
      FROM SC SCY
      WHERE SCY.Sno=‘201215122‘ 
      AND NOT EXISTS(
            SELECT *
            FROM SC SCZ
            WHERE SCZ.Sno=SCX.Sno
            AND SCZ.Cno=SCY.Cno
      )
)


以上是关于EXISTS/NOT EXISTS实现全称量词的查询(双重否定)的主要内容,如果未能解决你的问题,请参考以下文章

SQL in/not in/exists/not exists

随笔57 sql语句中in与exists,not in与not exists的区别

Oracle,用left join 替代 exists ,not exists,in , not in,提高效率

Oracle-where exists()not exists() in()not in()用法以及效率差异

oracle_not exists和not in的用法和区别

oracle中in,not in和exists,not exists之间的区别