解题思路:
条件1:查找所有员工的last_name和first_name以及对应的dept_name
条件2:也包括暂时没有分配部门的员工
- 条件1中的字段last_name和first_name来自表employees,字段dept_name来自表departments,两个表间无关联字段,所以无法直接使用表链接函数
- 条件2中要求包括未分配部门的员工数据,所以此处不能使用INNER JOIN函数进行表链接,可使用LEFT JOIN或RIGHT JOIN进行表链接
--第一步-- 对表 departments 和表 dept_emp 进行链接
SELECT d1.emp_no,d1.dept_no,d2.dept_name,d1.to_date FROM dept_emp AS d1 LEFT JOIN departments AS d2 ON d1.dept_no = d2.dept_no AND d1.to_date='9999-01-01';
--第二步-- 获取表 employees 中的last_name和first_name生成一张新表
SELECT e1.emp_no,e1.first_name,e1.last_name FROM employees AS e1;
--第三步--使用LEFT JOIN 函数链接两张表
SELECT f1.last_name,f1.first_name,f2.dept_name FROM (SELECT e1.emp_no,e1.first_name,e1.last_name FROM employees AS e1) AS f1 LEFT JOIN ( SELECT d1.emp_no,d1.dept_no,d2.dept_name,d1.to_date FROM dept_emp AS d1 LEFT JOIN departments AS d2 ON d1.dept_no = d2.dept_no AND d1.to_date='9999-01-01' ) AS f2 ON f1.emp_no = f2.emp_no;