相关和非相关查询区别
--求各部门人数
--格式:select d.*,0 人数 from dept d
select d.*,
(
select count(*) from emp e
where e.deptno=d.deptno
) 人数
from dept d
select d.* from dept d
部门:
10
select count(*) from emp e where e.deptno=10
20
select count(*) from emp e where e.deptno=20
30
select count(*) from emp e where e.deptno=30
40
select count(*) from emp e where e.deptno=40
50
select count(*) from emp e where e.deptno=50
60
select count(*) from emp e where e.deptno=60
对于部门表的每一条记录,都要单独执行一次子查询,所以称为相关子查询。
列出薪金比“SMITH”多的所有员工
select * from emp e
where e.sal>
(
select e.sal from emp e where e.ename='SMITH'
)
smith的值只求一次,这个值对于emp中所有记录都是一样的,即不与各记录相关,所以称为非相关子查询。
分析:效率高的是:非相关。
原因:相关子查询执行统计的次数太多。