oracle 中使用 rownum 的乙個誤區

2021-07-28 15:16:16 字數 1027 閱讀 5345

一、首先看乙個簡單的測試

(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的問題。當時是需要獲取一張表中的資料,支援排序和...