Leçon 7 / 9 — Chapitre 2: Jointures avancées et combinées
Ordre d'exécution : jointure, puis WHERE, puis GROUP BY
Quand une requête combine JOIN, WHERE et GROUP BY, l'ordre logique d'exécution est fixe : la jointure d'abord, puis WHERE filtre les lignes déjà jointes, et enfin GROUP BY regroupe ce qui reste. Un WHERE placé avant GROUP BY peut donc éliminer une ligne avant qu'elle ne soit comptée dans un groupe.
SELECT p.categorie, SUM(c.quantite) AS total_quantite
FROM produits p
JOIN commandes c ON p.id = c.produit_id
WHERE c.quantite >= 2
GROUP BY p.categorie;
WHERE c.quantite >= 2 s'applique juste après la jointure, avant tout regroupement : il exclut la commande 4 (quantité 1, catégorie boisson), et garde les commandes 1 (3), 2 (2), 3 (5) et 5 (4).
GROUP BY p.categorie ne voit donc plus jamais la commande 4 : papeterie = 3 + 2 = 5, hygiène = 5 + 4 = 9. La catégorie boisson, elle, disparaît entièrement du résultat — pas seulement réduite à zéro, elle n'a simplement plus aucune ligne à regrouper.
À retenir :
- L'ordre logique d'exécution reste : jointure, puis WHERE, puis GROUP BY, puis HAVING.
- Une ligne éliminée par WHERE avant le regroupement ne compte pour rien dans les totaux du groupe — c'est différent d'une ligne gardée mais dont la valeur vaudrait zéro.
- Un groupe entier peut disparaître du résultat si WHERE élimine toutes les lignes qui l'auraient composé.
À vous de jouer : avec WHERE c.quantite >= 4 à la place de >= 2, déterminez quelles catégories subsisteraient dans le résultat.
Continuez ce module
Débloquez les leçons restantes ainsi que la certification finale.
2 500 XOF / 3,81 € / 4,15 $
Débloquez les 80 leçons restantes de ce module
Votre paiement est vérifié avant l'activation de l'accès