Analyse SQL

CTE ou sous-requête : comment choisir ?

Les deux structurent une requête ; la meilleure forme est celle qui rend les étapes métier testables.

Équipe SQL.tn9 min
Une transformation SQL compare des étapes successives à une structure imbriquée

Avez-vous besoin de nommer une étape ?

Une sous-requête courte est adaptée à une valeur de comparaison ou à un résultat utilisé une seule fois. Une CTE rend une étape métier visible et facilite l’enchaînement de plusieurs transformations.

Ni l’une ni l’autre ne garantit à elle seule de meilleures performances. Le moteur peut les optimiser différemment ; la mesure sur les données réelles reste nécessaire.

Les noms, montants et données utilisés dans cet article sont fictifs et créés pour l’apprentissage.

La requête expliquée

Commencez par définir ce que doit représenter une ligne du résultat. Cette décision détermine les colonnes, les regroupements et les contrôles nécessaires.

L’exemple suivant isole le mécanisme principal. Exécutez-le, observez le résultat, puis modifiez une seule clause à la fois pour comprendre son effet.

Séparer les totaux et la marge
WITH totaux AS (
  SELECT SUM(chiffre_affaires) AS ca, SUM(couts) AS couts
  FROM ventes_mensuelles
)
SELECT ca, couts, ca - couts AS marge
FROM totaux;

Lire le résultat comme un analyste

La CTE totaux correspond à une étape nommable. La requête finale reste centrée sur l’indicateur livré.

Pendant la construction, exécutez le contenu de chaque CTE séparément pour contrôler son grain et ses totaux.

  • Nommer la responsabilité de l’étape.
  • Vérifier le grain intermédiaire.
  • Éviter les CTE décoratives.
  • Observer le plan sur les requêtes coûteuses.

Les erreurs qui faussent l’analyse

Une requête peut être valide sans répondre correctement à la question. Les erreurs les plus coûteuses sont souvent silencieuses : mauvais périmètre, ligne multipliée ou valeur absente interprétée comme zéro.

Avant de partager le résultat, confrontez-le à un petit échantillon calculé à la main et conservez la définition du périmètre avec la requête.

  • Découper chaque ligne dans une CTE.
  • Supposer qu’une CTE accélère toujours.
  • Réutiliser un alias au mauvais niveau.
  • Masquer une jointure complexe sans contrôler son résultat.

Passez à la pratique

Construisez l’exercice de marge globale avec une CTE, puis écrivez une version en sous-requête et comparez la lisibilité.

Le simulateur SQL de SQL.tn exécute uniquement des requêtes de lecture sur des données fictives dans votre navigateur. Vous pouvez essayer plusieurs écritures et comparer leur résultat sans installer de logiciel.

Mettez ce guide en pratique.

Ouvrez l’exercice associé, exécutez votre requête et comparez le résultat attendu.

Faire l’exercice