7.2.7 相关子查询
2020年4月1日
19:19
EXISTS（存在）、NOT EXISTS（不存在）
EXISTS (子查询)        # 就是判断
返回结果是：1或0
两者明显不同的是，EXISTS常用于判断查询集是否为空，只要子查询中至少返回一个值，EXISTS判断结果即为TRUE；子查询的结果表中没有值，EXISTS返回FALSE。
例如：查询有员工的部门名
select 部门名
from 部门表 a
where exists (
select * from 员工表 b
where a.部门编号 = b.部门编号
）；
EXISTS：先执行主查询某个字段的值，根据子查询进行过滤
因为子查询涉及到了主查询的字段，所以叫相关子查询。
举个大家都能看得懂的例子：
查询倚天人员成绩明细：
分析方法：
使用多行子查询in方法
1、我们得知道倚天人员有哪些：
SELECT 姓名 FROM 花名册 WHERE 源='倚天'
2、因为子语句不是单个值
SELECT * FROM 成绩表 WHERE 姓名 IN(复制上面代码)
使用多行子查询EXISTS方法
1、先执行主查询，成绩表中所有字段，存在（子查询）
SELECT * FROM 成绩表 WHERE EXISTS (复制下面代码)
2、子查询：花名册中的姓名等于成绩表中的姓名，且 源等于倚天
SELECT 姓名 FROM 花名册 WHERE 成绩表.姓名=姓名 AND 源='倚天'