嵌套查询EXISITS
NOT EXISTS 谓词
- 若内层查询结果非空,则外层的WHERE子句返回假值
- 若内层查询结果为控,则外层的WHERE子句返回真值
[例 3.60]查询所有选修了1号课程的学生姓名
思路分析:
- 本查询涉及Student和SC关系
- 在Student中依次取每个元组的Sno值,用此值去检查SC表
- 若SC中存在这样的元组,其Sno值等于此Student.Sno值,并且其Cno=‘1’,则取此Student.Sname送入结果表。
SELECT Sname
FROM Student
WHERE EXISTS(SELECT*
FROM SC
WHERE Sno=Student.Sno AND Cno='1');
[例 3.61]查询没有选修1号课程的学生姓名。
NOT EXISTS和EXISTS和EXISTS查询后返回的真值相反,所以只要将EXISTS换成 NOT EXISTS就可以做最少的修改实现求[例 3.60]的补集。
SELECT Sname
FROM Student
WHERE NOT EXITS(SELECT*
FROM SC
WHERE Sno=Student.Sno AND Cno='1');
用EXISTS/NOT EXISTS实现全称量词
SQL语言