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...