Maison >base de données >tutoriel mysql >Quand LEFT JOIN et RIGHT JOIN sont-ils vraiment interchangeables ?
Comprendre les différences subtiles entre LEFT JOIN et RIGHT JOIN
Bien que LEFT JOIN
et RIGHT JOIN
puissent sembler interchangeables lors de l'utilisation de la même condition de jointure, leur comportement diffère considérablement en fonction de l'ordre des tables dans la requête. Explorons cela avec un exemple.
Considérez deux tableaux :
<code class="language-sql">CREATE TABLE Table1 (id INT, Name VARCHAR(10)); CREATE TABLE Table2 (id INT, Name VARCHAR(10));</code>
Rempli avec les données suivantes :
Table1 | Table2 | |
---|---|---|
Id | Name | Id |
1 | A | 1 |
2 | B | 2 |
3 |
Lors de l'adhésion en utilisant Table1.id = Table2.id
, les résultats de LEFT JOIN
et RIGHT JOIN
sont en effet identiques :
<code class="language-sql">SELECT * FROM Table1 LEFT JOIN Table2 ON Table1.id = Table2.id; SELECT * FROM Table2 RIGHT JOIN Table1 ON Table1.id = Table2.id;</code>
C'est parce que la condition de jointure est symétrique. Cependant, l'illusion de l'interchangeabilité s'effondre lorsque l'ordre des tables est inversé.
L'impact de l'ordre des tables
Observez la requête suivante :
<code class="language-sql">SELECT * FROM Table2 LEFT JOIN Table1 ON Table1.id = Table2.id;</code>
Cela renvoie toutes les lignes de Table2
, quelle que soit une correspondance dans Table1
. L'ensemble de résultats serait :
Table2 | Table1 | |
---|---|---|
Id | Name | Id |
1 | A | 1 |
2 | B | 2 |
3 | C |
À l'inverse, un RIGHT JOIN
avec ordre des tables inversé :
<code class="language-sql">SELECT * FROM Table2 RIGHT JOIN Table1 ON Table1.id = Table2.id;</code>
Cela inclut uniquement les lignes de Table2
qui ont une ligne correspondante dans Table1
. La ligne avec id = 3
dans Table2
serait exclue.
Par conséquent, même si la condition de jointure peut sembler symétrique, le choix entre LEFT JOIN
et RIGHT JOIN
, ainsi que l'ordre des tables, déterminent fondamentalement quelles lignes de la table sont garanties d'être incluses dans l'ensemble de résultats final, même s'il y a aucune correspondance dans l'autre tableau. Considérez toujours attentivement l’ordre des tables pour vous assurer d’obtenir les résultats attendus.
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!