子查詢就是嵌套的select語句,可以理解為子查詢是一張表。
1、查詢員工信息,查詢哪些人是管理者,要求顯示出其員工編號(hào)和員工姓名
select empno, ename from emp where empno in(select distinct mgr from emp);
實(shí)現(xiàn)思路:
● 先查詢出管理者的編號(hào),另外取出重復(fù)記錄
select distinct mgr from emp where mgr is not null;
● 查詢包含管理者編號(hào)的員工
select empno, ename from emp where empno in(select distinct mgr from emp where mgr is not null);
2、查詢哪些人的薪水高于員工的平均薪水,需要顯示員工編號(hào),員工姓名,薪水實(shí)現(xiàn)思路
● 首先取得平均薪水
select avg(sal) from emp;
● 取得大于平均薪水的員工
select empno, ename, sal from emp where sal>(select avg(sal) from emp);
分析思路:首先根據(jù)文字描述找出被依賴的條件,逐次分析。
在from后面加入子查詢,可以直接理解為一張表。
1、查詢各個(gè)部門的平均薪水所屬等級(jí),需要顯示部門編號(hào),平均薪水,等級(jí)編號(hào)實(shí)現(xiàn)思路
● 首先取得部門的平均薪水
select deptno, avg(sal) avg_sal from emp group by deptno;
● 將平均薪水,作為一張表和等級(jí)表比較
select a.deptno, a.avg_sal, b.grade
from (select deptno, avg(sal) avg_sal from emp group by deptno) a, salgrade b
where a.avg_sal between b.losal and b.hisal;
關(guān)鍵點(diǎn):將子查詢看作一張表。
1、查詢員工信息以及部門名稱
select e.empno, e.ename, e.deptno, (select dname from dept where deptno = e.deptno) as dname from emp e;