题目描述
有一个部门员工关系表 dept_emp 简况如下:
有一个部门经理表 detp_manager 简况如下:
有一个薪水表 salaries 简况如下:
获取员工当前薪水比其 manager 当前薪水还高的相关信息
第一列给出员工的 emp_no
第二列给出其 manager 的 manager_no
第三列给出该员工当前薪水 emp_salary
第四列给出该员工对应的 manager 当前的薪水 manager_salary
上述示例查询输出如下:
答案解析
本题思路:
- 查询并获取所有员工的编号,所在部门以及薪水的员工工资表
- 查询并获取所有经理的编号,所在部门以及薪水的经理工资表
- 上述两张表内连接查询,连接条件所在同一部门
- 筛选条件为员工对应的当前工资大于经理对应的当前工资
员工工资表的 SQL 语句如下:
SELECT de.emp_no,de.dept_no,s1.salary AS emp_salary
FROM dept_emp AS de INNER JOIN salaries AS s1
ON de.emp_no = s1.emp_no
经理工资表的 SQL 语句如下:
SELECT dm.emp_no AS manager_no,dm.dept_no,s2.salary AS manager_salary
FROM dept_manager AS dm INNER JOIN salaries AS s2
ON dm.emp_no = s2.emp_no
两表联查即可得到本题要求的结果,SQL 语句如下:
SELECT
emp_sal.emp_no AS emp_no,
manager_sal.manager_no AS manager_no,
emp_sal.emp_salary AS emp_salary,
manager_sal.manager_salary AS manager_salary
FROM
(
-- 查询员工工资表
SELECT de.emp_no,de.dept_no,s1.salary AS emp_salary
FROM dept_emp AS de INNER JOIN salaries AS s1
ON de.emp_no = s1.emp_no
) AS emp_sal
INNER JOIN
(
-- 查询经理工资表
SELECT dm.emp_no AS manager_no,dm.dept_no,s2.salary AS manager_salary
FROM dept_manager AS dm INNER JOIN salaries AS s2
ON dm.emp_no = s2.emp_no
) AS manager_sal
ON emp_sal.dept_no = manager_sal.dept_no
WHERE manager_sal.manager_salary < emp_sal.emp_salary;