Maison > base de données > tutoriel mysql > Quand utiliser CROSS APPLY ou OUTER APPLY en SQL ?

Quand utiliser CROSS APPLY ou OUTER APPLY en SQL ?

DDD
Libérer: 2025-01-10 09:03:41
original
226 Les gens l'ont consulté

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

Scénarios pratiques d'application de CROSS APPLY et OUTER APPLY en SQL

Les opérateurs OUTER APPLY et CROSS APPLY dans SQL fournissent des opérations de données flexibles et l'exécution de requêtes complexes. Voici quelques cas d'utilisation réels montrant quand utiliser chaque opérateur :

APPLICATION CROSS

  • Requête de groupe des N premiers enregistrements : CROSS APPLY peut récupérer efficacement les N premiers résultats de chaque groupe. Par exemple :
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 
Copier après la connexion
  • Appelez une fonction table pour chaque ligne : CROSS APPLY peut appeler une fonction table plusieurs fois, avec chaque ligne de la requête externe comme entrée. Par exemple :
SELECT *
FROM sys.dm_exec_query_stats AS qs
CROSS APPLY sys.dm_exec_query_plan(qs.plan_handle)
Copier après la connexion

APPLICATION EXTERNE

  • Réutiliser les alias de colonnes : OUTER APPLY permet de réutiliser les alias de colonnes sans créer de tables temporaires. Par exemple :
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)  
Copier après la connexion
  • Décompresser plusieurs groupes de colonnes : OUTER APPLY peut décompresser plusieurs groupes de colonnes à partir d'une table plate. Par exemple :
CREATE TABLE T
  (
     Id INT PRIMARY KEY,
     Foo1 INT, Bar1 INT,
     Foo2 INT, Bar2 INT,
     Foo3 INT, Bar3 INT
  );
Copier après la connexion

Utiliser la syntaxe VALUES (SQL Server 2008) :

SELECT Id,
       Foo,
       Bar,
       GrpName
FROM   T
       CROSS APPLY (VALUES('1', Foo1, Bar1),
                          ('2', Foo2, Bar2),
                          ('3', Foo3, Bar3)) V(GrpName, Foo, Bar); 
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal