Leçon 8 / 9 — Chapitre 3: Sous-requêtes
Sous-requête ou JOIN : quand préférer laquelle ?
Deux critères simples orientent le choix entre une jointure et une sous-requête (IN, EXISTS).
Besoin des colonnes de l'autre table dans le résultat final ? Si oui, une jointure s'impose — une sous-requête ne peut renvoyer que des colonnes de la table filtrée. Si non (on veut juste savoir si une correspondance existe), une sous-requête suffit et évite d'exposer des colonnes inutiles.
Risque de doublons ? Une jointure produit une ligne par correspondance trouvée — un produit avec 2 commandes apparaît 2 fois.
SELECT p.nom FROM produits p JOIN commandes c ON p.id = c.produit_id;
Cahier, avec ses 2 commandes, apparaît 2 fois : 5 lignes au total (une par commande).
SELECT p.nom FROM produits p
WHERE EXISTS (SELECT 1 FROM commandes c WHERE c.produit_id = p.id);
Ici, chaque produit n'apparaît qu'une seule fois, quel que soit son nombre de commandes : 4 lignes (Cahier une seule fois, malgré ses 2 commandes).
À retenir :
- Une jointure est nécessaire dès que le résultat final doit afficher des colonnes de l'autre table.
- Une jointure peut dupliquer une ligne autant de fois qu'elle a de correspondances ; une sous-requête IN/EXISTS ne duplique jamais la ligne externe.
- Pour une simple question « est-ce qu'une correspondance existe ? » sans avoir besoin de ses colonnes, EXISTS est souvent plus direct et plus sûr qu'une jointure.
À vous de jouer : pour afficher la liste des produits avec, pour chacun, le nombre de ses commandes, faut-il une jointure ou une sous-requête ? Justifiez.
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