时间:2021-07-01 10:21:17 帮助过:5人阅读
公司最近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是普通列,执行结果如下,比较可知结果是不一样的。
1、select amount from test where rownum <=10 order by amount desc;
2、select 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.
Oracle中ROWNUM和ORDER BY的优先级比较
标签: