首頁 >資料庫 >mysql教程 >OUTER/CROSS APPLY 如何解決現實世界中的 SQL 資料操作挑戰?

OUTER/CROSS APPLY 如何解決現實世界中的 SQL 資料操作挑戰?

Barbara Streisand
Barbara Streisand原創
2025-01-10 06:06:41561瀏覽

How Can OUTER/CROSS APPLY Solve Real-World SQL Data Manipulation Challenges?

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn