ホームページ > データベース > mysql チュートリアル > SQL 結合: USING、ON、WHERE のパフォーマンスと構文の違いは何ですか?

SQL 結合: USING、ON、WHERE のパフォーマンスと構文の違いは何ですか?

DDD
リリース: 2025-01-21 21:51:15
オリジナル
527 人が閲覧しました

SQL Joins: What are the Performance and Syntax Differences Between USING, ON, and WHERE?

SQL JOIN メソッド: USING、ON、WHERE のパフォーマンスと構文の違い

SQL には、テーブルを結合するためのいくつかのオプション (USING、ON、WHERE) が用意されています。これらのオプションの機能は似ていますが、それらのパフォーマンスと構文の意味について誤解が生じる可能性があります。この記事では、これらの接続方法の違いについて説明します。

パフォーマンス

一般に信じられていることに反して、3 つの接続方法の間にパフォーマンスに大きな違いはありません。 3 つの方法はすべて、同じ最適化されたクエリ プランを生成します。

構文とセマンティクス

ANSI 構文:

  • JOIN (ANSI-92 で導入) は、結合を実行するための推奨構文です。 ON 句を使用して結合条件を明示的に定義します。
  • WHERE (ANSI-89) では、WHERE 句を使用して結合条件を指定できますが、可読性と曖昧さの問題が発生する可能性があるため、非推奨になりました。

構文の使用:

  • USING (SQL:2003 で導入) は、USING キーワードを使用して結合テーブル間で共通の列を指定する短縮構文です。簡潔で直感的な構文を提供します。

「join the where」のあいまいさ (暗黙的な INNER JOIN)

WHERE 句を使用して結合条件を指定すると、特に外部結合タイプで曖昧さが生じる可能性があります。この問題は、SQL Server の論理クエリ処理順序 (FROM が WHERE より前に評価される) に起因します。 「join the where」は、誤ってデカルト積を作成したり、予期しない結果を生成したりする可能性があります。

文法的曖昧さ:

次の 2 つのクエリは、WHERE 句の暗黙的な内部結合と FROM 句の明示的な外部結合を混在させるときに発生する可能性のある構文の曖昧さを示しています。

<code class="language-sql">FROM T1, T2, T3
WHERE T1.ID = T2.ID AND T1.foo = 'bar' AND T2.fish = 42

FROM T1 
INNER JOIN T2 ON T1.ID = T2.ID
INNER JOIN T3 ON T1.ID = T3.ID
WHERE T1.foo = 'bar' AND T2.fish = 42</code>
ログイン後にコピー
曖昧さは、どの接続が外部でどの接続が内部であるかを明確に判断できないことから生じます。

おすすめ:

明確さ、一貫性、最新の SQL 標準との互換性のために、次のことをお勧めします。

    すべての結合に明示的な結合 (ON 句を含む JOIN 構文) を使用します。
  • 「join the where」(WHERE 句の暗黙的な INNER JOIN) の使用は避けてください。
  • クロスプラットフォーム互換性を確保するには、ANSI-92 構文 (ON 句を使用した JOIN) を使用します。

以上がSQL 結合: USING、ON、WHERE のパフォーマンスと構文の違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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