题目有三个表:
【部门的信息】departments: dept_no, dept_name
【部门员工所属】dept_emp: emp_no, dept_no,…
【员工的信息】employees: emp_no, first_name, last_name,…
题目要求:
列出所有的员工的信息和部门,如果没有部门,则列出NULL。
其中员工信息表和部门信息表由中间件连接,所以需要通过中间件来将两个表连起来。
具体方法是通过:
方法一:将中间件和部门表inner join as new_table, 然后将员工信息表和生成的新表左连接。(为什么是左连接?因为需要的信息中,无论员工是否拥有部门的相关信息,都会被列出来,所以保留员工信息rows,舍弃没有用的部门信息rows。
SELECT last_name, first_name, dept_name
FROM employees LEFT JOIN
(SELECT emp_no, dept_name FROM departments INNER JOIN dept_emp ON departments.dept_no=dept_emp.dept_no)
AS new
ON new.emp_no= employees.emp_no;
方法二:
两次左连接:
员工信息表和中间件左连接,然后新生成的表和部门信息表左连接。
SELECT last_name, first_name, dept_name
FROM
(((SELECT emp_no, first_name, last_name FROM employees) as b LEFT JOIN
dept_emp ON b.emp_no=dept_emp.emp_no) AS a
LEFT JOIN
departments
ON a.dept_no=departments.dept_no)
;