Oracle中ROWNUM和ORDER BY的优先级比较


1、前言

  公司最近mysql数据库切换oracle,oracle很久没用了有点陌生,刚开始做分页就遇到ROWNUM和ORDER BY的优先级比较。查了资料,网上都说ROWNUM的优先级高于ORDER BY,即先取数据的结果,再对结果进行排序。抱着怀疑的态度写了两天SQL语句,结果有的是ROWNUM的优先级高于ORDER BY,有的是ORDER BY优先级高于ROWNUM。后来得出结论:ROWNUM和ORDER BY的优先级比较是要分情况的。

 

2、正题

2、1 order by 索引,主键时,其中lid是主键,执行结果如下,比较可知结果是一样的。

select lid from test where rownum <=10 order by lid desc;
select b.lid from (select a.lid from test a order by a.lid desc) b where rownum<=10;
 
 

 

2、2 order by 普通列时,其中amount是普通列,执行结果如下,比较可知结果是不一样的。 

1select amount from test where rownum <=10 order by amount desc;
2select b.amount from (select a.amount from test a order by a.amount desc) b where rownum<=10;
  
 

 

3、结果

  ROWNUM和ORDER BY的优先级比较是要分情况的,order by 索引,主键时,即可让oracle先按该字段排序,然后再用rownum标号 ;order by 普通列时,先rownum后order by.

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM