EXISTS 和 NOT EXISTS
关联子查询:是指在内查询中需要借助于外查询,而外查询离不开内查询的执行。
如果子查询包含任何行,则 EXISTS 运算符或者 NOT EXISTS 返回true。 否则它返回false。
select * from emp e where exists ( select * from dept d where deptno <30 and d.deptno = e.deptno );
- 首先执行外查询 select * from emp e,然后取出第一行数据,将数据中的部门编号传给内查询
- 内查询执行select * from dept d where deptno <30 and d.deptno = e.deptno ;看是否查询到结果,查询到,则返回true,否则返回false;比如传来的是30,则不满足deptno <30 and d.deptno = 30,返回false
- 内查询返回true,则该行数据保留,作为结果显示;反之,返回false,则不作结果显示
- 逐行查询,看内查询是否查到数据,是否保留作结果显示
注意:如果上述内查询为: select * from dept d where deptno <30 不加上关联语句 d.deptno = e.deptno。
会导致该语句都会查询到有结果,每一行都返回true,所以会查询到的是全部员工信息。