之前了解过一点相关子查询概念,还不熟悉;
相关子查询:先执行主查询,再针对主查询返回的每一行数据执行子查询,如果子查询能够返回行,则这条记录就保留,否则就不保留。
看一下;查询所有是领导的员工信息;
select * from emp e1 where exists (select * from emp e2 where e1.empno=e2.mgr);
这句是相关子查询;看上去应该是它的子查询里面包括2个表的一个字段的比较,要使用exists;
这个相关子查询也可以写为非相关子查询;
select * from emp where EMPNO in (select mgr from emp);
sql
insert into emp (ename, job, mgr, hiredata, salary, deptno) values ('李一','技术部经理', 0, '',22000, 1);
insert into emp (ename, job, mgr, hiredata, salary, deptno) values ('李二','工程师', 1, '',12000, 1);
insert into emp (ename, job, mgr, hiredata, salary, deptno) values ('李三','初级工程师', 1, '',2000, 1);
insert into emp (ename, job, mgr, hiredata, salary, deptno) values ('李四','市场部经理', 0, '',18000, 2);
insert into emp (ename, job, mgr, hiredata, salary, deptno) values ('王一','业务员', 4, '',8000, 2);
select * from emp;
select * from emp e1 where exists (select * from emp e2 where e1.empno=e2.mgr);
select * from emp where EMPNO in (select mgr from emp);
应该是除了相关子查询之外的子查询都是非相关子查询;