(本文章內容僅在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;
查詢結果如下圖所示:
比對按照工資倒序查詢所有員工信息結果,確認查詢成功