这是SQL今日一题的第20篇文章
获取所有非manager员工当前的薪水情况,给出dept_no、emp_no以及salary ,当前表示to_date='9999-01-01'
这题用到salaries表、dept_emp表、employees表和dept_manager表。其中dept_no、emp_no两个字段可以从dept_emp表中得到,salary字段从salaries表中得到,至于非manager员工这个条件则利用dept_manager表进行排除。
select de.dept_no,de.emp_no,s.salary
from employees e
inner join salaries s on e.emp_no = s.emp_no and s.to_date = '9999-01-01'
inner join dept_emp de on e.emp_no = de.emp_no
where de.emp_no not in
(
select emp_no
from dept_manager
where to_date = '9999-01-01'
)
1、这道题涉及到4个表,思路就是将3个表连接起来,另一个表作为过滤条件。
2、先把employees表和salaries表用emp_no这个公共字段连接在一起,并且给定限制条件to_date = '9999-01-01'。这一步操作是为了获取salary字段。
from employees e left join salaries s on e.emp_no = s.emp_no and s.to_date = '9999-01-01'
3、再把刚刚连接的表和dept_emp这个表连接在一起,公共字段还是emp_no,这一步的操作是为了获得dept_no这个字段。
left join dept_emp de on e.emp_no = de.emp_no
4、筛选出dept_manager表中的emp_no字段,让前3步取好的emp_no不等于dept_manager表中的emp_no,这样就得到了非manager员工的信息。注意理解题目,非magager员工,就是不在manager表里的员工。
注意这题用inner join连接而非left join,注意这两个连接的区别,可以自行尝试一下,left join连接的结果如下,可以发现d005出现了2次。
猜你喜欢:
@ 作者:可乐
@ 公众号/知乎专栏/头条/简书:可乐的数据分析之路
@加个人微信:data_cola,备注:进群,拉你入 可乐的数据分析群 和各行各业的小伙伴交流探讨数据分析相关内容