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是普通列,執行結果如下,比較可知結果是不一樣的。
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.