ホームページ > データベース > mysql チュートリアル > JOIN の ON 句と WHERE 句: いつどちらを使用する必要がありますか?

JOIN の ON 句と WHERE 句: いつどちらを使用する必要がありますか?

Mary-Kate Olsen
リリース: 2025-01-05 00:02:40
オリジナル
999 人が閲覧しました

ON vs. WHERE Clause in JOINs: When Should I Use Which?

JOIN 演算における ON 句と WHERE 句

INNER JOIN 演算を使用する場合、ON 句と WHERE 句の両方を使用して、データをフィルタリングします。これらは置き換え可能に見える場合もありますが、注意が必要な微妙な違いがあります。

ON 句

ON 句は、満たす必要のある特定の条件を指定するために使用されます。結合結果に行が含まれるようにします。データを結合レベルでフィルタリングし、指定された条件を満たす両方のテーブルの行のみが結合されるようにします。

WHERE 句

フィルタリングには WHERE 句が使用されます。結合操作が行われた後の行。結合されたデータセットに条件を適用し、結果をさらに絞り込みます。

パフォーマンスに関する考慮事項

一般に、ON 句を使用するか WHERE 句を使用するかでパフォーマンスに大きな違いはありません。 INNER JOIN 操作でデータをフィルタリングするため。ただし、例外もあります。

外部結合

LEFT OUTER JOIN などの外部結合を使用する場合、フィルター条件の配置が結果に影響を与える可能性があります。 ON 句でフィルターを適用すると、条件を満たさない行が右側のテーブル (LEFT OUTER JOIN の場合) から除外されます。一方、WHERE 句でフィルタを適用すると、結合後に結合されたデータセットから行がフィルタリングされ、さらに多くの行が返される可能性があります。

例:

次の例:

SELECT * 
FROM Foo f 
LEFT OUTER JOIN Bar b ON (b.BarId = f.BarId) AND (b.IsApproved = 1);
ログイン後にコピー

この場合、フィルター (b.IsApproved = 1) は、IsApproved が 1 に設定されていないすべての行を Bar から除外します。

または、

SELECT * 
FROM Foo f 
LEFT OUTER JOIN Bar b ON (b.BarId = f.BarId)
WHERE (b.IsApproved = 1);
ログイン後にコピー

これは、最初に結合操作を実行し、次に IsApproved に基づいて結果セットをフィルタリングします。条件。IsApproved が指定されている Bar から行を返す可能性があります。 NULL.

その他の考慮事項

  • 単純な内部結合の場合は、WHERE 句が乱雑にならないようにするため、一般に ON 句を使用することをお勧めします。
  • 複数の結合またはサブクエリを含む複雑な条件は、WHERE で管理する方が簡単な場合があります。
  • 最適なアプローチを選択するときは、インデックスの使用を考慮する必要があります。 ON 句のフィルタは結合列のインデックスを利用することができますが、WHERE 句のフィルタはテーブル スキャンを必要とする場合があります。

以上がJOIN の ON 句と WHERE 句: いつどちらを使用する必要がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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