Table des matières
Qu'est-ce que CTE?
Améliorer la lisibilité du code à l'aide de CTE
CTE récursif
Quelques précautions dans les applications pratiques
Maison base de données SQL Travailler avec des expressions de table communes (CTES) dans SQL

Travailler avec des expressions de table communes (CTES) dans SQL

Jul 16, 2025 am 03:22 AM

CTE (Expression de la table commune) est un outil de SQL pour diviser les requêtes complexes, améliorer la lisibilité et la maintenance. Il s'agit d'un ensemble de résultats temporaire qui peut être référencé plusieurs fois dans une seule requête, avec une structure claire, particulièrement adaptée aux sous-requêtes imbriquées et au traitement récursif des données. La syntaxe de base est avec CTE_NAME AS (Instruction de requête) SELECT * FROM CTE_NAME; Par exemple, lorsque vous comptez le nombre d'employés du département, vous pouvez d'abord définir le CTE DEPT_COUNT, puis filtrer les résultats. L'utilisation du CTE peut démonter la logique en étapes, telles que le calcul du salaire moyen de chaque département, puis trouver des employés qui sont supérieurs au salaire moyen, ce qui rend le code plus facile à comprendre. Le CTE prend également en charge les requêtes récursives, adaptées aux données de la structure des arbres, dans le format avec CTE_name récursif AS (Union All Recursive Query), comme trouver un employé et tous les subordonnés. Les notes comprennent: la partie récursive doit se référer et avoir des conditions de terminaison; Différents niveaux de support de base de données sont différents; Le CTE n'est pas matérialisé et les références répétées peuvent affecter les performances; éviter les conflits avec les noms de table; et l'attention doit être accordée à la version de la base de données en termes de compatibilité. Il est recommandé de donner la priorité à l'utilisation du CTE lorsque vous devez démonter la logique, les requêtes récursives ou améliorer la lisibilité.

Travailler avec des expressions de table communes (CTES) dans SQL

CTE (Expression de la table commune) est un outil très pratique de SQL qui vous permet de diviser des requêtes complexes en parties plus lisibles et maintenables. Surtout lorsque vous traitez des sous-requêtes imbriquées ou des données récursives, les avantages de la structure claire de CTE sont très évidents.

Travailler avec des expressions de table communes (CTES) dans SQL

Qu'est-ce que CTE?

CTE est un ensemble de résultats temporaire qui peut être référencé plusieurs fois dans une requête. Ce n'est pas un tableau physique, mais une "vue temporaire" logique, et sa portée est limitée à la requête qui le définit.

Travailler avec des expressions de table communes (CTES) dans SQL

La syntaxe de base est la suivante:

 Avec cte_name comme (
    - déclaration de requête)
SELECT * FROM CTE_NAME;

Par exemple, si vous souhaitez compter le nombre d'employés dans chaque département, vous pouvez l'écrire comme ceci:

Travailler avec des expressions de table communes (CTES) dans SQL
 Avec dept_count comme (
    Sélectionnez Department_id, Count (*) comme num_employes
    Des employés
    Groupe par département_id
)
SELECT * FROM DEPT_COUNT WHERE NUM_EMPLOYEES> 5;

Cela a non seulement une structure claire, mais facilite également le débogage et la réutilisation.


Améliorer la lisibilité du code à l'aide de CTE

Beaucoup de gens aiment utiliser des sous-requêtes imbriquées pour résoudre des problèmes au début, mais une fois qu'il y a plus de niveaux, SQL devient difficile à comprendre et à maintenir. Et l'utilisation du CTE peut être écrite de couche par couche, et chaque pièce est claire et claire.

Par exemple: Supposons que vous souhaitiez trouver des employés dont le salaire est supérieur au salaire moyen de votre département. Si vous écrivez avec une sous-requête, vous pouvez avoir imbriqué trois couches, ce qui semble très déroutant; Mais si vous utilisez CTE:

 Avec avg_salary comme (
    Sélectionnez Department_id, AVG (Salaire) comme AVG_SAL
    Des employés
    Groupe par département_id
),
high_earners as (
    Sélectionner e. *
    Des employés e
    Rejoignez AVG_SALARY A sur E.Deartment_ID = A.DEPARTMENT_ID
    Où e.salary> a.avg_sal
)
SELECT * dans High_earners;

Écrivez-le en étapes et d'autres sauront ce que vous faites en un coup d'œil.


CTE récursif

L'une des fonctions les plus puissantes du CTE est qu'elle prend en charge les requêtes récursives, qui conviennent aux structures d'arbres ou aux données hiérarchiques, telles que les structures organisationnelles, les structures de répertoires, etc.

Le format de base est le suivant:

 Avec Cte_name récursif comme (
    - Requête initiale (membre d'ancrage)
    SÉLECTIONNER ...
    Union All
    - requête récursive SELECT ...
)
SELECT * FROM CTE_NAME;

Par exemple, trouvez un employé et tous ses subordonnés:

 Avec des subordonnés récursifs comme (
    Sélectionnez Employee_ID, Manager_id, nom
    Des employés
    Où Employee_ID = 100 - Démarrage du syndicat des employés

    Sélectionnez E.Eemployee_ID, E.Manager_id, E.Name
    Des employés e
    INTER JOIN SUBORDATIONS S sur e.manager_id = s.employee_id
)
Sélectionner * dans les subordonnés;

Quelques points à noter:

  • La partie récursive doit se référer au CTE lui-même
  • Il doit y avoir une condition de terminaison, sinon il y aura des boucles infinies
  • Différentes bases de données ont une prise en charge légèrement différente du CTE récursif. Vérifiez le document avant de l'utiliser.

Quelques précautions dans les applications pratiques

Bien que le CTE soit très utile, certains détails doivent être prêts à faire attention:

  • Problèmes de performance : le CTE n'est pas une vue matérialisée, et elle sera exécutée à nouveau chaque fois que la référence est référencée. Si vous utilisez plusieurs CTES sur une grande table, et chacun est appelé plusieurs fois, il peut ralentir la requête.
  • Nommer les conflits : ne donnez pas au CTE le même nom que le tableau réel, car il est facile d'être confus.
  • Compatibilité : Bien que les bases de données grand public prennent en charge CTE (comme PostgreSQL, MySQL 8.0 et SQL Server), certaines versions plus anciennes peuvent ne pas prendre en charge le CTE récursif.

Il est recommandé de hiérarchiser le CTE dans les scénarios suivants:

  • La requête est compliquée et nécessite un démontage de la logique
  • Une requête récursive est requise
  • Veulent améliorer la lisibilité au code et la maintenance

Fondamentalement, c'est tout. Le CTE est une manière très pratique dans l'écriture SQL. Après l'avoir maîtrisé, vous constaterez que de nombreuses requêtes complexes peuvent devenir plus claires et plus faciles à comprendre.

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

Outils d'IA chauds

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Tutoriel PHP
1580
276
Options informatiques sans serveur SQL Server Options informatiques sans serveur SQL Server Jul 27, 2025 am 03:07 AM

SQLServer lui-même ne prend pas en charge l'architecture sans serveur, mais la plate-forme cloud fournit une solution similaire. 1. Le pool de serveur Azure peut interroger directement les fichiers de données et les charges en fonction de la consommation de ressources; 2. AzureFunctions combinées avec COSMOSDB ou Blobstorage peut réaliser un traitement SQL léger; 3. Awsathena prend en charge les requêtes SQL standard pour les données S3 et les charges basées sur des données numérisées; 4. GooglebigQuery s'approche du concept sans serveur via FederatedQuery; 5. Si vous devez utiliser la fonction SQLServer, vous pouvez choisir sans serveur d'Azuresqldatabase sans service

Comment formater les dates dans SQL? Comment formater les dates dans SQL? Jul 24, 2025 am 01:27 AM

Dates de format Dans SQL, vous devez sélectionner la fonction correspondante en fonction du type de base de données. Mysql utilise date_format () avec% y,% m et d'autres formats, tels que selectDate_format (maintenant (), '% y-% m-% d'); SQLServer utilise convert () ou format (), le premier est SelectConvert (varchar, getDate (), 112), et le second est selectFormat (getDate (), 'yyyy-mm-dd'); PostgreSQL utilise TO_CHAR (), comme selectTo_Char (maintenant (), 'y

Comment calculez-vous la différence entre deux dates dans SQL? Comment calculez-vous la différence entre deux dates dans SQL? Aug 02, 2025 pm 01:29 PM

Pour calculer la différence entre deux dates, vous devez sélectionner la fonction correspondante en fonction du type de base de données: 1. Utilisez DADAFIF () pour calculer la différence de jour dans MySQL, ou spécifiez les unités telles que l'heure et la minute dans TimeStampDiff (); 2. Utilisez DADAIFF (DATE_PART, START_DATE, END_DATE) dans SQLServer et spécifiez les unités; 3. Utilisez la soustraction directe dans PostgreSQL pour obtenir la différence de jour, ou utilisez l'extrait (dayFromage (...)) pour obtenir des intervalles plus précis; 4. Utilisez la fonction Julianday () pour soustraire la différence de jour dans SQLite; Faites toujours attention à la commande de date

Master SQL pour l'analyse des affaires de l'intelligence d'affaires Master SQL pour l'analyse des affaires de l'intelligence d'affaires Jul 26, 2025 am 07:53 AM

Tomastersqlforbianalytics, startByUnderstandingBidatastructures likefactanddimensionTables, thesUsTrategicaggregations withGroupBbyandhaving, levariagedatefunctionsformes-basysysis, andwriteClean, se maintientablequeries.

Implémentation de répliques de lecture SQL pour l'évolutivité Implémentation de répliques de lecture SQL pour l'évolutivité Jul 25, 2025 am 02:40 AM

Les répliques de lecture sont nécessaires car la plupart des applications lisent la suite et écrivent moins, et la bibliothèque maître est facile à devenir un goulot d'étranglement; Les paramètres communs incluent la réplication maître-esclave de MySQL, la réplication du flux de PostgreSQL, le groupe AllyOn de SqlServer et les instances ReadReplica de RDS; Les demandes de lecture peuvent être jugées via la couche d'application, et les catégories de middleware ou ORM sont acheminées vers la réplique; Les problèmes facilement négligés comprennent les retards de réplication, la configuration de pool de connexions incorrecte, les contrôles de santé manquants et la gestion inadéquate des autorisations.

Quels sont les types de données BLOB et CLOB dans SQL? Quels sont les types de données BLOB et CLOB dans SQL? Aug 07, 2025 pm 04:22 PM

BlobstoresbinaryDatalikeImages, Audio, Orpdfsasrawbytes withoutCharacterencoding, tandis que les opérations de tassement de tassement

Cube SQL et rouleau pour l'agrégation multidimensionnelle Cube SQL et rouleau pour l'agrégation multidimensionnelle Jul 29, 2025 am 12:28 AM

Le cube est utilisé pour générer une agrégation de toutes les combinaisons de dimensions, adaptées à une analyse croisée; Rollup est progressivement résumé aux niveaux hiérarchiques, adapté aux données avec des relations hiérarchiques. Cube génère un total de 8 combinaisons selon la région, le produit et le trimestre, tandis que Rollup génère un résumé de l'année, du mois, du jour et d'autres niveaux selon l'année, le mois et le jour. Cube convient à la visualisation de tous les résultats transversaux, Rollup convient à l'affichage des hiérarchies. Notez que Cube peut faire exploser l'ensemble de résultats et Rollup dépend de l'ordre sur le terrain. La ligne récapitulative peut être identifiée via la fonction de groupement (), et la ligne totale est nommée avec coalesce pour améliorer la lisibilité.

Quelles sont les fonctions agrégées dans SQL? Quelles sont les fonctions agrégées dans SQL? Jul 26, 2025 am 05:43 AM

La fonction d'agrégation de SQL est utilisée pour calculer une valeur de résumé unique à partir de plusieurs lignes de données. Les fonctions communes incluent SUM () Summing, AVG () Valeur moyenne, Count () Count, Max () Valeur maximale et valeur minimale min (). Ces fonctions sont souvent utilisées en conjonction avec Groupby pour compter les données groupées. Par exemple, l'utilisation de SUM (Units_Sold) peut obtenir le volume total des ventes, l'ajout de groupbyproduct_id peut compter par produit; Count () peut compter tous les enregistrements, et Count (Sale_Date) ignorera les valeurs vides. Remarque lorsque vous utilisez: les valeurs nuls sont généralement ignorées, sauf count (); L'utilisation mixte de plusieurs fonctions peut produire des résultats inattendus; Havi devrait être utilisé pour filtrer les données groupées

See all articles