Maison >base de données >tutoriel mysql >Quand et comment utiliser OUTER APPLY dans SQL : exemples concrets ?

Quand et comment utiliser OUTER APPLY dans SQL : exemples concrets ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2025-01-10 08:33:42185parcourir

When and How to Use OUTER APPLY in SQL: Real-World Examples?

Exemple d'application pratique de OUTER APPLY en SQL

OUTER APPLY est un opérateur puissant en SQL qui vous permet d'associer des lignes d'une table avec des lignes d'une autre table. Bien qu'il ressemble à INNER JOIN, il offre des fonctionnalités uniques dans des situations spécifiques.

Cas d'utilisation pour OUTER APPLY

Voici quelques exemples concrets d'OUTER APPLY qui a prouvé sa valeur :

Interroger les N premières lignes par groupe :

Exemple : Récupérer les deux premiers paramètres de chaque procédure stockée.

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

Appeler la fonction table :

Exemple : Exécutez une fonction table pour chaque ligne 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>

Réutiliser l'alias de colonne :

Exemple : Réutilisez les alias de colonnes pour effectuer plusieurs calculs.

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

Inverser plusieurs ensembles de colonnes :

Exemple : Inverser les données d'une table à structure dénormalisée.

<code class="language-sql">CREATE TABLE T
(
  Id INT PRIMARY KEY,
  Foo1 INT, Bar1 INT,
  Foo2 INT, Bar2 INT,
  Foo3 INT, Bar3 INT
);

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