首頁 > 資料庫 > mysql教程 > 在 SQL 何時使用 CROSS APPLY 與 OUTER APPLY?

在 SQL 何時使用 CROSS APPLY 與 OUTER APPLY?

DDD
發布: 2025-01-10 09:03:41
原創
162 人瀏覽過

When to Use CROSS APPLY vs. OUTER APPLY in SQL?

SQL 中 CROSS APPLY 與 OUTER APPLY 的實際應用情境

SQL 中的 OUTER APPLY 和 CROSS APPLY 運算子提供了靈活的資料操作和複雜查詢執行方式。以下是一些實際用例,示範了何時使用每個運算符:

CROSS APPLY

  • 分組查詢 Top N 記錄: CROSS 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>
登入後複製
  • 為每一行呼叫表值函數: 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>
登入後複製

OUTER APPLY

  • 重複使用列別名: OUTER 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>
登入後複製
  • 解開多個列組: OUTER APPLY 可以從扁平表中解開多組列。例如:
<code class="language-sql">CREATE TABLE T
  (
     Id INT PRIMARY KEY,
     Foo1 INT, Bar1 INT,
     Foo2 INT, Bar2 INT,
     Foo3 INT, Bar3 INT
  );</code>
登入後複製

使用 VALUES 語法 (SQL Server 2008 ):

<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>
登入後複製

以上是在 SQL 何時使用 CROSS APPLY 與 OUTER APPLY?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板