练习11-15:自连接、左连接、多表连接

表结构回顾

在这里插入图片描述

11. 取得最后入职的5名员工

按照入职日期降序排序取前五个即可

SELECT * FROM emp ORDER BY hireDate DESC LIMIT 5;

在这里插入图片描述

12. 取得每个薪水等级有多少员工

第一步:获得每个员工的薪水处于哪个等级,关联薪水等级表即可

SELECT
	*,
	grade
FROM emp e
JOIN salgrade s
ON e.sal BETWEEN s.loSal AND s.hiSal;

在这里插入图片描述
第二步;按照薪水等级分组,求出每个等级的人数即可

SELECT
	grade,
	COUNT(*)
FROM emp e
JOIN salgrade s
ON e.sal BETWEEN s.loSal AND s.hiSal
GROUP BY grade
ORDER BY grade;

在这里插入图片描述

13. 略

14. 列出所有员工及其领导的名字

自关联即可让员工领导的名字和员工记录出现在同一行,但是需要列出所有的员工,所以应该是左连接,因为有员工是没有领导的

SELECT
	*,
	e2.eName AS mgr_name
FROM emp e1
LEFT JOIN emp e2
ON e1.mgr = e2.empNo;

在这里插入图片描述

15. 列出受雇日期早于其直接上级的所有员工编号、姓名、部门名称

第一步:自关联,让员工的受雇日期和其领导的受雇日期在同一行出现

SELECT
	e1.empNo,
	e1.eName,
	e1.hireDate,
	e2.hireDate
FROM emp e1
LEFT JOIN emp e2
ON e1.mgr = e2.empNo;

在这里插入图片描述

第二步:关联部门表,获取部门名称,随后筛选出员工受雇日期早于其直接上级受雇日期的那些记录

SELECT
	e1.empNo,
	e1.eName,
	-- e1.hireDate,
	-- e2.hireDate,
	d.dName
FROM emp e1
LEFT JOIN emp e2
ON e1.mgr = e2.empNo
LEFT JOIN dept d
ON e1.deptNo = d.deptNo
WHERE  e1.hireDate < e2.hireDate;

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值