ホームページ > データベース > mysql チュートリアル > SQL クエリ、特に外部結合の場合、結合順序は重要ですか?

SQL クエリ、特に外部結合の場合、結合順序は重要ですか?

Susan Sarandon
リリース: 2025-01-17 17:37:08
オリジナル
985 人が閲覧しました

Does Join Order Matter in SQL Queries, Especially with Outer Joins?

SQL JOIN 順序: それは重要ですか?

SQL では、特に外部結合を使用する場合、JOIN 操作の順序がクエリ結果に影響します。

内部結合

内部結合の場合、テーブル A の行は、特定の条件に基づいてテーブル B の行と正確に一致し、結合の順序は結果に影響しません。これは、内部結合が可換性と結合性の両方を備えているためです。したがって、以下に示すクエリ A と B は同じ結果を生成します:

<code class="language-sql">-- A (内连接)
SELECT *
FROM a INNER JOIN b ON <条件>
INNER JOIN c ON <条件>;

-- B (内连接)
SELECT *
FROM a INNER JOIN c ON <条件>
INNER JOIN b ON <条件>;</code>
ログイン後にコピー

外部結合

外部結合 (LEFT、RIGHT、または FULL) の場合、結合の順序が重要です。内部結合とは異なり、外部結合は交換可能でも結合可能でもありません。

交換法則

可換性とは、a LEFT JOIN bb LEFT JOIN a と同じであることを意味します。ただし、これは外部結合には当てはまりません。たとえば、次のクエリ:

<code class="language-sql">a LEFT JOIN b ON b.ab_id = a.ab_id</code>
ログイン後にコピー

テーブル a のすべての行とテーブル b の対応する行を返します。テーブル b に一致する行がない場合は NULL を返します。反対のクエリ:

<code class="language-sql">b LEFT JOIN a ON a.ab_id = b.ab_id</code>
ログイン後にコピー

テーブル b のすべての行とテーブル a の対応する行を返します。テーブル a に一致するものがない場合は NULL を返します。テーブル a とテーブル b の行数が異なる場合、2 つのクエリは異なる結果を生成します。

結合法

の結合法則は、(a LEFT JOIN b) LEFT JOIN ca LEFT JOIN (b LEFT JOIN c) と同等であることを意味します。ただし、これは外部結合にも当てはまりません。次の同等のクエリを考えてみましょう:

<code class="language-sql">a LEFT JOIN b ON b.ab_id = a.ab_id
LEFT JOIN c ON c.ac_id = a.ac_id</code>
ログイン後にコピー

条件 c.ac_id = a.ac_id に NULL 比較が含まれている場合、結合の法則が成立しない可能性があります。つまり、結合条件に NULL 値が含まれる場合、結合の順序が結果に影響します。

以上がSQL クエリ、特に外部結合の場合、結合順序は重要ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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