Maison >base de données >tutoriel mysql >Un INNER JOIN peut-il remplacer les résultats d'un OUTER JOIN ?
INNER JOIN et OUTER JOIN : comprendre leur interaction
Cet article explore comment la combinaison des INNER JOIN et des OUTER JOIN (LEFT, RIGHT ou FULL) dans les requêtes SQL peut affecter le jeu de résultats final. Plus précisément, nous examinerons si un INNER JOIN ultérieur peut remplacer le comportement d'un OUTER JOIN précédent.
L'impact de la commande d'adhésion
La clé réside dans la clause ON
de chaque jointure. Un INNER JOIN ultérieur n'annulera l'effet d'un OUTER JOIN antérieur que si sa clause ON
nécessite des valeurs non nulles des colonnes qui pourraient être NULL en raison de l'OUTER JOIN. Changer simplement l'ordre de jointure ne résoudra pas ce problème ; au lieu de cela, le INNER JOIN doit être remplacé par un OUTER JOIN plus approprié.
Exemples illustratifs
Considérez ces scénarios :
Cette requête fonctionne comme prévu :
<code class="language-sql">SELECT * FROM person LEFT JOIN address ON person.address_id = address.id INNER JOIN email ON person.email_id = email.id</code>
Le résultat est le même si le LEFT JOIN
est placé après le INNER JOIN
.
Cependant, cette requête se comporte différemment :
<code class="language-sql">SELECT * FROM person LEFT JOIN address ON person.address_id = address.id INNER JOIN city ON address.city_id = city.id</code>
Ici, le INNER JOIN
sur city
échoue pour tout person
sans entrée address
correspondante, car address.city_id
pourrait être NULL. La solution est de remplacer le INNER JOIN
par un LEFT JOIN
.
Pratiques recommandées pour la lisibilité et l'efficacité
Pour améliorer la lisibilité et la maintenabilité du code, il est recommandé d'ordonner vos jointures de manière logique. Placez les INNER JOIN en premier, car ils représentent les relations principales, suivis des OUTER JOIN. Bien que les RIGHT OUTER JOIN soient moins courantes, il est généralement conseillé de les éviter au profit des LEFT OUTER JOIN pour des raisons de cohérence. Cette approche reflète clairement les relations de données essentielles et les extensions facultatives introduites par les OUTER JOIN.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!