Oracle中emp表的操作,要求查询出雇员中谁的工资第二高,并且考虑并列第一的时候如何处理。习题答案是:select ename from (select ename ,sal from (select * from emp order by sal desc) where rownum<=2 order by sal) where rownum<=1;答案我没有看懂。我自己的回答是:select ename,sal from emp where
sal=(select max(sal) from emp where sal!=(select max(sal) from emp)); 帮我比较下这两条语句,那条更好。为什么。
所给答案如果是第一高、第二高的工资人数都不止一人的话是不能解决问题的。
SELECT EMPNO,ENAME,SAL
FROM EMP
/
以下是我的思路,看似虽多,其实仔细琢磨,是很简单的。
SELECT EMPNO,ENAME,SAL
FROM (SELECT EMPNO,ENAME,SAL FROM EMP
WHERE SAL<(SELECT MAX(SAL) FROM EMP))
WHERE SAL>=ALL(SELECT SAL FROM EMP
WHERE SAL <(SELECT MAX(SAL) FROM EMP))
/
其实:解决问题的思路有很多,答案不唯一。数据库的优化就需要考虑这些问题了。
偶然看到了,说了几句,希望能帮到你!!!
本回答被网友采纳