题目描述
有一个员工表 employees 简况如下:
有一个薪水表 salaries 简况如下:
请你查找薪水排名第二多的员工编号 emp_no,薪水 salary,员工的 last_name 以及 first_name ,要求不能使用 ORDER BY 完成,上述示例的查询结果为:
答案解析
本题有一个特殊的要求,不能使用 ORDER BY 。
思路:
- 首先查询出 salaries 表的最高工资
- 查询出 salaries 表除了最高工资以外的最高工资(第二高工资)
- 将第二高工资作为查询条件进行子查询
本题有多重子查询嵌套,SQL 语句如下:
SELECT e.emp_no,s.salary,e.last_name,e.first_name
FROM employees AS e INNER JOIN salaries AS s
ON e.emp_no = s.emp_no
WHERE s.salary = ( -- 第三步:将第二高工资作为查询条件,使用子查询
-- 第二步:查出除了原表最高工资以外的最高工资(第二高工资)
SELECT MAX(salary) FROM salaries
WHERE salary < (
-- 第一步:查询出原表最高工资
SELECT MAX(salary) FROM salaries
)
);
_