ホームページ > データベース > mysql チュートリアル > SQL の LEFT JOIN: `ON` 節と `WHERE` 節の主な違いは何ですか?

SQL の LEFT JOIN: `ON` 節と `WHERE` 節の主な違いは何ですか?

Barbara Streisand
リリース: 2025-01-03 00:18:40
オリジナル
631 人が閲覧しました

LEFT JOIN in SQL:  What's the Key Difference Between `ON` and `WHERE` Clauses?

条件付きの LEFT JOIN: ON と WHERE の違いはどこですか?

SQL Server では、LEFT JOIN は次の条件に基づいて 2 つのテーブルの行を結合します。指定された結合条件。 ON 句は LEFT JOIN ステートメント内の結合条件を定義しますが、WHERE 句は結合操作の後に行をフィルタリングします。この微妙な違いを正しく理解していないと、予期しない結果が生じる可能性があります。

次のクエリを考えてみましょう:

SELECT t1.f2
FROM   t1
LEFT JOIN t2
ON t1.f1 = t2.f1 AND cond2 AND t2.f3 > something
ログイン後にコピー

驚くべきことに、このクエリは次のクエリと同じ結果を生成しません:

SELECT t1.f2
FROM   t1
LEFT JOIN t2
ON t1.f1 = t2.f1 AND cond2
WHERE  t2.f3 > something
ログイン後にコピー

説明

ON 句どの行が結合に参加するかを決定する上で重要な役割を果たします。 ON で指定された条件は、行が一致して結合結果に含まれるためには true である必要があります。対照的に、WHERE 句はすでに結合されている行をフィルタリングします。

最初のクエリでは、条件 t2.f3 > が条件になります。何かが ON 句の一部です。したがって、t2.f3 が何かより大きい行のみが結合に含まれます。これは、t2.f3 が何かより大きくない一致する行は結果から除外されることを意味します。

2 番目のクエリでは、条件 t2.f3 > が結果から除外されます。何かが WHERE 句の一部です。この句は、結合の実行後に評価されます。したがって、ON 句の条件 (t1.f1 = t2.f1 および cond2) を満たすすべての行が結合結果の一部になります。次に、WHERE 句でこれらの行をフィルタリングし、t2.f3 が何かより大きい行のみを保持します。

この概念を説明するために、候補のテーブル (候補者)と投票表(投票)。投票を受け取った候補者を検索したい場合は、LEFT JOIN を使用できます:

SELECT  *
FROM    candidates c
LEFT JOIN    
        votes v
ON      c.name = v.voted_for
ログイン後にコピー

このクエリは、投票を受け取っていない候補者も含め、すべての候補者を返します。条件を WHERE 句に移動すると、次のようになります。

SELECT  *
FROM    candidates c
LEFT JOIN    
        votes v
ON      c.name = v.voted_for
WHERE   v.voted_for IS NOT NULL
ログイン後にコピー

結果には、少なくとも 1 票を獲得した候補者のみが含まれるようになります。

結論

LEFT JOIN の ON 句と WHERE 句の違いを理解することは、データを効果的に操作するために重要です。条件を適切な句に慎重に配置することで、クエリが確実に望ましい結果を返すようにすることができます。

以上がSQL の LEFT JOIN: `ON` 節と `WHERE` 節の主な違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート