ホームページ >データベース >mysql チュートリアル >SQL で LEFT JOIN クエリと RIGHT JOIN クエリを交換できるのはどのような場合ですか?
SQL の 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)); INSERT INTO Table1 (id, Name) VALUES (1, 'A'), (2, 'B'); INSERT INTO Table2 (id, Name) VALUES (1, 'A'), (2, 'B'), (3, 'C');</code>
これらのクエリ:
<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>
同じ結果が得られます。 どちらも、Table1
フィールドを使用して、Table2
の行と id
内の対応する行を照合します。 LEFT JOIN
には Table1
のすべての行が含まれますが、RIGHT JOIN
は Table2
に対して同じことを行います。
ただし、次のことを考慮してください。
<code class="language-sql">SELECT * FROM Table2 LEFT JOIN Table1 ON Table1.id = Table2.id;</code>
または同等のもの:
<code class="language-sql">SELECT * FROM Table1 RIGHT JOIN Table2 ON Table1.id = Table2.id;</code>
出力が異なります。これにより、Table2
のすべての行と、Table1
の一致する行が返されます。これは「外部結合」であり、一方のテーブルの行が他方のテーブルに一致しなくても含まれます。 重要なのは、left または right の指定により、他のテーブルの一致する行に関係なく、どのテーブルの行が結果セットに完全に含まれることが保証されるかが決まるということです。 したがって、クエリ内のテーブルを単純に交換しても、常に同じ結果が得られるとは限りません。 互換性はデータと望ましい結果に完全に依存します。
以上がSQL で LEFT JOIN クエリと RIGHT JOIN クエリを交換できるのはどのような場合ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。