LEFT/RIGHT JOIN et jointures OUTER
Utilisez LEFT JOIN pour conserver les lignes sans correspondance, comprenez les jointures RIGHT et FULL OUTER et détectez les données manquantes avec WHERE x IS NULL.
LEFT/RIGHT JOIN et jointures OUTER est une leçon SQL Academy gratuite sur CoddyKit. Ceci est la leçon 3 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 Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours SQL Academy comprend 4 leçons au total.
LEFT JOIN : conserver toutes les lignes de gauche
LEFT JOIN renvoie chaque ligne de la table de gauche, avec les colonnes correspondantes de droite ou NULL lorsqu’il n’y a aucune correspondance.
SELECT u.id, u.email, o.id AS order_id
FROM users u
LEFT JOIN orders o ON o.user_id = u.id;
-- Users without orders still appear, with order_id = NULL.RIGHT JOIN
Le miroir de LEFT JOIN — conservez toutes les lignes de RIGHT. La plupart des personnes réécrivent simplement les jointures RIGHT sous forme de LEFT pour améliorer la lisibilité :
SELECT u.id, u.email, o.id
FROM orders o
RIGHT JOIN users u ON u.id = o.user_id;
-- Equivalent to LEFT JOIN with sides swapped:
SELECT u.id, u.email, o.id
FROM users u
LEFT JOIN orders o ON o.user_id = u.id;FULL OUTER JOIN
Conserve les lignes des deux côtés. Les colonnes sans correspondance valent NULL :
SELECT u.email, o.id AS order_id
FROM users u
FULL OUTER JOIN orders o ON o.user_id = u.id;Trouver les correspondances manquantes
Un LEFT JOIN avec WHERE right.id IS NULL trouve les lignes de la table de gauche qui n’ont aucune correspondance à droite — l’« anti-jointure » classique :
SELECT u.id, u.email
FROM users u
LEFT JOIN orders o ON o.user_id = u.id
WHERE o.id IS NULL; -- users who have never placed an orderLEFT JOIN avec agrégat
Utile pour les rapports indiquant « 0 en l’absence de données » :
SELECT u.id, u.email, COUNT(o.id) AS order_count
FROM users u
LEFT JOIN orders o ON o.user_id = u.id
GROUP BY u.id, u.email
ORDER BY order_count DESC;La position du filtre est importante
Les filtres sur la table de droite placés dans WHERE transforment un LEFT JOIN en INNER JOIN. Placez-les dans ON pour préserver le comportement de LEFT :
-- Drops users without paid orders entirely:
SELECT u.id, COUNT(o.id)
FROM users u
LEFT JOIN orders o ON o.user_id = u.id
WHERE o.status = 'paid'
GROUP BY u.id;
-- Keeps users with no paid orders:
SELECT u.id, COUNT(o.id)
FROM users u
LEFT JOIN orders o
ON o.user_id = u.id AND o.status = 'paid'
GROUP BY u.id;Plusieurs LEFT JOIN
Enchaînez-les. Chaque LEFT conserve les lignes situées à gauche de l’opérateur correspondant :
SELECT u.email, o.id, p.name
FROM users u
LEFT JOIN orders o ON o.user_id = u.id
LEFT JOIN products p ON p.id = o.product_id;Performances de LEFT JOIN
LEFT JOIN entraîne un léger surcoût par rapport à INNER (le planificateur doit conserver les lignes sans correspondance). Il est souvent négligeable — mais si vous n’avez pas besoin des lignes sans correspondance, INNER JOIN est légèrement moins coûteux.
Résultat NULL d’un JOIN externe
Le résultat NULL d’un LEFT JOIN peut surprendre le code en aval. Utilisez COALESCE pour fournir des valeurs par défaut :
SELECT u.email, COALESCE(SUM(o.total), 0) AS revenue
FROM users u
LEFT JOIN orders o ON o.user_id = u.id
GROUP BY u.email;CROSS JOIN — quand vous voulez toutes les paires
Associe chaque ligne de A à chaque ligne de B. Utilisez-le avec modération :
SELECT d.date, u.id
FROM users u
CROSS JOIN generate_series('2024-01-01', '2024-01-07', INTERVAL '1 day') AS d(date);Schémas d’anti-JOIN
Trois façons idiomatiques de trouver « la gauche sans correspondance » :
-- LEFT JOIN ... WHERE IS NULL
SELECT u.* FROM users u
LEFT JOIN orders o ON o.user_id = u.id
WHERE o.id IS NULL;
-- NOT EXISTS (often the planner's favourite)
SELECT u.* FROM users u
WHERE NOT EXISTS (SELECT 1 FROM orders o WHERE o.user_id = u.id);Récapitulatif
Les jointures OUTER conservent les lignes sans correspondance.
- LEFT = toutes les lignes de gauche, NULL à droite en l’absence de correspondance
- RIGHT = l’inverse ; utilisez LEFT pour améliorer la lisibilité
- FULL OUTER = les deux côtés
- Anti-jointure = LEFT JOIN ... WHERE right IS NULL
Vérification rapide
Quel type de JOIN renvoie les utilisateurs, même s’ils n’ont NO commandes ?
Questions Fréquemment Posées
La leçon « LEFT/RIGHT JOIN et jointures OUTER » est-elle gratuite ?
Oui — le texte complet de « LEFT/RIGHT JOIN et jointures OUTER » 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 Academy, passe à CoddyKit PRO. Le cours SQL Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « LEFT/RIGHT JOIN et jointures OUTER » ?
Utilisez LEFT JOIN pour conserver les lignes sans correspondance, comprenez les jointures RIGHT et FULL OUTER et détectez les données manquantes avec WHERE x IS NULL. Tu pratiques SQL Academy 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 Academy ?
Aucune expérience préalable n'est requise. SQL Academy 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 3 sur 4.
Combien de temps prend la leçon « LEFT/RIGHT JOIN et jointures OUTER » ?
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 Academy ?
Oui. Chaque leçon SQL Academy 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
- Pourquoi les jointures (rappel du modèle relationnel)
- Fonctionnement de INNER JOIN
- LEFT/RIGHT JOIN et jointures OUTER
- Auto-jointures et alias