SQL分頁查詢方式匯總。本站提示廣大學習愛好者:(SQL分頁查詢方式匯總)文章只能為提供參考,不一定能成為您想要的結果。以下是SQL分頁查詢方式匯總正文
需求:查詢表dbo.Message,每頁10條,查詢第2頁
1:TOP()
SELECT TOP(20) * FROM dbo.Message WHERE Code NOT IN (SELECT TOP(10) Code FROM dbo.Message)
2:BETWEEN * AND * , Row_Number() OVER(ORDER BY *) AS rowNum
SELECT *,ROW_NUMBER() OVER(ORDER BY Code) AS rowNum INTO #a FROM dbo.Message SELECT * FROM #a WHERE rowNum BETWEEN 11 AND 20 DROP TABLE #a;
3:WITH * AS () , Row_Number() OVER(ORDER BY *) AS rowNum
WITH sss AS( SELECT *,ROW_NUMBER() OVER(ORDER BY CreateTime) AS rowNum FROM DBO.Message ) SELECT * FROM sss WHERE rowNum BETWEEN 11 AND 20
4: SQL Server 2012的OFFSET-FETCH挑選
SELECT * FROM DBO.Message ORDER BY CreateTime OFFSET 10 ROWS FETCH NEXT 10 ROWS ONLY
這裡第4中辦法做詳細引見:
TOP選項是一個十分適用的挑選類型,但它有兩個缺陷——不是規范SQL,且不支持跳過功用。規范SQL定義的TOP相似挑選稱為OFFSET-FETCH,支持跳過功用,這對針對特定頁面的查詢十分有用。SQL Server2012引入了對OFFSET-FETCH挑選的支持。
SQL Server 2012中的OFFSET-FETCH挑選被視為ORDER BY子句的一局部,通常用於完成按順序顯示效果。OFFSET子句指定要跳過的行數,FETCH子句指定在跳過的行數後要挑選的行數。請考慮一下上面的查詢示例。
SELECT orderid, orderdate, custid, empid FROM Sales.Orders ORDER BY orderdate, orderid OFFSET 50 ROWS FETCH NEXT 25 ROWS ONLY;
此查詢按orderdate、orderid順序(訂單日期從最遠到最近,並添加了決勝屬性(tiebreaker)orderid)排序Orders表中的行。基於此順序,OFFSET子句跳過前50行,由FETCH子句僅挑選上面的25行。
請留意,運用OFFSET-FETCH的查詢必需具有ORDER BY子句。此外,FETCH子句不支持沒有OFFSET子句。假如你不想跳過任何行,但是希望運用FETCH挑選,你該當運用OFFSET 0 ROWS來表示。不過,沒有FETCH的OFFSET是允許的,這種狀況是跳過指定的行數,並前往查詢後果中一切剩余行。
OFFSET-FETCH語法有一些風趣的言語方面需求留意。雙數格式ROW和單數格式ROWS是可以互換的,此舉是讓你可以以直觀的相似英語方式來描繪挑選。例如,假定你僅希望獲取一行,假如你指定了FETCH 1 ROWS,雖然這在語法上是無效的,不過看上去會很怪。因而,你可以運用FETCH 1 ROW格式。此互換異樣適用於OFFSET子句。另外,假如你不希望跳過任何行(OFFSET 0 ROWS),你能夠覺得“first”比“next”更適宜,因而,FIRST 和NEXT格式是可以互換的。
如你所見,從支持跳過功用看,OFFSET-FETCH子句比TOP子句更靈敏。不過,OFFSET-FETCH 不支持PERCENT和WITH TIES選項,而TOP支持。由於OFFSET-FETCH是規范的,而TOP不是,我建議運用OFFSET-FETCH作為你的默許選擇,除非你需求TOP支持且OFFSET-FETCH不支持的功用。
以上所述是給大家引見的SQL分頁查詢方式匯總,希望對大家有所協助,假如大家有任何疑問歡送給我留言,會及時回復大家的!