oracle和mysql分頁


mysql分頁

關鍵字limit,limit m,n 其中m表示起始位置的下標,下標從0開始。n表示要顯示的條數,比如要查詢一個表的第2到5條數據。

select * from emp limit 1,4;

 

oracle分頁

關鍵字rownum, rownum表示返回數據的行號。使用它需謹慎,不能用rownum大於(大於1的數值)、大於等於(大於或等於1的數值)、=(大於或等於1的數值),否則無結果。

select count(*) from gcfr_t_vch a where rownum>1;

運行結果如下:

實際上這個表里是有數據的,理論上應該是能查出來數據的。但是為什么沒有出來呢?

這是因為:

1、ROWNUM是偽列,必須要要有返回結果后,每條返回記錄就會對應產生一個ROWNUM數值;

2、返回結果記錄的ROWNUM是從1開始排序的,因此第一條始終是1;

 這樣,當查詢到第一條記錄時,該記錄的ROWNUM為1,但條件要求ROWNUM>1,因此不符合,繼續查詢下一條;因為前面沒有符合要求的記錄,因此下一條記錄過來后,其ROWNUM還是為1,如此循環,就不會產生結果。上述查詢可以通過子查詢來替代:

 select count(*) from ( select guid,rownum r from gcfr_t_vch t ) tt where tt.r >1

 

所以使用rownum進行分頁,把rownum轉成一個普通列,然后再利用運算關系計算即可,比如查詢gcfr_t_vch表的第3到4條數據。

select * from (select rownum r,t.* from gcfr_t_vch t) tt where tt.r >= 3 and tt.r <= 4;
select * from (select rownum r,t.* from gcfr_t_vch t) tt where tt.r between 3 and 4;

select * from (select rownum r,t.* from gcfr_t_vch t) tt where  tt.r <= 4
minus
select * from (select rownum r,t.* from gcfr_t_vch t) tt where  tt.r <= 2;

以上3種寫法都可以。另外有個公式,用的時候直接套就行了。

select * from (select rownum r,t.* from gcfr_t_vch t) tt where tt.r >((pageNo - 1) * pageSize) and tt.r <= (pageNo * pageSize);

其中pageNo表示要顯示第幾頁,pageSize表示每頁要顯示的條數。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM