题解 | #查找所有员工的last_name和first_name以及对应的dept_name#

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

http://www.nowcoder.com/practice/5a7975fabe1146329cee4f670c27ad55

首先,我们先审题:查找所有员工的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;
全部评论

相关推荐

不愿透露姓名的神秘牛友
11-21 17:16
科大讯飞 算法工程师 28.0k*14.0, 百分之三十是绩效,惯例只发0.9
点赞 评论 收藏
分享
2 1 评论
分享
牛客网
牛客企业服务