LEFT JOIN と RIGHT JOIN の微妙な違いを理解する
同じ結合条件を使用する場合、LEFT JOIN
と RIGHT JOIN
は交換可能に見えるかもしれませんが、それらの動作はクエリ内のテーブルの順序に応じて大きく異なります。 例を使ってこれを詳しく見てみましょう。
次の 2 つのテーブルについて考えます。
<code class="language-sql">CREATE TABLE Table1 (id INT, Name VARCHAR(10)); CREATE TABLE Table2 (id INT, Name VARCHAR(10));</code>
次のデータが入力されます:
Table1 | Table2 | |
---|---|---|
Id | Name | Id |
1 | A | 1 |
2 | B | 2 |
3 |
Table1.id = Table2.id
を使用して結合する場合、LEFT JOIN
と RIGHT JOIN
の結果は実際に同一です。
<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>
これは、結合条件が対称であるためです。 ただし、テーブルの順序が逆になると、互換性があるという幻想は崩れます。
テーブルの順序の影響
次のクエリを観察してください:
<code class="language-sql">SELECT * FROM Table2 LEFT JOIN Table1 ON Table1.id = Table2.id;</code>
これは、Table2
内の一致に関係なく、Table1
からのすべての行を返します。 結果セットは次のようになります:
Table2 | Table1 | |
---|---|---|
Id | Name | Id |
1 | A | 1 |
2 | B | 2 |
3 | C |
逆に、テーブルの順序を逆にした RIGHT JOIN
:
<code class="language-sql">SELECT * FROM Table2 RIGHT JOIN Table1 ON Table1.id = Table2.id;</code>
これには、Table2
に一致する行がある Table1
の行のみが含まれます。 id = 3
内の Table2
を含む行は除外されます。
したがって、結合条件は対称的に見えるかもしれませんが、LEFT JOIN
と RIGHT JOIN
の選択とテーブルの順序によって、最終的な結果セットにどのテーブルの行が含まれることが保証されるかが基本的に決まります。他のテーブルに一致するものはありません。 期待どおりの結果が得られるように、テーブルの順序を常に慎重に検討してください。
以上がLEFT JOIN と RIGHT JOIN が本当に互換性があるのはどのような場合ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。