Maison >base de données >tutoriel mysql >Comment OUTER et CROSS APPLY peuvent-ils améliorer les requêtes SQL dans les applications du monde réel ?

Comment OUTER et CROSS APPLY peuvent-ils améliorer les requêtes SQL dans les applications du monde réel ?

Linda Hamilton
Linda Hamiltonoriginal
2025-01-10 07:47:41840parcourir

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

Applications pratiques de OUTER et CROSS APPLY dans les requêtes SQL

OUTER et CROSS APPLY améliorent considérablement l'efficacité et la lisibilité des requêtes SQL dans diverses applications du monde réel. Voici quelques exemples illustratifs :

1. Top N enregistrements par catégorie :

L'utilisation d'APPLY offre des avantages en termes de performances par rapport aux requêtes imbriquées lors de l'extraction des N premières lignes de chaque groupe. Prenons cet exemple :

<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. Utilisation de fonctions table :

CROSS APPLY simplifie l'application de fonctions table à des lignes individuelles de la requête externe :

<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. Réutilisation efficace des alias :

CROSS APPLY permet la réutilisation efficace des alias de colonnes au sein d'une même requête :

<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. Colonne rationalisée sans pivotement :

APPLY fournit une solution élégante pour annuler le pivotement de plusieurs groupes de colonnes à partir de tables avec une structure non normalisée :

<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>

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:
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