14、列出所有员工及领导的姓名
SELECT a.ename,b.ename as "领导姓名"
from emp a left join emp b
on a.mgr=b.empno
注意:汉字用双引号,不能用单引号,不然报错。
15、列出受雇日期早于其直接上级的所有员工的编号,姓名,部门名称
SELECT a.empno,a.ename,d.dname
from emp a
JOIN emp b
on a.mgr=b.empno
join dept d
on a.deptno=d.deptno
where a.hiredate<b.hiredate
16、 列出部门名称和这些部门的员工信息, 同时列出那些没有员工的部门
SELECT b.dname,a.*
from emp a
JOIN dept b
on a.deptno=b.deptno
17、列出至少有 5 个员工的所有部门
SELECT deptno
from emp
GROUP BY deptno
HAVING count(*)>=5
having必须和group by一起使用
18、列出薪金比"SMITH" 多的所有员工信息
SELECT *
FROM emp
WHERE sal>
(SELECT sal
from emp
where ename="SMITH")
19、 列出所有"CLERK"( 办事员) 的姓名及其部门名称, 部门的人数
SELECT e.ename,d.dname,e.deptno
FROM emp e
JOIN dept d
on e.deptno=d.deptno
WHERE e.job="CLERK"
SELECT deptno,count(*) as deptnum
from emp group by deptno
SELECT t1.ename,t1.dname,t2.deptnum
FROM(
SELECT e.ename,d.dname,e.deptno
FROM emp e
JOIN dept d
on e.deptno=d.deptno
WHERE e.job="CLERK") t1
join(
SELECT deptno,count(*) as deptnum
from emp group by deptno) t2
WHERE t1.deptno=t2.deptno
20、列出最低薪金大于 1500 的各种工作及从事此工作的全部雇员人数
SELECT job,count(*)
from emp
group by job
HAVING min(sal)>1500
21、列出在部门"SALES"< 销售部> 工作的员工的姓名, 假定不知道销售部的部门编号.
SELECT ename from emp where deptno in(select deptno
from dept
WHERE dname="sales")
字符串用英文单引号或双引号括着
22、列出薪金高于公司平均薪金的所有员工, 所在部门, 上级领导, 雇员的工资等级.
select e.ename,d.dname,l.ename,s.grade
FROM emp e
join dept d on e.deptno=d.deptno
LEFT join emp l on e.mgr=l.empno
join salgrade s on e.sal BETWEEN s.losal and s.hisal
where e.sal>(SELECT avg(sal) from emp)
Join 等同于 inner join : 表示两个表都必须存在的,某一个字段为null这条数据都会被过滤掉
left join 表示以左边的表为基准,不管你右边的表有没有都显示,右边为null的数据条也会展示出来
23、 列出与"SCOTT" 从事相同工作的所有员工及部门名称
SELECT e.ename,d.dname
FROM emp e
left join dept d
on e.deptno=d.deptno
where e.job in( SELECT job from emp WHERE ename="SCOTT")
and ename <>"SCOTT"(除去这个人哦)