INNER JOIN と OUTER JOIN: 相互作用を理解する
この記事では、SQL クエリで INNER JOIN と OUTER JOIN (LEFT、RIGHT、または FULL) を組み合わせることが最終的な結果セットにどのような影響を与える可能性があるかを説明します。 具体的には、後続の INNER JOIN が先行する OUTER JOIN の動作をオーバーライドできるかどうかを調べます。
結合順序の影響
キーは各結合の ON
節にあります。 後の INNER JOIN は、ON
句が OUTER JOIN により NULL になる可能性のある列からの非 null 値を必要とする場合にのみ、以前の OUTER JOIN の効果を無効にします。 結合順序を変更するだけではこの問題は解決されません。代わりに、INNER JOIN をより適切な OUTER JOIN に変更する必要があります。
具体例
次のシナリオを考えてみましょう:
このクエリは期待どおりに機能します:
<code class="language-sql">SELECT * FROM person LEFT JOIN address ON person.address_id = address.id INNER JOIN email ON person.email_id = email.id</code>
LEFT JOIN
が INNER JOIN
の後に配置されても、結果は同じです。
ただし、このクエリの動作は異なります。
<code class="language-sql">SELECT * FROM person LEFT JOIN address ON person.address_id = address.id INNER JOIN city ON address.city_id = city.id</code>
ここでは、INNER JOIN
が NULL である可能性があるため、対応する city
エントリがない person
では、address
の address.city_id
は失敗します。 解決策は、INNER JOIN
を LEFT JOIN
に置き換えることです。
読みやすさと効率性を高めるための推奨プラクティス
コードの可読性と保守性を向上させるには、結合を論理的に順序付けることがベスト プラクティスです。 INNER JOIN はコア関係を表すため、最初に配置し、次に OUTER JOIN を配置します。 RIGHT OUTER JOIN はそれほど一般的ではありませんが、一貫性を保つために、LEFT OUTER JOIN を優先して RIGHT OUTER JOIN を回避することをお勧めします。 このアプローチは、必須のデータ関係と、OUTER JOIN によって導入されたオプションの拡張機能を明確に反映しています。
以上がINNER JOIN は OUTER JOIN の結果をオーバーライドできますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。