Heim >Datenbank >MySQL-Tutorial >Wann sollte CROSS APPLY vs. OUTER APPLY in SQL verwendet werden?

Wann sollte CROSS APPLY vs. OUTER APPLY in SQL verwendet werden?

DDD
DDDOriginal
2025-01-10 09:03:41230Durchsuche

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

Praktische Anwendungsszenarien von CROSS APPLY und OUTER APPLY in SQL

Die Operatoren OUTER APPLY und CROSS APPLY in SQL ermöglichen flexible Datenoperationen und komplexe Abfrageausführung. Hier sind einige Anwendungsfälle aus der Praxis, die veranschaulichen, wann die einzelnen Operatoren verwendet werden sollten:

ÜBERGREIFENDE ANWENDUNG

  • Gruppenabfrage Top-N-Datensätze: CROSS APPLY kann die Top-N-Ergebnisse in jeder Gruppe effizient abrufen. Zum Beispiel:
<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>
  • Für jede Zeile eine Tabellenwertfunktion aufrufen: CROSS APPLY kann eine Tabellenwertfunktion mehrmals aufrufen, wobei jede Zeile der äußeren Abfrage als Eingabe dient. Zum Beispiel:
<code class="language-sql">SELECT *
FROM sys.dm_exec_query_stats AS qs
CROSS APPLY sys.dm_exec_query_plan(qs.plan_handle)</code>

ÄUSSERLICHE ANWENDUNG

  • Spaltenaliase wiederverwenden: OUTER APPLY ermöglicht die Wiederverwendung von Spaltenaliasen, ohne temporäre Tabellen zu erstellen. Zum Beispiel:
<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>
  • Mehrere Spaltengruppen entpacken: OUTER APPLY kann mehrere Spaltengruppen aus einer flachen Tabelle entpacken. Zum Beispiel:
<code class="language-sql">CREATE TABLE T
  (
     Id INT PRIMARY KEY,
     Foo1 INT, Bar1 INT,
     Foo2 INT, Bar2 INT,
     Foo3 INT, Bar3 INT
  );</code>

Verwenden Sie die VALUES-Syntax (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>

Das obige ist der detaillierte Inhalt vonWann sollte CROSS APPLY vs. OUTER APPLY in SQL verwendet werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn