前提:
分頁參數:size = 20 page = 2;
沒有order by的查詢;
嵌套子查詢,兩次篩選(推薦使用)。
SQL語句:
SELECT *
FROM (SELECT ROWNUM AS rowno, t.*
FROM DONORINFO t
WHERE t.BIRTHDAY BETWEEN TO_DATE ('19800101', 'yyyymmdd')
AND TO_DATE ('20060731', 'yyyymmdd')
AND ROWNUM <= 20*2) table_alias
WHERE table_alias.rowno > 20*(2-1);
擴展資料:
rownum總是從1開始的,第一條不滿足去掉的話,第二條的rownum 又成了1。依此類推,所以永遠沒有不滿足條件的記錄。
可以這樣理解:rownum是一個序列,是Oracle數據庫從數據文件或緩衝區中讀取數據的順序。它取得第一條記錄則rownum值為1,第二條為2。
依次類推:當使用“>;、>;=、=、between。and”這些條件時,從緩衝區或數據文件中得到的第一條記錄的rownum為1,不符合sql語句的條件,會被刪除,接着取下條。下條的rownum還會是1,又被刪除,依次類推,便沒有了數據。
2. 初學oracle,怎樣寫一個oracle分頁sql語句sql = "select * from " +
"(select rownum r,* from " +
"(select * from articles order by postime desc)" +
"where rownum<= " + pageNo*pageSize +") tmp " +
"where r>" + (pageNo-1)*pageSize;
其中,pageNo為頁數,pageSize為每頁顯示條數。
3. Oracle 中適合多表的分頁語句怎麼寫SELECT * FROM
(
SELECT A.*, ROWNUM RN
FROM (SELECT * FROM TABLE_NAME) A
WHERE ROWNUM <= 40
)
WHERE RN >= 21
其中最內層的查詢SELECT * FROM TABLE_NAME表示不進行翻頁的原始查詢語句。ROWNUM <= 40和RN >= 21控制分頁查詢的每頁的範圍。
4. 初學oracle,怎樣寫一個oracle的分頁sql語句先定義一個類除了上一頁,下一頁,首頁,尾頁,還要每頁字段條數,當前頁,總頁數,總字段數
總字段數就是你查詢出來的總字段數,
每頁字段條數是你自己定義的,
然後算出總頁數,當前頁
然後你就可以拼接sql語句了:
select top A * from table where id not in (select top A*(B-1) id from table);
A是每頁字段條數,B是當前頁。
其實如果用了hibernate 會發現,有現成的方法
Query對象
query.setFirstResult(A);//設置當前頁碼,從0開始
query.setMaxResults(B);//設置每頁顯示數目
5. oracle分頁查詢語句怎麼寫每頁查詢10條1、通常的分頁寫法,也是第一種分頁方法,類似如下方式:
select * from (
select a.*, rownum rn from
(select * from test a order by object_name) a
where rownum <=1000)
where rn > 990;
這種方式,是對錶進行排序翻頁,比較常見,但是,第一頁與第1000頁的性能差異還是挺明顯的。
2、第二種的分頁寫法是對索引進行翻頁操作,然後根據rowid 去表中取數據。 這種方式,第一頁與第1000頁性能相差不大。
以下語句雖然使用HINT指定使用索引, 但是仍然沒有生效。
select b.* from (
select * from (
select a.*, rownum rn from
(select /*+ index(a ix_object_name) */ rowid rid from test a order by object_name) a
where rownum <=20)
where rn > 10) a, test b
where a.rid = b.rowid;