Les types de jointures SQL comparés : inner, outer, cross, self, lateral, natural — ce que chacun renvoie et un exemple en une ligne.
Les jointures combinent les lignes de deux tables sur une clé commune. Le type de jointure détermine quelles lignes survivent quand les clés correspondent, sont absentes ou se répètent.
Tableau de référence · 8 entrées
Jointures SQLExplained
8 of 8 rows
Interne et externe
Seules les lignes où la condition ON correspond dans les deux tables. Les lignes sans correspondance de chaque côté sont éliminées.
SELECT u.name, o.total FROM users u INNER JOIN orders o ON u.id = o.user_id;
Toutes les lignes de la table de gauche. Les colonnes de droite sont NULL en l'absence de correspondance.
SELECT u.name, o.total FROM users u LEFT OUTER JOIN orders o ON u.id = o.user_id;
Toutes les lignes de la table de droite. Les colonnes de gauche sont NULL en l'absence de correspondance.
SELECT u.name, o.total FROM users u RIGHT OUTER JOIN orders o ON u.id = o.user_id;
Toutes les lignes des deux tables. Les côtés sans correspondance sont remplis avec NULL.
SELECT u.name, o.total FROM users u FULL OUTER JOIN orders o ON u.id = o.user_id;
Croisée et auto-jointure
Produit cartésien. Chaque ligne de gauche est associée à chaque ligne de droite. Pas de clause ON.
SELECT u.name, o.total FROM users u CROSS JOIN orders o;
Une table jointe à elle-même via des alias. Compare les lignes au sein d'une même table.
SELECT a.id AS o1, b.id AS o2 FROM orders a JOIN orders b ON a.user_id = b.user_id WHERE a.id < b.id;
Avancé
Une sous-requête dans FROM évaluée pour chaque ligne externe. La sous-requête peut référencer les colonnes de la table externe.
SELECT u.name, o.total FROM users u, LATERAL (SELECT total FROM orders WHERE user_id = u.id LIMIT 1) o;
Joint sur les colonnes qui portent le même nom. Pas de clause ON. Méfiez-vous des collisions de clés involontaires.
SELECT u.name, o.total FROM users u NATURAL JOIN orders o;