表结构回顾
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;