Heim >Datenbank >MySQL-Tutorial >Wie können OUTER und CROSS APPLY SQL-Abfragen in realen Anwendungen verbessern?

Wie können OUTER und CROSS APPLY SQL-Abfragen in realen Anwendungen verbessern?

Linda Hamilton
Linda HamiltonOriginal
2025-01-10 07:47:41839Durchsuche

How Can OUTER and CROSS APPLY Enhance SQL Queries in Real-World Applications?

Praktische Anwendungen von OUTER und CROSS APPLY in SQL-Abfragen

OUTER und CROSS APPLY verbessern die Effizienz und Lesbarkeit von SQL-Abfragen in verschiedenen realen Anwendungen erheblich. Hier einige anschauliche Beispiele:

1. Top-N-Rekorde pro Kategorie:

Die Verwendung von APPLY bietet Leistungsvorteile gegenüber verschachtelten Abfragen beim Extrahieren der obersten N Zeilen für jede Gruppe. Betrachten Sie dieses 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>

2. Verwendung tabellenwertiger Funktionen:

CROSS APPLY vereinfacht die Anwendung von Tabellenwertfunktionen auf einzelne Zeilen der äußeren Abfrage:

<code class="language-sql">SELECT *
FROM sys.dm_exec_query_stats AS qs
CROSS APPLY sys.dm_exec_query_plan(qs.plan_handle);</code>

3. Effiziente Alias-Wiederverwendung:

CROSS APPLY ermöglicht die effektive Wiederverwendung von Spaltenaliasen innerhalb einer einzelnen Abfrage:

<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. Optimierung der Aufhebung der Pivotierung der Spalte:

APPLY bietet eine elegante Lösung zum Aufheben der Pivotierung mehrerer Spaltengruppen aus Tabellen mit einer nicht normalisierten Struktur:

<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 vonWie können OUTER und CROSS APPLY SQL-Abfragen in realen Anwendungen verbessern?. 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