题目描述
有一个员工表 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_name
FROM employees AS e LEFT JOIN
(
SELECT dept_emp.emp_no AS emp_no,departments.dept_name AS dept_name
FROM dept_emp INNER JOIN departments
ON dept_emp.dept_no = departments.dept_no
)AS m
ON e.emp_no = m.emp_no;