一.定義
1.子查詢定義:
select語句中嵌套select語句,被嵌套的select語句稱為子查詢。
2.子查詢可以出現在哪里?
二.where子句中的子查詢(單步合並)
總結:查詢條件分步驟,然后合並
1.已知最低工資為800,現在需要完成以下查詢:
Q:找出比最低工資高的員工的姓名和工資。
A:因為where子句中不能直接使用分組函數,所以:select ename,sal from emp where sal > min(sal)是錯誤的
應為:
Step1:查詢最低工資:select min(sal) from emp;
Step2:找出薪資大於800的人的信息:select ename,sal from emp where sal > 800;
Step3:合並語句:select ename,sal from emp where sal > (select min(sal) from emp);
三.from子句中的子查詢(表單擬存在,表單連接)
總結:from后子查詢的查詢結果作為臨時表,和查詢表進行連接
1.現在需要完成以下查詢:
Q:找出每個崗位的平均工資的薪資等級。
A:
Step1:找出每個崗位的平均工資(按照崗位分組求平均值):
select job,avg(sal) from emp group by job;
Step2:把以上的查詢結果就當做一張真實存在的表t,將t表和s表進行表連接:
select t.*,s.grade
from (select job,avg(sal) as avgsal from emp group by job) t
join salgrade s
on t.avgsal between s.losal and s.hisal;
Step3:最終結果:
四.select子句中的子查詢(唯一性嵌套)——理解即可
總結:對於select后面的子查詢來說,這個子查詢只能一次返回1條結果,多於1條,就報錯
1.現在需要完成以下查詢:
Q:找出每個員工的部門名稱,要求顯示員工名,部門名。
A:
語句:
select e.ename,e.deptno,(select d.dname from dept d where e.deptno = d.deptno) as dname
from emp e;
最終結果: