条件付きの LEFT JOIN: On と WHERE
SQL Server では、リンク中に 1 つのテーブルからデータを取得するために LEFT JOIN がよく使用されます。共通の列を介して別のテーブルにコピーします。ただし、ON 句と WHERE 句で条件を使用する場合は微妙な違いが生じ、異なる結果が生じます。
JOIN ON 句と WHERE 句
の ON 句LEFT JOIN は、プライマリ テーブル (結合テーブル) のどの行がセカンダリ テーブル (結合テーブル) の行と一致するかを決定する条件を指定します。 テーブル)。対照的に、WHERE 句は、結合の実行後に結果セットをフィルタリングします。
例
次の 2 つを考えてみましょう。クエリ:
-- LEFT JOIN with Condition in ON Clause SELECT t1.f2 FROM t1 LEFT JOIN t2 ON t1.f1 = t2.f1 AND cond2 AND t2.f3 > something; -- LEFT JOIN with Condition in WHERE Clause SELECT t1.f2 FROM t1 LEFT JOIN t2 ON t1.f1 = t2.f1 AND cond2 WHERE t2.f3 > something;
結果
驚くべきことに、これら 2 つのクエリは同じ結果を生成しません。その理由は、JOIN 句と WHERE 句の違いにあります。
最初のクエリでは、 ON 句の条件によって、t2 のどの行が t1 と結合されるかが制限されます。したがって、条件 (t2.f3
2 番目のクエリでは、 WHERE 句の条件が結合の後に適用されます。が実行されました。その結果、条件を満たすかどうかに関係なく、t1 のすべての行が t2 のすべての行と結合されます。その後、WHERE 句によって条件を満たさない行が除外され、最初のクエリとは異なる結果セットが提供されます。
結論
次のクエリの違いを理解するON 句と WHERE 句は、LEFT JOIN を使用する場合に重要です。 ON 句は結合に一致する行を決定し、WHERE 句は結合の完了後に結果セットをフィルタリングします。これを理解することで、LEFT JOIN を含む SQL クエリから確実に望ましい結果が得られます。
以上がSQL Server の LEFT JOIN: ON と WHERE 句 – 違いは何ですか? それぞれをいつ使用する必要がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。