Oracle、Mysql資料庫分頁查詢歸納
阿新 • • 發佈:2019-02-10
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;