SQL 中的Skip 和Take:相當於LINQ
LINQ 的.Skip() 和.Take() 方法提供了一種便捷的工作方式記憶體中的資料子集。然而,在底層資料來源是大型 SQL 資料庫的情況下,通常最好直接在 SQL 中而不是在記憶體中執行這些操作。這避免了將大量資料傳輸到記憶體中的開銷。
其中一個場景是當您需要從資料庫表中選擇特定範圍的行時。 LINQ 為此目的提供了 .Skip() 和 .Take() 方法,但是是否有直接等效的 SQL 方法?
SQL Server 2012 及更高版本
SQL Server 2012 年以上版本引入了行偏移和限制的新語法:
OFFSET (@Skip) ROWS FETCH NEXT (@Take) ROWS ONLY
選擇對於特定表中的第1000-1100行,您將使用以下查詢:
SELECT * FROM Sales.SalesOrderHeader ORDER BY OrderDate OFFSET 1000 ROWS FETCH NEXT 100 ROWS ONLY
此查詢將執行以下步驟:
此解決方案比在記憶體中執行相同操作要高效得多,因為它避免了選擇所有行的需要,只需丟棄前 1000 行並手動選擇接下來的 100 行。
以上是是否有相當於 LINQ 的 Skip() 和 Take() 的直接 SQL?的詳細內容。更多資訊請關注PHP中文網其他相關文章!