select b.ENAME as 员工,b.EMPNO,e.EMPNO ,e.ename as 领导
from emp e join emp b
where e.EMPNO = b.mgr
15. 列出受雇日期早于其直接上级的所有员工的编号,姓名,部门名称
哪些员工比上级来更早,把领导更早的null清掉 连接部门表查出
select
a.ename '员工', a.HIREDATE, d.DNAME '部门编号', b.ename '领导',b.HIREDATE
from
emp a
left join
emp b
on
a.mgr = b.empno and a.HIREDATE > b.HIREDATE
join
dept d
on
a.DEPTNO=d.DEPTNO
HAVING b.ENAME is not null
16、 列出部门名称和这些部门的员工信息, 同时列出那些没有员工的部门
所有员工 连接部门表 注意右连部门,把没展示出的部门展示出来
select e.*,d.DNAME
from
emp e right JOIN dept d
on
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 ee
WHERE
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.ce
from (select COUNT(EMPNO) ce,deptno from emp GROUP BY DEPTNO)as eee
JOIN (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 t
WHERE eee.deptno=t.DEPTNO
20.列出最低薪金大于 1500 的各种工作(哪些工作最少1500起) 及从事此工作的全部雇员人数
先查出工作,再统计人数
select sal,job,count(EMPNO)
from emp
GROUP BY job
HAVING min(sal) >1500