select * from (select * from emp order by sal desc) where rownum<=2;上面的语句可以得出答案,不过我就是不明白,from后面能放返回多行值的select语句吗??

解决方案 »

  1.   

    说到语句,很莫名。
    select * from emp order by sal desc where rownum<=2;不是一样么?from后面可以跟表,多行值可以看成表啊。
      

  2.   

    不一样的
    第二个语句会将前两条记录拿出来按照sql倒排序
      

  3.   

    主要是rownum这个值产生在排序之前
      

  4.   

    额。from后面到除了表明之外还可以放什么呢???这题里放的是多行数据???
      

  5.   

    select * from (select * from emp order by sal desc) where rownum<=2;
    Oracle:先排序,再去多少行,否则查询不准确
      

  6.   


    --楼主的是把里面的结果集作为一个虚报
    --可以这样
    select * from emp where rownum<=2 order by sal desc
      

  7.   

    这条语句不会得出EMP表里工资最高的两个人的信息!!!!只会按默认顺序显示EMP表里前两个人的信息。。
      

  8.   

    肯定要先排序,后取行才能保证结果正确。
    但是sql语句里头必须 where rownum先执行再order by
    所以,只能使用嵌套select了。
      

  9.   


    --如上查询等价于SELECT * FROM
    (
    SELECT --* 不支持*,MS SQL支持的
     EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,COMM,DEPTNO, 
    ROW_NUMBER() OVER( ORDER BY SAL DESC)AS RANK FROM emp
    )B
    WHERE B.RANK <=2这里的B其实是个结果集,你可以把它看做一个表.而且它是按照SAL 逆排序的。
    然后你取出前两条。