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