题目描述:获取所有当前在职的非manager员工薪水情况,给出dept_no、emp_no以及salary。(题目要求自己修改了一下,感觉加上当前在职的更合理)。

一、join..on+not in

select de.dept_no, e.emp_no, s.salary
from  employees e join dept_emp de on e.emp_no=de.emp_no
           join salaries s on e.emp_no =s.emp_no
where e.emp_no not in 
(
    select emp_no
    from dept_manager
    where to_date="9999-01-01"
)
and de.to_date="9999-01-01"

not in找出不是是当前经理的emp_no。join..on找出所有员工的信息。de.to_date="9999-01-01"筛出当前在职员工。

二、只用join..on解决

select de.dept_no, e.emp_no, s.salary
from  employees e join dept_emp  de on e.emp_no=de.emp_no
             join salaries s on e.emp_no =s.emp_no
             join dept_manager dm on de.dept_no=dm.dept_no 
                               and de.emp_no <> dm.emp_no
                               and de.to_date=dm.to_date
where de.to_date="9999-01-01"

思路与方法一致。join..on找出所有每个部门不是在职经理的员工信息。where筛出在职员工的信息。