SELECT * FROM (SELECT A.*, ROWNUM RN FROM (SELECT * FROM tuser) A WHERE ROWNUM <= ? )WHERE RN > 0select * from (select a.*,rownum rn from A ) where rn>=1 and rn<=10
请问下这个2个语句有什么区别忽略表名和参数
rownum取个别名rn然后用到的时候随便写哪个都可以?就是rownum 和rn 等价的意思???

解决方案 »

  1.   

    还有一个问题rownum默认最少是1么那不写大于0或者大于等于1也可以吧?
      

  2.   

    1. 请问下这个2个语句有什么区别忽略表名和参数如果把第1条SQL的?改成10那么两条SQL的执行结果是相同的,可以认为两条SQL等价。2.rownum取个别名rn然后用到的时候随便写哪个都可以?就是rownum 和rn 等价的意思???
    不是这样,rownum与那个rn不是等价,因为数据集的rownum是个动态赋值的伪列,该值必须从1开始,然后递增,所以rownum > 2这种where条件是永远不成立的,而rn > 2 是成立的。
      

  3.   

    如果rownum和rn一样为什么要取个别名?为了外层调用?
      

  4.   

    rn>2成立是什么意思或者说这个rownum和rn到底是什么关系啊
      

  5.   

    以下面这条SQL来说明:
    select rn1,rownum from (select a.*,rownum rn from A ) where rn>=1 and rn<=10rn是子查询select a.* rownum rn from A中的rownum的别名,在子查询的结果集中rn是其中的列数据
    select rn1,rownum 中的rownum是外层查询中的伪列,与子查询中的rownum rn没有任何关系.
      

  6.   

    select rn1,rownum from (select a.*,rownum rn from A ) where rn>=1 and rn<=106楼sql打错了,多打了个1select rn,rownum from (select a.*,rownum rn from A ) where rn>=1 and rn<=10