1. 题目描述
1.1 输入
有一个部门关系表dept_emp简况如下:
有一个部门经理表dept_manager简况如下:
有一个薪水表salaries简况如下:
1.2 输出
获取员工其当前的薪水比其manager当前薪水还高的相关信息,
第一列给出员工的emp_no,
第二列给出其manager的manager_no,
第三列给出该员工当前的薪水emp_salary,
第四列给该员工对应的manager当前的薪水manager_salary
以上例子输出如下:
2. 题目分析及解答
2.1 题目分析
该题旨在考查多表连接查询。对于这类题,正确的思路应当是将问题分解成若干部分依次解决,即:应考虑需要得到怎样的中间结果,然后再怎样由这个中间结果得到最终的输出结果,而不是试图一次性解决整个问题。对于该题,首先应通过关联dept_emp表和dept_manager表得到各部门中非manager的员工和他们对应的manager,再在此基础上关联salaries表,以得到符合查询要求的薪水信息。注:该题不止这一种思路,后续可能会补充其他解法。但本人认为这种思路是一个比较通用的解题模式,虽然未必是最简洁的。
2.2 详细解答
根据题目分析可直接写出相应的SQL查询语句:
SELECT
de.emp_no,
dm.emp_no AS manager_no,
( SELECT s.salary FROM salaries AS s WHERE s.emp_no = de.emp_no AND s.to_date = '9999-01-01' ) AS emp_salary,
( SELECT s.salary FROM salaries AS s WHERE s.emp_no = dm.emp_no AND s.to_date = '9999-01-01' ) AS manager_salary
FROM
dept_emp AS de
JOIN dept_manager AS dm ON de.dept_no = dm.dept_no
AND de.emp_no != dm.emp_no
JOIN salaries AS s ON de.emp_no = s.emp_no
AND emp_salary > manager_salary;