ホームページ >データベース >mysql チュートリアル >SQL JOIN: WHERE と ON: フィルタリング結果が異なる場合は?
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 JOIN
後Orders
に削除されます。と 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.OrderID
が Orders.ID
に一致し、 Orders.ID
が 12345 に等しい場合にのみ行が結合されることを指定します。この結合前フィルタリングにより、実際の結合が行われる前に処理されるデータが削減されます。 .
機能的等価性と意味上の区別
どちらの句を使用しても機能的に同等の結果が得られる場合がありますが、それらの意味は大きく異なります。 WHERE
は結合後にフィルターを適用しますが、ON
は結合プロセス自体に影響を与えます。
この意味上の違いは、LEFT
または RIGHT JOINs
で特に顕著です。 WHERE
または LEFT
がそのテーブルのすべての行を含むように設計されている場合でも、RIGHT JOIN
句の条件では、左または右のテーブルから行が除外される場合があります。 フィルター条件に ON
を使用すると、結合自体が、指定されたテーブルのすべての行の意図された包含を尊重するようになります。
INNER JOINs
の場合、効果は多くの場合似ていますが、意味上の区別は残ります。
以上がSQL JOIN: WHERE と ON: フィルタリング結果が異なる場合は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。