方法一:

思路:用两次左外连接,然后查询返回 last_name,first_name,dept_name

代码:

select
    last_name,
    first_name,
    dept_name
from
    employees e
    left join dept_emp dp on e.emp_no = dp.emp_no
    left join departments ds on dp.dept_no = ds.dept_no

方法二:

思路:

本题关键在于理清三表之间关联关系。需要使用两次左联结。红色部分可以省略。

①题目要求包括暂时没有分配部门的员工,所以将 employees 作为主表,使用左联结将其和 dept_emp 表联结,联结条件为员工编号 emp_no,得出所有员工所在部门,并将结果命名为 a。

②将查询结果 a 与 departments 左联结,联结条件为部门编号 dept_no,求出部门名字 dept_name。

代码:

SELECT
    last_name,
    first_name,
    dept_name
FROM
    (
        SELECT
            e.last_name,
            e.first_name,
            de.dept_no
        FROM
            employees e
            LEFT JOIN dept_emp de ON e.emp_no = de.emp_no
    ) a
    LEFT JOIN departments dp ON a.dept_no = dp.dept_no;