0Pricing
SQL Interview Prep · Leçon

Écrire votre premier CTE

Découvrir la syntaxe de base de WITH et savoir quand un CTE améliore la lisibilité par rapport à une sous-requête

Écrire votre premier CTE est une leçon SQL Interview Prep gratuite sur CoddyKit. Ceci est la leçon 1 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage SQL Interview Prep, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours SQL Interview Prep comprend 4 leçons au total.

Ce qu’est réellement un CTE

Une expression de table commune (CTE) est un jeu de résultats nommé et temporaire, défini avec le mot-clé WITH, qui n’existe que pendant la durée d’une seule requête. Les personnes qui vous interrogent apprécient les CTE, car ils montrent si vous savez structurer clairement la logique.

Considérez un CTE comme un nom donné à une sous-requête, afin de pouvoir la référencer comme une table dans l’instruction principale qui suit. Il ne crée pas d’objet permanent et disparaît dès que la requête se termine.

La syntaxe de base de WITH

Chaque CTE commence par WITH, un nom, le mot-clé AS et une requête entre parenthèses. Après la parenthèse fermante, écrivez une instruction normale qui utilise le CTE par son nom.

  • WITH cte_name AS ( ... ) définit le bloc.
  • La requête qui suit immédiatement la parenthèse est la requête principale.
  • Le nom du CTE se comporte comme une table depuis laquelle vous pouvez effectuer un SELECT.
WITH recent_orders AS (
    SELECT *
    FROM orders
    WHERE order_date >= '2024-01-01'
)
SELECT *
FROM recent_orders;

Pourquoi ne pas utiliser simplement une sous-requête ?

La même logique peut être écrite sous la forme d’une sous-requête intégrée dans la clause FROM. Alors, pourquoi les personnes qui vous interrogent posent-elles des questions sur les CTE ?

  • Lisibilité : une étape nommée se lit de haut en bas comme une recette.
  • Réutilisation : vous pouvez référencer plusieurs fois le même CTE au lieu de répéter une sous-requête.
  • Facilité de débogage : vous pouvez effectuer un SELECT uniquement sur le CTE pour l’inspecter.

La bonne réponse lors d’un entretien est généralement la suivante : utilisez un CTE lorsqu’il rend la requête plus facile à lire et à maintenir.

Exemple détaillé : filtrer puis agréger

Supposons que la question soit : trouver le chiffre d’affaires total des commandes passées cette année. Un CTE vous permet d’isoler l’étape de filtrage, puis d’effectuer l’agrégation sur le résultat nommé.

La requête principale traite recent_orders comme s’il s’agissait d’une véritable table, ce qui rend l’agrégation claire et évidente.

WITH recent_orders AS (
    SELECT amount
    FROM orders
    WHERE order_date >= '2024-01-01'
)
SELECT SUM(amount) AS total_revenue
FROM recent_orders;

Nommer les colonnes de sortie

Vous pouvez renommer les colonnes qu’un CTE expose en les listant juste après le nom du CTE. C’est pratique lorsque la requête interne produit des expressions ou lorsque vous voulez des noms plus clairs dans les étapes suivantes.

Si vous fournissez une liste de colonnes, elle doit correspondre au nombre de colonnes renvoyées par la requête interne, sinon la base de données génère une erreur.

WITH revenue (region, total) AS (
    SELECT region, SUM(amount)
    FROM orders
    GROUP BY region
)
SELECT region, total
FROM revenue
ORDER BY total DESC;

Un CTE est simplement une requête nommée

Un modèle mental qui impressionne les personnes qui vous interrogent : un CTE est logiquement équivalent au remplacement de sa définition directement dans la requête. La base de données peut choisir de l’intégrer ou de le matérialiser, mais le résultat est sémantiquement le même que si vous aviez copié-collé la sous-requête.

Cela signifie que tout ce qui est autorisé dans un SELECT classique l’est également dans un CTE : jointures, GROUP BY, WHERE, fonctions de fenêtre et bien plus encore.

Exemple approfondi : un CTE avec une jointure

Les CTE sont particulièrement utiles lorsque vous devez préparer l’un des côtés d’une jointure. Ici, nous calculons d’abord le nombre de commandes par client, puis nous le joignons à nouveau à la table des clients afin que chaque ligne client contienne son total.

Remarquez comme la requête principale se lit presque comme une phrase française : à partir des clients, joignez leurs décomptes de commandes.

WITH order_counts AS (
    SELECT customer_id, COUNT(*) AS num_orders
    FROM orders
    GROUP BY customer_id
)
SELECT c.name, oc.num_orders
FROM customers c
JOIN order_counts oc
    ON oc.customer_id = c.id;

Où se place un CTE dans la requête

Le bloc WITH doit se trouver avant l’instruction qui l’utilise. Le CTE n’est visible que par l’unique instruction qui suit immédiatement sa définition.

  • Vous ne pouvez pas référencer un CTE dans une requête distincte ultérieure.
  • Un CTE défini pour un SELECT ne peut pas être réutilisé par un autre SELECT exécuté ensuite.
  • La portée se termine au point-virgule qui clôt l’instruction.

Les CTE fonctionnent avec INSERT, UPDATE et DELETE

Une question de suivi fréquente : les CTE ne se limitent pas à SELECT. Dans la plupart des bases de données modernes, vous pouvez également ajouter une clause WITH aux instructions de modification des données.

Cela vous permet de calculer une seule fois un ensemble de lignes, puis d’agir dessus, ce qui est beaucoup plus clair qu’une sous-requête imbriquée dans la clause WHERE.

WITH stale AS (
    SELECT id
    FROM sessions
    WHERE last_seen < NOW() - INTERVAL '30 days'
)
DELETE FROM sessions
WHERE id IN (SELECT id FROM stale);

Erreurs courantes des débutants

Les personnes qui vous interrogent recherchent notamment ces erreurs :

  • oublier la requête principale après le CTE ; un bloc WITH seul ne constitue pas une instruction complète ;
  • placer un point-virgule entre le CTE et la requête principale ;
  • s’attendre à ce que le CTE reste disponible entre plusieurs instructions ;
  • ne pas faire correspondre la liste facultative des noms de colonnes aux colonnes de la requête interne.

Comment parler des CTE lors d’un entretien

Lorsqu’on vous demande de réorganiser une sous-requête désordonnée, expliquez votre raisonnement : Je vais extraire cette sous-requête de filtrage dans un CTE appelé commandes_récentes afin que l’agrégation soit claire.

Montrer que vous choisissez les CTE pour leur clarté et leur réutilisation, et non sans discernement, témoigne d’une maturité de niveau intermédiaire. Mentionnez qu’un CTE ne rend pas automatiquement une requête plus rapide ; sa principale valeur réside dans la lisibilité.

Vérification rapide

Testez votre compréhension de la syntaxe de base des CTE et de leur portée.

Récapitulatif : votre première CTE

Vous avez appris qu'une CTE utilise WITH name AS ( ... ) pour nommer un ensemble de résultats temporaire, puis le référence comme une table dans l'instruction suivante.

  • Les CTE améliorent la lisibilité, la réutilisation et la facilité de débogage par rapport aux sous-requêtes intégrées.
  • Leur portée est limitée à une seule instruction ; elles disparaissent ensuite.
  • Elles fonctionnent avec SELECT ainsi qu'avec INSERT/UPDATE/DELETE.
  • Elles n'améliorent pas intrinsèquement les performances.

Ensuite : enchaîner plusieurs CTE pour former une chaîne de traitement.

Questions Fréquemment Posées

La leçon « Écrire votre premier CTE » est-elle gratuite ?

Oui — le texte complet de « Écrire votre premier CTE » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours SQL Interview Prep, passe à CoddyKit PRO. Le cours SQL Interview Prep comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Écrire votre premier CTE » ?

Découvrir la syntaxe de base de WITH et savoir quand un CTE améliore la lisibilité par rapport à une sous-requête Tu pratiques SQL Interview Prep avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer SQL Interview Prep ?

Aucune expérience préalable n'est requise. SQL Interview Prep sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 1 sur 4.

Combien de temps prend la leçon « Écrire votre premier CTE » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon SQL Interview Prep ?

Oui. Chaque leçon SQL Interview Prep inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Écrire votre premier CTE
  2. Enchaîner plusieurs CTE
  3. CTE, sous-requête ou table temporaire
  4. Transformer des requêtes imbriquées en CTE
← Retour à SQL Interview Prep