子查詢就是嵌套的select語句,可以理解為子查詢是一張表。
● 查詢員工信息,查詢哪些人是管理者,要求顯示出其員工編號和員工姓名
實現思路:
1、首先取得管理者的編號,去除重復的
select distinct mgr from emp where mgr is not null;
distinct 去除重復行
2、查詢員工編號包含管理者編號的
select empno, ename from emp where empno in(select mgr from emp where mgr is not null);
● 查詢哪些人的薪水高于員工的平均薪水,需要顯示員工編號,員工姓名,薪水實現思路
1、取得平均薪水
select avg(sal) from emp;
2、取得大于平均薪水的員工
select empno, ename, sal from emp where sal > (select avg(sal) from emp);
● 查詢員工信息,查詢哪些人是管理者,要求顯示出其員工編號和員工姓名
1、首先取得管理者的編號,去除重復的
select distinct mgr from emp where mgr is not null;
2、將以上查詢作為一張表,放到from語句的后面
使用92語法:
select e.empno, e.ename from emp e, (select distinct mgr from emp where mgr is not null) m where e.empno=m.mgr;
使用99語法:
select e.empno, e.ename from emp e join (select distinct mgr from emp where mgr is not null) m on e.empno=m.mgr;
● 查詢各個部門的平均薪水所屬等級,需要顯示部門編號,平均薪水,等級編號
實現思路
1、首先取得各個部門的平均薪水
select deptno, avg(sal) avg_sal from emp group by deptno;
2、將部門的平均薪水作為一張表與薪水等級表建立連接,取得等級
select deptno,avg(sal) avg_sal from emp group by deptno;
select * from salgrade;
select a.deptno,a.avg_sal,g.grade from (select deptno,avg(sal) avg_sal from emp group by deptno ) a join salgrade g on a.avg_sal between g.losal and hisal;
● 查詢員工信息,并顯示出員工所屬的部門名稱
第一種做法,將員工表和部門表連接
select e.ename, d.dname from emp e, dept d where e.deptno=d.deptno
第二種做法,在select語句中再次嵌套select語句完成部分名稱的查詢
select e.ename, (select d.dname from dept d where e.deptno=d.deptno) as dname from emp e