如何在oracle裡實現類似sql server裡top語法的分頁查詢,例如查詢結果集的前10條,查詢結果集的第10到第20條?
答案是使用子查詢,並使用oracle的函式rownum,舉例如下:
有乙個使用者表如下:
user (要求查詢狀態為1的按姓名排序的前10個使用者,sql如下:userid number ( 10 ) not null,
status number ( 3 ),
email varchar2 ( 256 ) not null,
username varchar2 ( 256 ),
password varchar2 ( 256 ),
constraint pk_user_1 primary key (userid)
)
select * from (select a.*,rownum rn from user a where a.status=1 order by a.username)做法就是將我們的查詢放到乙個子查詢裡,同時多查詢乙個結果,就是行數,使用rownumwhere rn<=10
然後在外面的查詢裡對行數做where條件,根據需要查詢不同的結果集,如果是前10條就是rn<=10,如果是10~20條就是rn<20 and rn>=10,等等
執行上述sql查詢會發現取出的10個結果未必是按username排序後的前10條,這是因為oracle的rownum函式實際產生的是乙個偽列,其行號並不是完全按照結果集的順序,具有一定的隨機性,所以需要對上述語句做一些修改,使用row_number()函式,如下:
select * from (select a.*,row_number() over (order by a.username) rn from user a where a.status=1)where rn<=10
Oracle中的SQL分頁分頁
作者出處 本文分析並介紹oracle中的分頁查詢的方法。oracle中的表,除了我們建表時設計的各個字段,其實還有兩個字段 此處只介紹2個 分別是rowid 行標示符 和rownum 行號 即使我們使用describe命令檢視表的結構,也是看不到這兩個列的描述的,因為,他們其實是只在資料庫內部使用的...
oracle中的分頁
方法一 適合小資料量 select from select rownum as 別名 rn,別名d.from 表名1 as 別名 d where rownum 20 where別名 rn 11 方法二速度較穩定,推薦使用 select from select row number over orde...
oracle分頁中的問題
oracle查詢中rownum與order by查詢的關係 在開發應用的時候,把資料按照一定的規則排序後再取前幾條資料這種操作是很平常的事情。我們在oracle中常用的就是order by,然後取得rownum小於多少的資料這種方法。不過如果對oracle不熟悉,也許就會發現你寫的sql語句檢索出來...