oracle的rownum的學習(一)order by和rownum同時使用


(本文章內容僅在windows10下經測試能夠運行,不能保證其他環境下的可靠性)

rownum使用時需要注意的三種情況和帶來的問題:
1,必須從1開始,不能隨機讀取,, 帶來的問題 不能使用形如rownum > n (n屬於N+(正整數))的條件, 使用必須取別名,再使用嵌套查詢並在外層查詢語句的條件中使用該條件
2,不屬於任何一張表, 不能使用帶有形如e.rownum的語句

3,order by 和where語句中的rownum, 使用order by排序后需要再次使用嵌套查詢才能使用排序后的rownum

 

案例一:查詢emp表工資前三的員工信息

思路一:先按照工資倒序查詢,再取rownum小於4的三條記錄
結果:查詢結果不正確
原因:查詢語句執行順序問題:先執行where語句,在執行order by 語句, 實際上查詢出的是排序前的三條記錄再按照工資倒倒序排列

查詢語句如下:

select rownum,e.*
from emp e
where rownum <4
order by e.sal desc;

查詢結果如下圖所示:

 

 

工資倒序帶行號查詢emp所有員工信息代碼如下:

select rownum,e.*
from emp e
order by e.sal desc;

查詢結果如下圖所示:

 

 

可以發現查詢的結果是按照工資倒序排序前rownum<4的結果

這就是使用rownum需要注意的第三點帶來的問題,需要解決

 

查詢emp工資最高的三條記錄
思路二:解決思路一出現的問題
解決思路,嵌套查詢,將倒序查詢的結果作為中間表再次按照行號取前三
查詢結果:查詢成功

查詢代碼如下:

select et1.*
from (
  select e.*
  from emp e
  order by e.sal desc
) et1
where rownum < 4;

查詢結果如下圖所示:

 

 比對按照工資倒序查詢所有員工信息結果,確認查詢成功

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM