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

表结构回顾

练习11-15:自连接、左连接、多表连接_第1张图片

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

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

SELECT * FROM emp ORDER BY hireDate DESC LIMIT 5;

练习11-15:自连接、左连接、多表连接_第2张图片

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

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

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

练习11-15:自连接、左连接、多表连接_第3张图片
第二步;按照薪水等级分组,求出每个等级的人数即可

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

练习11-15:自连接、左连接、多表连接_第4张图片

13. 略

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

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

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

练习11-15:自连接、左连接、多表连接_第5张图片

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

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

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

练习11-15:自连接、左连接、多表连接_第6张图片

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

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;

练习11-15:自连接、左连接、多表连接_第7张图片

你可能感兴趣的:(#,MySQL练习34题,sql,mysql,大数据)