首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server 分頁查詢兩種經典寫法

     編輯:關於SqlServer

前提條件

資料表必須擁有自動遞增且唯一的主鍵欄位(如 IDENTITY 欄位),否則以下方法可能產生錯誤結果。

方法一:子查詢 + MAX 邊界法

SELECT DISTINCT TOP 8 CategoryID
FROM tbl_Product_Products
WHERE (UserID = 73)
  AND (CategoryID > (
    SELECT MAX(categoryid)
    FROM (
      SELECT DISTINCT TOP 16 categoryid
      FROM tbl_product_products
      WHERE userid = 73
      ORDER BY categoryid
    ) AS b
  ))
ORDER BY CategoryID;

原理:內層取前 16 筆,外層取其最大值作為下一頁起始邊界,再取後 8 筆。適用於無法使用 OFFSET/FETCH 的舊版 SQL Server。

方法二:NOT IN / ALL 子查詢法

SELECT TOP 10 *
FROM [order details]
WHERE orderid > ALL (
  SELECT TOP 10 orderid
  FROM [order details]
  ORDER BY orderid
)
ORDER BY orderid;

原理:排除前 10 筆的 orderid,取得第 11-20 筆。> ALL 等同於「大於子查詢最大值」。

現代寫法建議(SQL Server 2012+)

SELECT *
FROM [order details]
ORDER BY orderid
OFFSET 10 ROWS FETCH NEXT 10 ROWS ONLY;

OFFSET/FETCH 語法更直觀、效能更佳,請優先使用新版本支援的標準分頁語法。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved