ホームページ >データベース >mysql チュートリアル >SQL JOIN: WHERE と ON: フィルタリング結果が異なる場合は?

SQL JOIN: WHERE と ON: フィルタリング結果が異なる場合は?

Linda Hamilton
Linda Hamiltonオリジナル
2025-01-23 03:06:13457ブラウズ

SQL JOINs: WHERE vs. ON: When Do They Differ in Filtering Results?

SQL JOIN: データ フィルタリングにおける WHERE 句と ON 句の違い

SQL の WHERE 句と ON 句は結合で頻繁に使用されますが、異なるフィルタリング機能を実行します。この違いを理解することは、効率的なクエリ設計にとって重要です。

WHERE 句: 結合後のフィルタリング

WHERE ステートメントの後に現れる JOIN 句は、結合によって生成された 結果セット全体 をフィルターします。 これは結合後フィルターとして機能し、結合操作の完了に、指定された条件を満たさない行を削除します。 例:

<code class="language-sql">SELECT *
FROM Orders
LEFT JOIN OrderLines ON OrderLines.OrderID = Orders.ID
WHERE Orders.ID = 12345;</code>

ここで、WHERE 句は、Orders.ID が 12345 である行のみを含むように結果をフィルターします。この条件を満たさない行は、 からのデータを既に結合したLEFT JOINOrders に削除されます。と OrderLines.

ON 句: 事前結合フィルタリング

逆に、ON ステートメント自体内にある JOIN 句は、結合基準 を定義します。結合が実行されるに、結合されたテーブルのどの行を照合する必要があるかを決定します。 次のクエリを考えてみましょう:

<code class="language-sql">SELECT *
FROM Orders
LEFT JOIN OrderLines ON OrderLines.OrderID = Orders.ID AND Orders.ID = 12345;</code>

ON 句は、OrderLines.OrderIDOrders.ID に一致し、 Orders.ID が 12345 に等しい場合にのみ行が結合されることを指定します。この結合前フィルタリングにより、実際の結合が行われる前に処理されるデータが削減されます。 .

機能的等価性と意味上の区別

どちらの句を使用しても機能的に同等の結果が得られる場合がありますが、それらの意味は大きく異なります。 WHERE は結合後にフィルターを適用しますが、ON は結合プロセス自体に影響を与えます。

この意味上の違いは、LEFT または RIGHT JOINs で特に顕著です。 WHERE または LEFT がそのテーブルのすべての行を含むように設計されている場合でも、RIGHT JOIN 句の条件では、左または右のテーブルから行が除外される場合があります。 フィルター条件に ON を使用すると、結合自体が、指定されたテーブルのすべての行の意図された包含を尊重するようになります。

INNER JOINs の場合、効果は多くの場合似ていますが、意味上の区別は残ります。

以上がSQL JOIN: WHERE と ON: フィルタリング結果が異なる場合は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。