幾種資料庫的sql分頁

2021-08-31 15:16:17 字數 1846 閱讀 1980

oracle 分頁

分頁查詢格式(第1種):

select * from

(select a.*, rownum rn

from (select * from table_name) a

where rownum <= 40

)where rn >= 21

分頁查詢格式(第2種):

select * from

(select a.*, rownum rn

from (select * from table_name) a

)where rn between 21 and 40

對比這兩種寫法,絕大多數的情況下,第乙個查詢的效率比第二個高得多。

參考:

sqlserver 分頁

方法1:

select top 頁大小 *

from table1

where id not in

(select top 頁大小*(頁數-1) id from table1 order by id

)order by id

方法2:

select top 頁大小 *

from table1

where id >

(select isnull(max(id),0)

from

(select top 頁大小*(頁數-1) id from table1 order by id

) a)

order by id

方法3:

select top 頁大小 *

from

(select row_number() over (order by id) as rownumber,* from table1

) awhere rownumber > 頁大小*(頁數-1)

說明,頁大小:每頁的行數;頁數:第幾頁。使用時,請把「頁大小」和「頁大小*(頁數-1)」替換成數字。

通過sql 查詢分析器,顯示比較:我的結論是:

分頁方案二:(利用id大於多少和select top分頁)效率最高,需要拼接sql語句

分頁方案一:(利用not in和select top分頁)   效率次之,需要拼接sql語句

分頁方案三:(利用sql的游標儲存過程分頁)    效率最差,但是最為通用

參考:

mysql 分頁

mysql 的語法:

select * from table  limit [offset,] rows | rows offset offset

limit 子句可以被用於強制 select 語句返回指定的記錄數。

limit 接受乙個或兩個數字引數。

引數必須是乙個整數常量。如果給定兩個引數,

第乙個引數指定第乙個返回記錄行的偏移量,第二個引數指定返回記錄行的最大數目。

初始記錄行的偏移量是 0(而不是 1)

具體的使用命令如下:

mysql> select * from table limit 5,10;  // 檢索記錄行 6-15

//為了檢索從某乙個偏移量到記錄集的結束所有的記錄行,可以指定第二個引數為 -1:

mysql> select * from table limit 95,-1; // 檢索記錄行 96-last.

//如果只給定乙個引數,它表示返回最大的記錄行數目:

mysql> select * from table limit 5;     //檢索前 5 個記錄行

//換句話說,limit n 等價於 limit 0,n。

參考:

各種資料庫分頁SQL總結

1.oracle,使用3層巢狀 quote select from select b.rownum as rn from select from ms user where comp cd 1 order by login user id b 1.先查出符合條件資料 where rownum 20 ...

各種資料庫分頁的sql語句

1.oracle資料庫分頁 select from select a.rownum rc from 表名 where rownum endrow a where a.rc startrow 2.db2資料庫分頁 select from select rownumber over as rc,a.fr...

各種資料庫分頁查詢sql語句

1.oracle資料庫分頁 select from select a.rownum rc from 表名 where rownum endrow a where a.rc startrow 2.db2資料庫分頁 select from select rownumber over as rc,a.fr...