XamSQL — la salle de sport SQL des francophones

Avancé · 25 min

CTE (WITH) : declarer des sous-requêtes nommées

Quand une sous-requête est complexe ou reuse plusieurs fois, la CTE (Common Table Expression) permet de la nommer avec WITH et de l'utiliser comme une table temporaire dans la meme requete.

Contexte

Quand une sous-requête est complexe ou reuse plusieurs fois, la CTE (Common Table Expression) permet de la nommer avec WITH et de l'utiliser comme une table temporaire dans la meme requete. C'est plus lisible et parfois plus performant.

Explication

Une CTE se declare avec WITH avant la requete principale.

Syntaxe : WITH cte AS (SELECT ... FROM ...) SELECT ... FROM cte;

Points cles :

Exemple guidé

Objectif : calculer les moyennes, puis filtrer les etudiants >= 12.

1. Definition de la CTE 'moyennes' qui calcule AVG(note) par etudiant 2. La requete principale selectionne dans la CTE et filtre

WITH moyennes AS (
  SELECT e.id, e.prenom, e.nom, ROUND(AVG(n.note), 2) AS moyenne
  FROM etudiants e
  INNER JOIN notes n ON n.etudiant_id = e.id
  GROUP BY e.id, e.prenom, e.nom
)
SELECT prenom, nom, moyenne
FROM moyennes
WHERE moyenne >= 12
ORDER BY moyenne DESC;
prenomnommoyenne
PapeDiouf13.17
FatouSarr13.0
KhadijaBa12.83
AminataSow12.63
MoussaNdiaye12.5
OusmaneGueye12.5
NdeyeMbaye12.5
IbrahimaFall12.25
CheikhSy12.25
AwaDiop12.0

À retenir

WITH nome_la_cte AS (SELECT ...) = sous-requête nommee. La CTE est visible seulement dans la requete qui la suit. On peut en chainer plusieurs avec WITH cte1 AS (...), cte2 AS (...). Plus lisible qu'une sous-requête imbriquee complexe.

Exercices de cette leçon

Faire les exercices →