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 b
が b 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 c
が a 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 サイトの他の関連記事を参照してください。