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
);

 

  1. 首先执行外查询 select * from emp e,然后取出第一行数据,将数据中的部门编号传给内查询
  2. 内查询执行select * from dept d where deptno <30 and d.deptno = e.deptno ;看是否查询到结果,查询到,则返回true,否则返回false;比如传来的是30,则不满足deptno <30 and d.deptno = 30,返回false
  3. 内查询返回true,则该行数据保留,作为结果显示;反之,返回false,则不作结果显示
  4. 逐行查询,看内查询是否查到数据,是否保留作结果显示

注意:如果上述内查询为: select * from dept d where deptno <30 不加上关联语句 d.deptno = e.deptno。
会导致该语句都会查询到有结果,每一行都返回true,所以会查询到的是全部员工信息。

 

posted on 2020-08-03 15:06  FuYingju  阅读(122)  评论(0编辑  收藏  举报