程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> 其他數據庫知識 >> MSSQL >> SQL分頁查詢方式匯總

SQL分頁查詢方式匯總

編輯:MSSQL

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分頁查詢方式匯總,希望對大家有所協助,假如大家有任何疑問歡送給我留言,會及時回復大家的!

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved