【解题思路】

1.先从员工关系表中过滤掉manager的相关信息,并作为新表e

select * from dept_emp
where emp_no not in (select emp_no from dept_manager)

2.联结表e、salary, 查询员工的emp_no、dept_no、salary,并作为员工薪酬信息表a1

select e.emp_no,s.salary,e.dept_no
from(
    select * from dept_emp
    where emp_no not in (select emp_no from dept_manager)) as e
inner join salaries as s
on s.emp_no = e.emp_no
where s.to_date='9999-01-01'

3.重复1和2的方式,查询出manager的相关信息,作为新表a2

select e2.emp_no,s.salary,e2.dept_no
from(
select * from dept_emp
where emp_no in (select emp_no from dept_manager)) as e2
inner join salaries as s
on s.emp_no = e2.emp_no
where s.to_date='9999-01-01'

4.联结表a1、a2,查询员工的emp_no、manager的manager_no、员工当前的薪水emp_salary、员工对应的manager当前的薪水manager_salary

select  a1.emp_no, a2.emp_no as manager_no, a1.salary as emp_salary, a2.salary as manager_salary
from 
(
select e.emp_no,s.salary,e.dept_no
from(
    select * from dept_emp
    where emp_no not in (select emp_no from dept_manager)) as e
inner join salaries as s
on s.emp_no = e.emp_no
where s.to_date='9999-01-01') as a1

inner join
(
select e2.emp_no,s.salary,e2.dept_no
from(
    select * from dept_emp
    where emp_no in (select emp_no from dept_manager)) as e2
inner join salaries as s
on s.emp_no = e2.emp_no
where s.to_date='9999-01-01') as a2

on a1.dept_no = a2.dept_no
  1. 使用过滤函数having,获取员工其当前的薪水比其manager当前薪水还高的相关信息,得到最终结果
select  a1.emp_no,a2.emp_no as manager_no,a1.salary as emp_salary,a2.salary as manager_salary
from 
(select e.emp_no,s.salary,e.dept_no
from(select * from dept_emp
     where emp_no not in (select emp_no from dept_manager)) as e
inner join salaries as s
on s.emp_no = e.emp_no
where s.to_date='9999-01-01') as a1

inner join

(select e2.emp_no,s.salary,e2.dept_no
from(select * from dept_emp
    where emp_no in (select emp_no from dept_manager)) as e2
inner join salaries as s
on s.emp_no = e2.emp_no
where s.to_date='9999-01-01') as a2

on a1.dept_no = a2.dept_no
having emp_salary > manager_salary;