Les jointures SQL expliquées avec des exemples en direct

Les jointures SQL expliquées

Les jointures SQL expliquées : inner, left, right, full, cross, self | We.Inc

Exécutez chaque jointure SQL sur deux petites tables d'exemple directement dans votre navigateur et voyez quelles lignes restent, avec la syntaxe PostgreSQL pour les jointures INNER, LEFT, RIGHT, FULL, CROSS et self.

Une jointure combine les lignes de deux tables selon une condition, généralement des clés correspondantes. INNER JOIN ne garde que les lignes qui correspondent des deux côtés. LEFT JOIN garde toutes les lignes de la table de gauche et remplit les colonnes de droite manquantes avec NULL, RIGHT JOIN fait l'inverse, FULL JOIN garde les deux, et CROSS JOIN associe chaque ligne à chaque ligne.

Les lignes conservées par chaque jointure

Les diagrammes de Venn sont la façon habituelle d'enseigner les jointures, mais ils cachent ce qui pose vraiment problème : les lignes dupliquées et les NULL. Voici deux toutes petites tables, clients et commandes, avec un client qui n'a jamais commandé et une commande dont le client a été supprimé. Choisissez une jointure et le résultat est calculé dans votre navigateur, pour voir exactement quelles lignes apparaissent et pourquoi.

Questions fréquentes

Quelle est la différence entre INNER JOIN et LEFT JOIN ?

INNER JOIN supprime les lignes sans correspondance. LEFT JOIN garde toutes les lignes de la première table et met NULL dans les colonnes de la seconde quand rien ne correspond. Dans la démo, Cleo apparaît dans le LEFT JOIN avec une commande vide et manque dans l'INNER JOIN.

JOIN est-il identique à INNER JOIN ?

Oui. Dans PostgreSQL, le mot INNER est facultatif et un JOIN seul est une jointure interne. Le mot OUTER est aussi facultatif, donc LEFT JOIN et LEFT OUTER JOIN signifient la même chose.

Pourquoi ma jointure renvoie-t-elle plus de lignes que la table n'en contient ?

Chaque ligne de gauche apparaît une fois par ligne de droite correspondante. Un client avec trois commandes apparaît trois fois. C'est le comportement normal : agrégez avec GROUP BY ou joignez une sous-requête déjà groupée si vous voulez une ligne par client.

Qu'est-ce qu'une self join ?

Une table jointe à elle-même sous deux alias, utilisée quand des lignes pointent vers d'autres lignes de la même table, comme des employés et leurs responsables ou des clients et la personne qui les a parrainés.

MySQL prend-il en charge FULL OUTER JOIN ?

PostgreSQL oui, et c'est la syntaxe montrée ici. MySQL n'a pas de mot-clé FULL JOIN : le contournement habituel combine un LEFT JOIN et un RIGHT JOIN avec UNION.

ON, USING et NATURAL

Les filtres des jointures externes s'appliquent dans un autre ordre

Essayez dans PostgreSQL

Collez ceci dans psql ou dans n'importe quel éditeur SQL Postgres pour recréer les tables d'exemple, puis lancez les requêtes de la démo.

Tables d'exemple

La commande 104 pointe volontairement vers le client 9, qui n'existe pas, pour que les jointures externes aient quelque chose à montrer.

Clients qui n'ont jamais commandé

Le LEFT JOIN garde Cleo avec des colonnes de commande à NULL, et le filtre IS NULL ne garde que ces lignes.

Bac à sable des jointures

Tables d'exemple utilisées dans la démo

Type de jointure

Résultat : {n} lignes

Les cellules mises en évidence ont été complétées par NULL par la jointure externe.

SELF

Commencer gratuitement · Sans carte bancaire

Voir aussi: Guides

Produit

Pour qui

Fonctionnalités

Ressources

Entreprise

Plan du site