一、首先看乙個簡單的測試
(1)建立乙個簡單的 test 表,裡面插入 1-9 條資料:
(2)按照 status 字段進行排序,得到的結果:
(3)使用 rownum 取前 5 條結果:
二、測試中的兩個問題
(1)上面第二步中,select 出來的結果,第 5 條記錄的 userid 不是 5,而是 9
原因:oracle 使用了不穩定排序演算法(即排序字段相同時,結果集不能保持原資料順序)
(2)上面第三步中,select 出來的結果,第 5 條記錄的 userid 不是 9,而是 5
原因:oracle 執行這個 sql 時,所用排序演算法與第二步所用的排序演算法不一樣
誤區:誤以為 oracle 先執行了第二步的 sql,然後直接取出前 5 條資料
實際上,oracle 執行這個 sql 的步驟是這樣子的:
1. 取出前 5 條資料進行排序
2. 取出第 6 條資料,與前 5 條資料一起再排序。排序後,取前 5 條資料,丟棄最後一條資料
3. 取出第 7 條資料,與前 5 條資料一起再排序。排序後,取前 5 條資料,丟棄最後一條資料
4. ...
5. 取出第 9 條資料,與前 5 條資料一起再排序。排序後,取前 5 條資料,作為結果集
參見:原文片段:
ps:我遇到的實際問題是,分頁查詢資料,查到某一頁之後,後面每一頁的內容都是一樣的
Oracle中使用rownum分頁
oracle的常用分頁就是rownum,在公司中也是使用rownum分頁。在oracle中分頁和mysql中不一樣,在mysql中由limit x,y這種形式分頁,而在oracle中常用分頁就是使用rownum分頁,相當於限定行數,從0行到多少行。rownum分頁必須從rownum 0開始,然後ro...
Oracle中使用偽列rownum實現分頁查詢
rownum是查詢返回的結果集中行的序號,可以使用它來限制查詢返回的行數 select from select from emp order by sal desc where rownum 3 結果如下 如果這樣寫 select from select from emp order by sal ...
Oracle中rownum的使用
首先,我們需要了解一下rownum的定義 rownum 是對結果集的編序排列,始終是從1開始。實際上rownum並不是乙個實際存在的列,所以我們平時對列進行的操作無法完全套用到上面。注意 rownum的查詢只能從1開始!在做乙個專案時遇到了rownum的問題。當時是需要獲取一張表中的資料,支援排序和...