题目描述

有一个员工表 employees 简况如下:

查找所有员工的last_name和first_name以及对应的dept_name - 图1

有一个部门表 departments 简况如下:

查找所有员工的last_name和first_name以及对应的dept_name - 图2

有一个部门员工关系表 dept_emp 简况如下:

查找所有员工的last_name和first_name以及对应的dept_name - 图3

请你查找所有员工的 last_name first_name 以及对应的 dept_name,也包括暂时没有分配部门的员工,上述示例的查询结果如下:

查找所有员工的last_name和first_name以及对应的dept_name - 图4

答案解析

我们可以先内连接 departments 表和 dept_emp 表形成一个新的表 m。
m 如下所示:

emp_no dept_name
10001 Marketing
10002 Finance
10003 Human Resources

然后,我们将 employees 表和 m 表以 employees 表为主表进行左连接,就可以查询出符合题意的结果。
SQL 语句如下:

  1. SELECT e.last_name,e.first_name,m.dept_name
  2. FROM employees AS e LEFT JOIN
  3. (
  4. SELECT dept_emp.emp_no AS emp_no,departments.dept_name AS dept_name
  5. FROM dept_emp INNER JOIN departments
  6. ON dept_emp.dept_no = departments.dept_no
  7. )AS m
  8. ON e.emp_no = m.emp_no;