Maison > base de données > tutoriel mysql > Quand devriez-vous utiliser une expression de table commune (CTE) au lieu d'une table dérivée ?

Quand devriez-vous utiliser une expression de table commune (CTE) au lieu d'une table dérivée ?

Patricia Arquette
Libérer: 2025-01-05 22:45:40
original
201 Les gens l'ont consulté

When Should You Use a Common Table Expression (CTE) Instead of a Derived Table?

Quand une expression de table commune (CTE) est-elle nécessaire ?

Bien que les tables dérivées puissent sembler suffisantes dans tous les scénarios, les expressions de table communes ( CTE) offrent des avantages distincts dans certaines circonstances.

Limitations des valeurs dérivées et temporaires Tables

Considérez un scénario dans lequel les données doivent être jointes plusieurs fois. L'utilisation d'instructions SELECT régulières ou de tables dérivées entraînerait la réplication de la syntaxe de jointure pour chaque instance, augmentant ainsi la verbosité du code. Cependant, les CTE vous permettent de définir une table réutilisable qui peut être référencée plusieurs fois dans la requête.

Exemple

Supposons que vous ayez une table « Clients » et que vous souhaitiez trouver des clients qui ont passé plusieurs commandes.

Utiliser CTE :

WITH CustomerOrders AS (
    SELECT CustomerID, COUNT(*) AS OrderCount
    FROM Orders
    GROUP BY CustomerID
)

SELECT *
FROM Customers
JOIN CustomerOrders ON Customers.CustomerID = CustomerOrders.CustomerID
WHERE OrderCount > 1;
Copier après la connexion

Utilisation d'une table dérivée :

(SELECT CustomerID, COUNT(*) AS OrderCount
FROM Orders
GROUP BY CustomerID) AS CustomerOrders

SELECT *
FROM Customers
JOIN CustomerOrders ON Customers.CustomerID = CustomerOrders.CustomerID
WHERE OrderCount > 1;
Copier après la connexion

Comme vous pouvez le constater, l'approche CTE élimine le besoin de définir l'alias de la table dérivée ("CustomerOrders") deux fois.

Autres CTE Avantages

Outre la réutilisabilité, les CTE offrent des avantages supplémentaires :

  • Récursion : La récursion peut être implémentée à l'aide des CTE, permettant des requêtes complexes qui traversent la hiérarchie structures de données.
  • Stockage temporaire : Les CTE fournissent stockage temporaire pour les résultats de requêtes intermédiaires, sans avoir besoin de créer des tables temporaires explicites.
  • Regroupement par colonnes dérivées : Les CTE permettent le regroupement par colonnes dérivées de sous-requêtes scalaires ou de fonctions non déterministes, ce qui est pas possible avec les tables dérivées.

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