解题思路:

条件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;