前提:
分頁參數: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,怎樣寫一個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);//設定每頁顯示數目
4. 用oracle在mybatis中分頁sql怎麼寫(1)select * from (select a.*, rownum rnum from (select id, data from t order by id, rowid) a ) where rnum >= 148 and rnum<=151;或者(2)select * from (select a.*, rownum rnum from (select id, data from t order by id, rowid) a where rownum <= 151 ) where rnum >= 148;最近在開發中同事說第(1)種效率不好,而第(2)種在只有唯一值(列)的時間才能正常排序,以前一直用第(1)種,今天同事找到如下的方式,解決了 第(2)種唯一值(列)排序的問題,如下:(3)select * from (select a.*, rownum rnum from (select id, data from t order by id, rowid) a where rownum <= 151 ) where rnum >= 148;。