OUTER/CROSS APPLY 在 SQL 的實際應用
OUTER 和 CROSS APPLY 是強大的 SQL 運算符,提供增強的資料操作功能。 本文透過實際範例闡明了它們的實際用途。
場景 1:每個類別前 N 筆記錄
OUTER APPLY 對於檢索每組中的前 N 行被證明是非常有價值的。 考慮尋找每個預存程序的前兩個參數:
<code class="language-sql">SELECT pr.name, pa.name FROM sys.procedures pr OUTER APPLY ( SELECT TOP 2 * FROM sys.parameters pa WHERE pa.object_id = pr.object_id ORDER BY pr.name ) pa ORDER BY pr.name, pa.name;</code>
場景 2:使用表值函數
CROSS APPLY 有助於為主查詢中的每一行執行表值函數。例如:
<code class="language-sql">SELECT * FROM sys.dm_exec_query_stats AS qs CROSS APPLY sys.dm_exec_query_plan(qs.plan_handle);</code>
這可以有效地將 sys.dm_exec_query_plan
應用於 sys.dm_exec_query_stats
中的每一行。
場景 3:重用計算列
APPLY 允許重複使用計算列別名,從單一表達式產生多個派生欄位:
<code class="language-sql">SELECT number, doubled_number, doubled_number_plus_one FROM master..spt_values CROSS APPLY ( SELECT 2 * CAST(number AS BIGINT) ) CA1(doubled_number) CROSS APPLY ( SELECT doubled_number + 1 ) CA2(doubled_number_plus_one);</code>
場景 4:逆透視多列組
對於違反 1NF 的資料集,APPLY 可以同時有效率地逆透視多個列組:
<code class="language-sql">SELECT Id, Foo, Bar, GrpName FROM T CROSS APPLY ( VALUES('1', Foo1, Bar1), ('2', Foo2, Bar2), ('3', Foo3, Bar3) ) V(GrpName, Foo, Bar);</code>
掌握 OUTER/CROSS APPLY 可顯著增強 SQL 資料操作技能,為複雜的資料挑戰提供高效率的解決方案。
以上是OUTER/CROSS APPLY 如何解決現實世界中的 SQL 資料操作挑戰?的詳細內容。更多資訊請關注PHP中文網其他相關文章!