1. 程式人生 > >Oracle、Mysql資料庫分頁查詢歸納

Oracle、Mysql資料庫分頁查詢歸納

Oracle 分頁查詢

Oracle分頁需要用到rownum偽類,和rowid記錄實體地址不同,他會根據返回的記錄生成一個序列化數字,利用rownum可以實現一些原先難以實現的結果輸出
1. 取出查詢結果前幾條資料

select * from table  where rownum <= 5;

2. 利用rownum對結果進行分頁,查詢6到10的結果

select * from (select a.*,rownum as rn from table a where a.name='best') b
where b.rn between 5 and 10; 

3. 高效率分頁方式

select  * from 
    (select a.*,rownum rn from 
        (select * from table) a where rownum <=10)  
where rn >=5
  /*這種查詢方法比第一個效率高的原因是CBO優化模式下,Oracle可以將外層的查條件推到內層查詢中,以提高內層查詢的執行效率。對於該查詢語句,第二層的查詢條件
  where rownum<=10就可以被Oracle推入到內層查詢中,這樣一旦查詢結果超過了rownum的限制條件,就終止查詢將結果放回了*/

4. 另外一種實現方式

 select
* from table a where a.name='best' and rownum<10 minus select * from table a where a.name='best' and rownum<5;
/*minus:指令是運用在兩個sql語句上。它先找出第一個sql語句所產生的結果,然後看這些結果中有沒有第二個sql語句所產生的重複結果,如果有的話,那麼這些和第二個 sql結果重複的資料將會被去除 */

Mysql 分頁查詢

Mysql分頁需要用到limit關鍵字:LIMIT[offset,] row 。
LIMIT 子句可以用於強制select語句返回指定的記錄數。LIMIT 接受一個或者兩個引數。引數必須是一個整數常量。如果給定兩個引數,那麼第一個引數指定第一個返回記錄行的偏移量,第二個引數指定返回記錄行的最大數目。初始記錄的偏移量是0(而不是 1)

1.分頁查詢6到10行記錄

select * from table limit 5,5;

2. 查詢某一個偏移量到記錄行的最後一條記錄,可以指定第二個引數為-1;

select * from table limit 5,-1;//查詢記錄行5-last

3.給定一個引數

select * from table limit 5;//返回前五條記錄;相當於 select * from table limit 0,5;