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

SQL Server の LEFT JOIN: `ON` 句と `WHERE` 句の違いは何ですか?

DDD
リリース: 2024-12-29 22:45:24
オリジナル
706 人が閲覧しました

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

左結合の再考: ON 句と WHERE 句の区別

SQL Server では、LEFT JOIN 操作はデータの取得において重要な役割を果たします。複数のテーブルから。ただし、ON 句と WHERE 句での結合条件の指定の間には、微妙ではありますが重要な違いが存在します。

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

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

このクエリは、次のクエリから f2 列を取得しようとします。テーブル t1 に結合しますが、オプションで f1 列の一致する値と追加の条件 (cond2 および t2.f3 > に基づいてテーブル t2 の行を結合します)。

対照的に、次のクエリは異なるアプローチを採用しています。

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

ここでは、結合条件は ON 句のみで指定されていますが、t2.f3 > は ON 句でのみ指定されています。何かの条件が WHERE 句のフィルターとして追加されます。

違いを理解する

これら 2 つのクエリの主な違いは、操作の順序にあります。

  • ON 句: に一致する行を識別するために使用される条件を指定します。 参加する。これらの条件を満たさない行は、結合された結果セットから除外されます。
  • WHERE 句: 追加の条件に基づいて、結合された結果セットから行をフィルターします。

この違いを説明するために、候補の表を考えてみましょう(候補者) と投票の表 (投票):

candidates
| name        |
|-------------|
| Obama        |
| Romney        |

votes
| voter       | voted_for |
|-------------|-------------|
| Mickey Mouse | Romney      |
| Donald Duck  | Obama       |
ログイン後にコピー

クエリ 1:

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

このクエリは、ロムニーを含むすべての候補者を取得します。ドナルドダックはオバマに投票した。これは、v.voter = 'Donald Duck' 条件が ON 句で指定されており、結合操作にのみ影響するためです。

クエリ 2:

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

このクエリでは、v.voter = 'Donald Duck' 条件が WHERE 句に移動されます。その結果、ロムニーはドナルドダックからの一致する票がないため、結果セットから除外されます。ドナルドダックから投票を受けたオバマのみが返されます。

結論

LEFT JOIN 操作の ON 句と WHERE 句の区別を理解することは、効果的に情報を取得するために不可欠です。 SQL Server 内のデータ。適切な句に条件を慎重に配置することで、一致基準を制御し、結合された結果セットを効率的にフィルタリングできます。

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

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