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()用法以及效率差异