子查询:嵌套在其他查询中的查询称之。
子查询又称内部,而包含子查询的语句称之外部查询(又称主查询)。
所有的子查询可以分为两类,即相关子查询和非相关子查询
1>非相关子查询是独立于外部查询的子查询,子查询总共执行一次,执行完毕后将值传递给外部查询。
2>相关子查询的执行依赖于外部查询的数据,外部查询执行一行,子查询就执行一次。
故非相关子查询比相关子查询效率高
非相关子查:
select t1.ename,t1.job,t1.sal from emp t1
where t1.sal > (
select avg(t2.sal) from emp t2 --子查询是一个独立的查询
);
ENAME JOB SAL
---------- --------- ---------
JONES MANAGER 2975.00
BLAKE MANAGER 2850.00
CLARK MANAGER 2450.00
SCOTT ANALYST 3000.00
KING PRESIDENT 5000.00
FORD ANALYST 3000.00
相关子查询:
select t1.ename,t1.job,t1.sal from emp t1
where t1.sal > (
select avg(t2.sal) from emp t2
where t2.deptno=t1.deptno --依赖于外部查询结果
);
ENAME JOB SAL
---------- --------- ---------
ALLEN SALESMAN 1600.00
JONES MANAGER 2975.00
BLAKE MANAGER 2850.00
SCOTT ANALYST 3000.00
KING PRESIDENT 5000.00
FORD ANALYST 3000.00