SQL LEFT JOIN
et RIGHT JOIN
: Quand sont-ils équivalents ?
LEFT JOIN
et RIGHT JOIN
dans SQL fusionnent les lignes de deux tables en fonction des valeurs correspondantes. Bien que fonctionnellement similaire, une distinction clé existe.
Illustrons :
<code class="language-sql">CREATE TABLE Table1 (id INT, Name VARCHAR(10)); CREATE TABLE Table2 (id INT, Name VARCHAR(10)); INSERT INTO Table1 (id, Name) VALUES (1, 'A'), (2, 'B'); INSERT INTO Table2 (id, Name) VALUES (1, 'A'), (2, 'B'), (3, 'C');</code>
Ces requêtes :
<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>
donne des résultats identiques. Les deux font correspondre les lignes de Table1
avec les lignes correspondantes de Table2
en utilisant le champ id
. LEFT JOIN
inclut toutes les lignes de Table1
, tandis que RIGHT JOIN
fait la même chose pour Table2
.
Cependant, considérez ceci :
<code class="language-sql">SELECT * FROM Table2 LEFT JOIN Table1 ON Table1.id = Table2.id;</code>
ou son équivalent :
<code class="language-sql">SELECT * FROM Table1 RIGHT JOIN Table2 ON Table1.id = Table2.id;</code>
Le résultat diffère. Cela renvoie toutes les lignes de Table2
ainsi que toutes les lignes correspondantes de Table1
. Il s'agit d'une « jointure externe » dans laquelle les lignes d'une table sont incluses même sans correspondance dans l'autre. La clé est que la désignation gauche ou droite dicte quelles lignes de la table sont garanties d'être entièrement incluses dans l'ensemble de résultats, quelles que soient les lignes correspondantes dans l'autre table. Par conséquent, un simple échange de tables dans la requête ne produit pas toujours le même résultat. L'interchangeabilité dépend entièrement des données et du résultat souhaité.
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!