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

SQL Server APPLY 運算子實戰:CROSS APPLY 與 OUTER APPLY 差異詳解

     編輯:SQL Server 2005

核心概念

APPLY 允許右側表值函數引用左側資料列的欄位當參數,邏輯順序:先算左側 → 每列呼叫右側函數 → 合併結果。這是 JOIN 無法做到的 (JOIN 兩側獨立計算)。

範例一:拆分分隔欄位 (CROSS APPLY)

SELECT lt.Id, s.Val
FROM dbo.LargeTable lt
CROSS APPLY dbo.Split(lt.Name, ':') s
WHERE s.Val <> '';

若某列拆分結果為空集,該列被過濾 (等同 INNER JOIN)。

範例二:供應商 Top 2 產品 (OUTER APPLY)

CREATE FUNCTION dbo.fn_TopProducts(@SupId INT)
RETURNS TABLE
AS RETURN
    SELECT TOP 2 Id, ProductName, UnitPrice
    FROM dbo.Products
    WHERE SupplierId = @SupId
    ORDER BY UnitPrice DESC;
GO

SELECT s.Id, s.CompanyName, p.ProductId, p.UnitPrice
FROM dbo.Supplier s
OUTER APPLY dbo.fn_TopProducts(s.Id) p;

無產品供應商仍保留,右側欄位為 NULL (等同 LEFT JOIN)。

對比總結

場景運算子結果
右側函數可能回空集,但需保留左側列OUTER APPLY左側全保留,右側補 NULL
右側函數必須有資料才有意義CROSS APPLY自動過濾空集列

效能提示

  • 表值函數建議使用 內嵌式 (Inline TVF) 而非多陳述式,讓最佳化器展開查詢計畫。
  • 避免在 APPLY 內使用標量函數,改用內嵌邏輯或 JOIN。
  • 大量資料時,確保函數參數欄位有索引支援 Seek。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved