第九章 高级子查询
如下练习,使用相关子查询完成
1.查询比所在职位平均工资高的员工姓名,职位。
select ename,job from emp where sal>(select avg(sal) from emp)
2.查询工资为其部门最低工资的员工编号,姓名,工资。
select deptno,empno,ename,sal
from emp e
where sal=(select min(sal) from emp where deptno=e.deptno)
–练习2
如下练习,用相关子查询完成
1.查询所有雇员编号,名字和部门名字。
select empno 雇员编号,ename 名字,(select dname from dept where deptno=e.deptno) 部门名字
from emp e
2.查询哪些员工是经理?
select *
from emp e
where (select count(empno) from emp where mgr=e.empno)>0
---相关exists操作符,判断是否存在
select *
from emp e
where exists (select '1' from emp where mgr=e.empno)
3.查询哪些员工不是经理?
select *
from emp e
where (select count(empno) from emp where mgr=e.empno)=0
---相关not exists操作符,判断是否bu存在
select *
from emp e
where not exists (select '1' from emp where mgr=e.empno)
4.查询每个部门工资最低的两个员工编号,姓名,工资。
select deptno,empno,ename,sal
from emp e
where (select count(*) from emp where deptno=e.deptno and sal<e.sal )<2
–练习3
如下练习,用exists或not exists完成
1.列出至少有一个雇员的所有部门名称。
select dname
from dept
where exists (select '1' from emp where dept.deptno=emp.deptno)
2.列出一个雇员都没有的所有部门名称。
select dname
from dept
where not exists (select '1' from emp where dept.deptno=emp.deptno)
–课后作业
如下练习,使用相关子查询完成。
1.查询薪水多于他所在部门平均薪水的雇员名字,部门号。
select ename,deptno
from emp e
where sal>(select avg(sal) from emp where deptno=e.deptno)
2.查询员工姓名和直接上级的名字。
select e.ename 员工姓名,(select ename from emp where e.mgr=empno) 直接上级
from emp e
3.查询每个部门工资最高的员工姓名,工资。
select deptno,ename,(select max(sal) from emp where deptno=e.deptno)
from emp e
4.查询每个部门工资前两名高的员工姓名,工资。
select ename,sal
from emp e
where (select count(*) from emp where deptno=e.deptno)>2