题目描述

有一个员工表 employees 简况如下:

获取所有非manager员工当前的薪水情况 - 图1

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

获取所有非manager员工当前的薪水情况 - 图2

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

获取所有非manager员工当前的薪水情况 - 图3

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

获取所有非manager员工当前的薪水情况 - 图4

获取所有非 manger 员工的薪水情况,给出 dept_noemp_no,以及对应的 salary,上述示例的查询结果如下:

获取所有非manager员工当前的薪水情况 - 图5

答案解析

我们可以先获取所有非 manger 的员工的部门与员工编号信息,SQL 语句如下:

  1. SELECT dept_no,emp_no FROM dept_emp
  2. WHERE emp_no NOT IN (
  3. SELECT emp_no FROM dept_manager
  4. )

然后,将此查询结果与薪资表进行内连接查询即可获取所有非 manager 员工的薪资信息,SQL 语句如下:

  1. SELECT m.dept_no,m.emp_no,s.salary
  2. FROM
  3. (
  4. -- 获取所有非 manager 的员工
  5. SELECT dept_no,emp_no FROM dept_emp
  6. WHERE emp_no NOT IN (
  7. SELECT emp_no FROM dept_manager
  8. )
  9. )AS m
  10. INNER JOIN salaries AS s
  11. ON m.emp_no = s.emp_no;