INNER JOIN ne renvoie que les enregistrements pour lesquels il y a une correspondance dans les deux tables jointes selon la condition spécifiée. Lors de l'utilisation de OUTER JOIN (LEFT, RIGHT, FULL), le résultat contient toutes les lignes d'une ou des deux tables, même s'il n'y a pas de correspondance dans l'autre table.
Quand utiliser quel JOIN :
Exemples :
-- INNER JOIN SELECT u.id, u.name, o.amount FROM users u INNER JOIN orders o ON u.id = o.user_id; -- LEFT OUTER JOIN SELECT u.id, u.name, o.amount FROM users u LEFT JOIN orders o ON u.id = o.user_id; -- FULL OUTER JOIN SELECT u.id, o.order_id FROM users u FULL OUTER JOIN orders o ON u.id = o.user_id;
Quel sera le résultat d'un LEFT JOIN si la table de droite est vide ?
On répond souvent : "LEFT JOIN renverra un résultat vide, car il n'y a pas de correspondances". Correct : LEFT JOIN renverra de toute façon toutes les lignes de la table de gauche, et les colonnes de la droite seront NULL.
Exemple :
-- La table users a des enregistrements, orders est vide SELECT u.id, u.name, o.amount FROM users u LEFT JOIN orders o ON u.id=o.user_id; -- Résultat : tous les utilisateurs, o.amount = NULL
Histoire
Projet d'analyse des ventes. Pour afficher la liste complète des clients et de leurs commandes, un INNER JOIN a été utilisé, omettant les clients qui n'avaient pas de commandes. Des "clients importants" ont été perdus dans le rapport en raison de leur absence dans la table de droite. Solution : utiliser LEFT JOIN.
Histoire
Plateforme de gestion des employés et des départements. L'utilisation de RIGHT JOIN au lieu de LEFT JOIN a conduit à une confusion lors de l'ajout de nouveaux départements : certains employés ont cessé d'apparaître dans le rapport. Raisons - ordre de jointure inversé.
Histoire
Migration de schéma de données. Après des modifications, l'un des JOIN est devenu un CROSS JOIN à cause d'une faute de frappe dans la condition de jointure. Résultat - forte augmentation du volume des données extraites et "gonflement" des données. Conclusion : toujours spécifier ON lors des jointures et vérifier soigneusement le type de JOIN.