1. 程式人生 > >【Oracle】高速查詢資料庫庫中工資最高的10條使用者記錄;

【Oracle】高速查詢資料庫庫中工資最高的10條使用者記錄;

高速查詢資料庫庫中工資最高的10條使用者記錄;

1、查詢所有的使用者記錄

select * from user order by wage desc;

2、因為獲取所有的欄位太耗時,我們這裡只取每條記錄的實體地址——rowid;

select rowid from user order by wage desc;

3、我們獲取按照工資排序,工資最高的10條記錄的實體地址:

select rowid from(
select rowid from user order by wage desc
)
where rownum<10

4、為什麼我們不能把上面的兩次查詢直接合併成下面這個呢?

select rowid from user 
where rownum <10 
order by wage desc;

因為:查詢是先查詢,後排序,這個sql會先根據where後面的限制條件,獲取到前10條記錄,然後才是排序;而我們的邏輯是,獲取所有按照【工資】排序後,在獲取前十條的實體地址(rowid);

5、最後,根據in這個關鍵字,根據rowid匹配到對應的10條記錄

select c.wage,c.*,rowid from user 
where rowid in (
select rowid from(
select rowid rid,wagefrom user
order by wage desc ) where rownum<10 ) order by c.wage

結束!
開源不易,感謝掃碼領紅包~
這裡寫圖片描述