select *
from employees as e
where not EXISTS(
select d.emp_no
from dept_emp as d
where e.emp_no = d.emp_no);
总感觉以前见过EXISTS,但是,查看了自己以前的笔记,没有注意到有这个关键字。
重新学习一下吧。
EISTS关键字
1. (NOT)EXISTS语句形式
-- 查找满足子查询条件的主查询结果
select A, B from table1
where exists(select C from table2 where table1.id=table2.id);
-- 查找不满足子查询条件的主查询结果
selectt A, B from table1
where not exists (select C from table2 where table1.id=table2.id)
2. (NOT)EXISTS语句实现逻辑
2.1. EXISTS语句逻辑
首先,执行一次外部查询,并缓存结果集,如 SELECT * FROM A
其次,遍历外部查询结果集的每一行记录R,代入子查询中作为条件进行查询,如 SELECT 1 FROM B WHERE B.id = A.id
最后,如果子查询有返回结果,则EXISTS子句返回TRUE,这一行R可作为外部查询的结果行,否则不能作为结果
2.2. NOT EXIST语句逻辑
首先,执行一次外部查询,并缓存结果集,如 SELECT * FROM A
其次,遍历外部查询结果集的每一行记录R,代入子查询中作为条件进行查询,如 SELECT 1 FROM B WHERE B.id = A.id
最后,如果子查询没有返回结果,则 NOT EXISTS子句返回TRUE,这一行R可作为外部查询的结果行,否则不能作为结果