题目描述
有一个员工表 employees 简况如下:

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

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

请你查找所有员工的 last_name 和 first_name 以及对应的 dept_name,也包括暂时没有分配部门的员工,上述示例的查询结果如下:
答案解析
我们可以先内连接 departments 表和 dept_emp 表形成一个新的表 m。
表 m 如下所示:
| emp_no | dept_name |
|---|---|
| 10001 | Marketing |
| 10002 | Finance |
| 10003 | Human Resources |
然后,我们将 employees 表和 m 表以 employees 表为主表进行左连接,就可以查询出符合题意的结果。
SQL 语句如下:
SELECT e.last_name,e.first_name,m.dept_nameFROM employees AS e LEFT JOIN(SELECT dept_emp.emp_no AS emp_no,departments.dept_name AS dept_nameFROM dept_emp INNER JOIN departmentsON dept_emp.dept_no = departments.dept_no)AS mON e.emp_no = m.emp_no;
