Maison >base de données >tutoriel mysql >L'ordre des jointures est-il important dans les requêtes SQL, en particulier avec les jointures externes ?

L'ordre des jointures est-il important dans les requêtes SQL, en particulier avec les jointures externes ?

Susan Sarandon
Susan Sarandonoriginal
2025-01-17 17:37:08986parcourir

Does Join Order Matter in SQL Queries, Especially with Outer Joins?

Ordre SQL JOIN : est-ce important ?

En SQL, l'ordre des opérations JOIN affectera les résultats de la requête, en particulier lors de l'utilisation de jointures externes.

JOINTION INTÉRIEURE

Pour les jointures internes, une ligne du tableau A correspond exactement à une ligne du tableau B en fonction d'une certaine condition, et l'ordre des jointures n'affecte pas les résultats. En effet, les jointures internes sont à la fois commutatives et associatives. Par conséquent, les requêtes A et B présentées ci-dessous produiront les mêmes résultats :

<code class="language-sql">-- A (内连接)
SELECT *
FROM a INNER JOIN b ON <条件>
INNER JOIN c ON <条件>;

-- B (内连接)
SELECT *
FROM a INNER JOIN c ON <条件>
INNER JOIN b ON <条件>;</code>

JOINTURE EXTERNE

Pour les jointures externes (LEFT, RIGHT ou FULL), l'ordre des jointures est important. Contrairement aux jointures intérieures, les jointures externes ne sont ni interchangeables ni combinables.

Loi commutative

Commutativité signifie que a LEFT JOIN b est identique à b LEFT JOIN a. Toutefois, cela n’est pas vrai pour les jointures externes. Par exemple, la requête suivante :

<code class="language-sql">a LEFT JOIN b ON b.ab_id = a.ab_id</code>

Renvoie toutes les lignes du tableau a et les lignes correspondantes du tableau b, ou NULL s'il n'y a pas de correspondance dans le tableau b. Requête ci-contre :

<code class="language-sql">b LEFT JOIN a ON a.ab_id = b.ab_id</code>

Renvoie toutes les lignes du tableau b et les lignes correspondantes du tableau a, ou NULL s'il n'y a pas de correspondance dans le tableau a. Si le tableau a et le tableau b ont un nombre de lignes différent, les deux requêtes produiront des résultats différents.

Droit associatif

La loi associative de

signifie que (a LEFT JOIN b) LEFT JOIN c est équivalent à a LEFT JOIN (b LEFT JOIN c). Toutefois, cela n’est pas non plus vrai pour les jointures externes. Considérons la requête équivalente suivante :

<code class="language-sql">a LEFT JOIN b ON b.ab_id = a.ab_id
LEFT JOIN c ON c.ac_id = a.ac_id</code>

Si la condition c.ac_id = a.ac_id contient une comparaison NULL, la loi d'associativité peut ne pas être valable. En d'autres termes, si des valeurs NULL sont impliquées dans la condition de jointure, l'ordre des jointures affectera le résultat.

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