ホームページ >データベース >mysql チュートリアル >SQL JOIN: USING、ON、または WHERE – どの構文を選択する必要がありますか?
SQL JOIN メソッドの比較: USING、ON、WHERE
SQL には、JOIN 操作を実行するための 3 つの構文 (USING、ON、WHERE) が用意されています。これらの構文は似ていますが、クエリの読みやすさ、正確さ、パフォーマンスに影響を与える可能性があります。
構文の使用
USING 構文では、USING
キーワードの後に両方のテーブルに共通の列名を使用して、結合列を指定します:
<code class="language-sql">SELECT * FROM a JOIN b USING(ID);</code>
ON 構文
ON 構文では、ON
キーワードと結合列間の等価式を使用して、結合条件を明示的に定義します。
<code class="language-sql">SELECT * FROM a JOIN b ON a.ID = b.ID;</code>
WHERE 構文
WHERE 構文は、WHERE 句で結合条件とフィルター条件を組み合わせます:
<code class="language-sql">SELECT * FROM a, b WHERE a.ID = b.ID;</code>
パフォーマンスに関する考慮事項
これらの構文オプション間に大きなパフォーマンスの違いはありません。ただし、特に OUTER JOIN を含むクエリでは潜在的な曖昧さがあるため、WHERE 構文は推奨されません。
意味上の違い
USING 構文では結合列のみを明示的に指定するため、明確になり、間違った結合条件が発生するリスクが軽減されます。ON 構文では、不等号演算子 (=、!=、>) や追加の結合条件 (AND/OR など) を含む、より複雑な結合条件が可能になります。
WHERE 構文は、指定された列の同等性に基づいて暗黙的に INNER JOIN を実行します。これにより、予期しないデカルト積が生成されたり、外部結合で不正確な結果が得られたりする可能性があります。
説明例
次のクエリを考えてみましょう:
<code class="language-sql">FROM T1,T2,T3 WHERE T1.ID = T2.ID AND T1.foo = 'bar' AND T2.fish = 42</code>T1.foo = 'bar' が結合条件なのかフィルター条件なのかは不明です。
ON 構文を使用してクエリを書き直すと、明確になります:
<code class="language-sql">FROM T1 INNER JOIN T2 ON T1.ID = T2.ID WHERE T1.foo = 'bar' AND T2.fish = 42</code>
結論
USING、ON、および WHERE 構文オプションはすべて JOIN 操作を実行できますが、外部結合の処理における可読性、正確性、および一貫性により ON 構文が一般的に好まれます。 USING 構文は簡潔さを提供しますが、WHERE 構文はあいまいさがある可能性があるため避けるべきです。以上がSQL JOIN: USING、ON、または WHERE – どの構文を選択する必要がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。