Oracle 三層巢狀做分頁

2022-08-29 10:57:15 字數 1609 閱讀 9316

oracle分布查詢用三層巢狀 步驟如下:

--第三層:分頁過濾

select b.* from(

--第二層:給定行號

select rownum r,a.*from(

第一層:排序

select * from 表 order by 字段

)awhere rownum<=最大行

)b  where b.r between 最小行 and 最大行

關鍵點:先排序,後給行號,兩個步驟要分開!

為了程式的通用性,對任意資料集都能分頁,利用子查詢改為如下結構:

--第三層:分頁過濾

select b.* from(

--第二層:排序

select rownum r,a.* from(

--第一層:排序

select * from (乙個已經排序的資料集)

)a  where rownum<=最大行

)b where b.r between 最小行 and 最大行

如上面的查詢改為:

--第三層:分頁過濾

select b.* from(

--第二層:給定行號

select rownum r,a.* from (

--第一層:排序

select * from (select t.* from t_stu order by s_birthday desc)

)a  where rownum<=最大行

)b  where b.r between 最小行 and 最大行

或者其他查詢語句:

--第三層:分頁過濾

select b.* from(

--第二層:給定行號

select rownum r,a.* from(

--第一層:排序

select * from (select t.* from 新聞表 t order by 日期 desc)

)a  where rownum<=最大行

)b  where b.r between 最小行 and 最大行

也可以使用解析函式完成上面相同的任務,步驟簡單:

select * from (

select row_number() over (order by s_birthday desc) as r, t.* from t_stu t

) where r between 2 and 4

select * from ( select row_.*, rownum rownum_ from ( 

select * from 表名 (where條件略)

) row_ where 最大行數 >= rownum )

where rownum_ > 最小行數

用這種方式,注意

最大行數=pageno * pagesize

最小行數= (pageno - 1) * pagesize+1

第一頁查詢 0-10

第二頁查詢 11-20

第三頁查詢 21-30

……where rownum_ > 最小行數時 用

最小行數= (pageno - 1) * pagesize

不需要+1,因為是》不是》= 

為什麼oracle需要三層巢狀來實現分頁

看下面這個sql語句 select t2.from select t.rownum as row num from t where rownum 20 order by asc10 order by asc 因為在查詢的時候,order by 的執行是在 select 之後的,所以在第一層查詢中,得...

Orcale三層巢狀實現分頁功能

選擇第21條到第40條記錄查詢方法 分頁查詢格式 一 select from select a.rownum rn from select from table1 a where rownum 40 where rn 21 分析 select from table1表示不進行分頁的原始語句 rown...

Map集合及三層巢狀

1.定義 無序,以鍵值 key,value 對的形式儲存資料,鍵唯一,值不唯一 注意 1 鍵key的底層結構為set集合,其特徵之一是無序 2 值value的底層結構為collection集合,其特徵之一是物件可重複 3 map集合不繼承collection介面 2.遍歷方式 3種 1 獲取鍵key...