天天看點

mysql+sqlserver 分頁sql語句

SQL Server

關于分頁 SQL 的資料許多,有的使用存儲過程,有的使用遊标。本人不喜歡使用遊标,我覺得它耗資、效率低;使用存儲過程是個不錯的選擇,因為存儲過程是颠末預編譯的,執行效率高,也更靈活。先看看單條 SQL 語句的分頁 SQL 吧。

方法1:

适用于 SQL Server 2000/2005

SELECT TOP 頁大小 * FROM table1 WHERE id NOT IN ( SELECT TOP 頁大小*(頁數-1) id FROM table1 ORDER BY id ) ORDER BY id

方法2:

适用于 SQL Server 2000/2005

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:

适用于 SQL Server 2005

SELECT TOP 頁大小 * FROM ( SELECT ROW_NUMBER() OVER (ORDER BY id) AS RowNumber,* FROM table1 ) A WHERE RowNumber > 頁大小*(頁數-1)

說明,頁大小:每頁的行數;頁數:第幾頁。使用時,請把“頁大小”以及“頁大小*(頁數-1)”替換成數位。

MYSQL

SELECT * FROM TT LIMIT 1,20

SELECT * FROM TT LIMIT 21,30

以下的文章主要介紹的是MySQL分頁的實際操作方案,其實關于實作MySQL分頁的最簡單的方法就是利用利用mysql資料庫的LIMIT函數,LIMIT [offset,] rows可以從MySQL資料庫表中第M條記錄開始檢索N條記錄的語句為:

 SELECT * FROM 表名稱 LIMIT M,N 

例如從表Sys_option(主鍵為sys_id)中從第10條記錄開始檢索20條記錄,語句如下:

select * from sys_option limit 10,20  

select * from table [查詢條件] order by id limit ?,?  

Oracle

Oracle的分頁查詢語句基本上可以按照這篇了,下一篇文章會通過例子來申述。下面簡單讨論一下多表聯合的情況。對最多見的等值表連接配接查詢,CBO 一般可能會采用兩種連接配接方式NESTED LOOP以及HASH JOIN(MERGE JOIN效率比HASH JOIN效率低,一般CBO不會考慮)。在這裡,由于使用了分頁,是以指定了一個歸回的最大記載數,NESTED LOOP在歸回記載數跨越最大值時可以頓時遏制并将結果歸回給中心層,而HASH JOIN必需處理完所有成集(MERGE JOIN也是)。那麼在大部分的情況下,對分頁查詢選擇NESTED LOOP作為查詢的連接配接方法具有較高的效率(分頁查詢的時候絕大部分的情況是查詢前幾頁的資料,越靠後面的頁數通路機率越小)。

是以,如果不介意在體系中使用HINT的話,可以将分頁的查詢語句改寫為:

SELECT * FROM

(

SELECT A.*, ROWNUM RN

FROM (SELECT * FROM TABLE_NAME) A

WHERE ROWNUM <= 40

)

WHERE RN >= 21

作者“ERDP技術架構”

MySQL實作資料分頁依靠的是limit這個屬性!

1. 标準查詢語句:

select * from table(表名) limit startPos,pageSize

小結:

1.startPos:定義目前頁起始位置 注意:目前頁的起始位置隻能在目前頁确定之後才能定義;

2.pageSize:定義每頁顯示資料的條數

3.如果給定2個參數,第一個指定要傳回的第一行的偏移量,第二個指定傳回行的最大數目。初始行的偏移量是0(不是1)。

如:select * from table LIMIT 5,10;           這個查詢出來的是第6到15之間的10條資料

 如果給定一個參數,它指出傳回行的最大數目。

如:select * from table LIMIT 5;                 這個查詢出來的是前5條資料

(LIMIT n等價于LIMIT 0,n

轉載于:https://www.cnblogs.com/zhaofei/p/3372830.html