首先,我们先审题:查找所有员工的last_name和first_name,说明我们要以employees表中的信息为主,即查询信息的过程中有主表与副表之分,所以要用到外连接。
其次,我们拆解题目,先找出每一个员工所在的部门名称,这个就很简单了。注意:这里只查询有分配部门的员工。我们利用dept_emp和departments这两个表,即可完成。
select dp.emp_no,dp.dept_no,d.dept_name from dept_emp dp LEFT JOIN departments d on dp.dept_no = d.dept_no;
以原题为例,查询出来的结果:
我们再将上述的查询结果当做一张临时表t,联合employees表,以employees为主表,这时候,即使是没有分配部门的员工,其员工信息也能被查询出来。
最终的查询语句为:
select e.last_name,e.first_name,t.dept_name from employees e left JOIN (select dp.emp_no,dp.dept_no,d.dept_name from dept_emp dp LEFT JOIN departments d on dp.dept_no = d.dept_no) t on t.emp_no = e.emp_no;