ProgrammationDéveloppeur Backend

Expliquez la différence entre INNER JOIN et OUTER JOIN (LEFT, RIGHT, FULL OUTER JOIN) en SQL, et comment choisir le type de jointure approprié dans différents scénarios de travail avec des données. Donnez un exemple d'utilisation correcte de chaque type de JOIN.

Réussissez les entretiens avec l'assistant IA Hintsage

Réponse

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.

  • LEFT OUTER JOIN : toutes les lignes de la table de gauche + les correspondances de la table de droite, si disponibles (sinon NULL).
  • RIGHT OUTER JOIN : toutes les lignes de la table de droite + les correspondances de la table de gauche, si disponibles (sinon NULL).
  • FULL OUTER JOIN : toutes les lignes des deux tables, où il n'y a pas de correspondance - valeurs NULL opposées.

Quand utiliser quel JOIN :

  • Utilisez INNER JOIN si vous avez seulement besoin des lignes correspondantes.
  • LEFT JOIN - si toutes les lignes de la première (gauche) table sont importantes, indépendamment de la disponibilité de la correspondance.
  • RIGHT JOIN - de manière similaire, mais pour la table de droite.
  • FULL OUTER JOIN - liste combinée complète (utile pour trouver des non-correspondances).

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;

Question piège

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

Exemples d'erreurs réelles dues à la méconnaissance des subtilités du sujet


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.