题目描述

有一个部门员工关系表 dept_emp 简况如下:

获取员工当前薪水比其manager当前薪水还高的相关信息 - 图1

有一个部门经理表 detp_manager 简况如下:

获取员工当前薪水比其manager当前薪水还高的相关信息 - 图2

有一个薪水表 salaries 简况如下:

获取员工当前薪水比其manager当前薪水还高的相关信息 - 图3

获取员工当前薪水比其 manager 当前薪水还高的相关信息
第一列给出员工的 emp_no
第二列给出其 manager 的 manager_no
第三列给出该员工当前薪水 emp_salary
第四列给出该员工对应的 manager 当前的薪水 manager_salary

上述示例查询输出如下:

获取员工当前薪水比其manager当前薪水还高的相关信息 - 图4

答案解析

本题思路:

  1. 查询并获取所有员工的编号,所在部门以及薪水的员工工资表
  2. 查询并获取所有经理的编号,所在部门以及薪水的经理工资表
  3. 上述两张表内连接查询,连接条件所在同一部门
  4. 筛选条件为员工对应的当前工资大于经理对应的当前工资

员工工资表的 SQL 语句如下:

  1. SELECT de.emp_no,de.dept_no,s1.salary AS emp_salary
  2. FROM dept_emp AS de INNER JOIN salaries AS s1
  3. ON de.emp_no = s1.emp_no

经理工资表的 SQL 语句如下:

  1. SELECT dm.emp_no AS manager_no,dm.dept_no,s2.salary AS manager_salary
  2. FROM dept_manager AS dm INNER JOIN salaries AS s2
  3. ON dm.emp_no = s2.emp_no

两表联查即可得到本题要求的结果,SQL 语句如下:

  1. SELECT
  2. emp_sal.emp_no AS emp_no,
  3. manager_sal.manager_no AS manager_no,
  4. emp_sal.emp_salary AS emp_salary,
  5. manager_sal.manager_salary AS manager_salary
  6. FROM
  7. (
  8. -- 查询员工工资表
  9. SELECT de.emp_no,de.dept_no,s1.salary AS emp_salary
  10. FROM dept_emp AS de INNER JOIN salaries AS s1
  11. ON de.emp_no = s1.emp_no
  12. ) AS emp_sal
  13. INNER JOIN
  14. (
  15. -- 查询经理工资表
  16. SELECT dm.emp_no AS manager_no,dm.dept_no,s2.salary AS manager_salary
  17. FROM dept_manager AS dm INNER JOIN salaries AS s2
  18. ON dm.emp_no = s2.emp_no
  19. ) AS manager_sal
  20. ON emp_sal.dept_no = manager_sal.dept_no
  21. WHERE manager_sal.manager_salary < emp_sal.emp_salary;