SQL中rownum和order by的執行順序的問題
在一個SQL中,如果同時使用rownum
和order by
,會有一個先後順序的問題。
比如select id1,id2 from t_tablename where rownum<3 order by c_date desc
,這個語句會先從結果集中取前三條記錄,再對這3天記錄按日期排序。如果設計者向先對日期排序,再取前三天記錄,那麼就不會得到正確的結果。
所以rownum
和order by
一起使用的時候一定要注意的執行順序的問題。
這句可以這樣實現
select id1,id2 from (select id1,id2 from t_tablename order by c_date desc) where rownum<3
用rownum
先排序後分頁
今天突然想到rownum
可以解決分頁問題,於是做了各種實驗,找個幾個文章,最後有了一定成果。
現有表tablename
,含有欄位showorder
,要求提取showorder
的第11行到20行資料。
用語句select rownum r,a.* from tablename a order by showorder
進行查詢的時候會發現結果集中rownum
是在排序之前賦的值,因此如果需要按showorder
提前的話應該先將tablename
按showorder
排序,將排序後的結果集按rownum
提取。
語句
SELECT ROWNUM r, a.* FROM (select * from tablename order by showorder) a WHERE ROWNUM <= 20
可以查出前20
條,但如果過濾條件變成rownum<=20 and rownum >=10
,就會發現結果集一條資料都沒有,因為rownum
是提取資料,將資料操作完成之後再進行標記行號,關於這點,有個作者寫的很好http://blog.csdn.net/greenappple/article/details/6872660,大家可以看看。
剩下的操作是將標記好行號的前20
條資料提取後十條。
SELECT * FROM (SELECT ROWNUM r, a.* FROM (select * from tablename order by showorder) a WHERE ROWNUM <= 20 ) WHERE r >= 11;
上面的語句用plsql執行時用了0.078秒,等同於plsql查詢上千行的表時只查處了前十條的時間。
網上有很多好文章寫著塊的,此處只記載了適用於我的方面。
相關文章
- SQL語句中的AND和OR執行順序問題SQL
- mysql order by 和 group by 順序問題MySql
- Sql執行順序SQL
- SQL 語句的執行順序SQL
- GROUPBY 和開窗函式執行順序的問題函式
- mysql 中sql語句關鍵字的書寫順序與執行順序MySql
- SQL語句執行順序SQL
- sql mysql 執行順序 (4)MySql
- js基礎進階–promise和setTimeout執行順序的問題JSPromise
- SQL語句各子句的執行順序SQL
- sql select語法執行順序SQL
- C++輸出流cout的執行順序問題C++
- SQL 查詢語句的執行順序解析SQL
- Hive SQL語句的正確執行順序HiveSQL
- pipeline的執行順序
- 你瞭解一條sql的執行順序嗎SQL
- Jmeter的元件作用域和執行順序JMeter元件
- Spring Aop的執行順序Spring
- JS中的async/await的執行順序詳解JSAI
- Js中async/await的執行順序詳解JSAI
- Java for迴圈中語句執行的順序Java
- 一個 MySQL sql 語句執行順序帶來的 bugMySql
- mysql 語句的執行順序MySql
- 關於 Promise 的執行順序Promise
- 聊聊如何讓springboot攔截器的執行順序按我們想要的順序執行Spring Boot
- 關於describe和test執行順序的翻譯
- Java中如何保證執行緒順序執行Java執行緒
- nestJs中 Guards ,Interceptors ,Pipes ,Controller ,Filters的執行順序JSControllerFilter
- Jetpack Compose的Modifier順序問題Jetpack
- MySQL按指定順序排序(order by field的使用)MySql排序
- thinkphp where in order 按照順序in的迴圈排序PHP排序
- sql語句執行順序與效能優化(1)SQL優化
- 路由的中介軟體執行順序路由
- Java中,類與類,類中的程式碼執行順序Java
- promise、async和await之執行順序的那點事PromiseAI
- js函式和變數的執行順序【易錯】JS函式變數
- iOS程式執行順序和UIViewController 的生命週期(整理)iOSUIViewController
- Java面試題:@PostConstruct、init-method和afterPropertiesSet執行順序?Java面試題Struct