select b.ENAME as 员工,b.EMPNO,e.EMPNO ,e.ename as 领导from emp e join emp b where e.EMPNO = b.mgr
15. 列出受雇日期早于其直接上级的所有员工的编号,姓名,部门名称
哪些员工比上级来更早,把领导更早的null清掉 连接部门表查出
selecta.ename '员工', a.HIREDATE, d.DNAME '部门编号', b.ename '领导',b.HIREDATEfromemp aleft joinemp bona.mgr = b.empno and a.HIREDATE > b.HIREDATEjoindept dona.DEPTNO=d.DEPTNOHAVING b.ENAME is not null
16、 列出部门名称和这些部门的员工信息, 同时列出那些没有员工的部门
所有员工 连接部门表 注意右连部门,把没展示出的部门展示出来
select e.*,d.DNAMEfrom emp e right JOIN dept don e.DEPTNO=d.DEPTNO
17、列出至少有 5 个员工的所有部门
按照部门编号分组, 筛选出 部门员工个数 >= 5
select EMPNO,DEPTNO from emp GROUP BY DEPTNO HAVING COUNT(DEPTNO)>=5
18、列出薪金比"SMITH" 多的所有员工信息
-- 连接查询select ee.*from emp e join emp eeWHERE e.ENAME='SMITH' and ee.sal>e.sal-- 嵌套查询select *from emp where sal>(select SAL from emp WHERE ENAME='SMITH')
19、 列出所有"CLERK"( 办事员) 的姓名及其部门名称, 部门的人数
连接部门表展示名称 job =办事员
-- 先得到clerk相关信息select e.ename,e.job,d.dname,e.DEPTNO FROM emp e join dept d WHERE e.job='CLERK' AND e.deptno=d.DEPTNO--各部门人数select COUNT(EMPNO) ce,deptno from emp GROUP BY DEPTNO--按照部门合并select t.*,eee.cefrom (select COUNT(EMPNO) ce,deptno from emp GROUP BY DEPTNO)as eeeJOIN (select e.ename,e.job,d.dname,e.DEPTNO FROM emp e join dept d WHERE e.job='CLERK' AND e.deptno=d.DEPTNO)as tWHERE eee.deptno=t.DEPTNO
20.列出最低薪金大于 1500 的各种工作(哪些工作最少1500起) 及从事此工作的全部雇员人数
先查出工作,再统计人数
select sal,job,count(EMPNO)from emp GROUP BY job HAVING min(sal) >1500