Maison >base de données >tutoriel mysql >Un INNER JOIN remplace-t-il les résultats d'un OUTER JOIN antérieur ?

Un INNER JOIN remplace-t-il les résultats d'un OUTER JOIN antérieur ?

Patricia Arquette
Patricia Arquetteoriginal
2025-01-09 10:28:41601parcourir

Does an INNER JOIN Override a Prior OUTER JOIN's Results?

Utilisation combinée de INNER JOIN et OUTER JOIN

Lors de l'exécution de requêtes de jointure multi-tables, l'ordre de INNER JOIN et OUTER JOIN est crucial. Beaucoup de gens croient à tort que l'utilisation d'un INNER JOIN après un OUTER JOIN annulera l'effet de l'OUTER JOIN, mais ce n'est pas tout à fait vrai.

Le rôle de INNER JOIN

INNER JOIN supprime les lignes de l'ensemble de résultats qui n'ont pas de lignes correspondantes dans la table jointe. S'il n'y a pas de valeurs NULL dans les colonnes correspondantes (par exemple, paires de clé primaire et de clé étrangère), ces lignes sans correspondance sont de toute façon éliminées.

Problèmes potentiels

L'effet d'un OUTER JOIN sera compensé par un INNER JOIN ultérieur uniquement si la clause ON de l'INNER JOIN spécifie les lignes requises de l'OUTER JOIN qui peuvent être exclues. Par exemple, dans la requête suivante :

<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>

La deuxième clause ON nécessite que address.city_id ne soit pas NULL, ce qui peut annuler l'effet de LEFT JOIN. Pour résoudre ce problème, le deuxième JOIN doit être remplacé par un LEFT OUTER JOIN.

Bonnes pratiques

Bien que cela ne change pas les résultats, il est généralement recommandé de mettre INNER JOIN avant OUTER JOIN dans la requête. Cela contribue à améliorer la lisibilité et garantit que les restrictions nécessaires sont appliquées avant que les restrictions facultatives ne soient appliquées. Évitez également d’utiliser RIGHT OUTER JOIN lorsque cela est possible et utilisez plutôt LEFT OUTER JOIN, ce qui améliore la clarté et la facilité de mise en œuvre.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn