相關和非相關查詢區別
--求各部門人數
--格式: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中所有記錄都是一樣的,即不與各記錄相關,所以稱爲非相關子查詢。
分析:效率高的是:非相關。
原因:相關子查詢執行統計的次數太多。