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
Libérer: 2025-01-10 08:33:42
original
180 Les gens l'ont consulté

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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

source:php.cn
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal