ホームページ >データベース >mysql チュートリアル >INNER JOIN は SQL の先行する OUTER JOIN をオーバーライドしますか?

INNER JOIN は SQL の先行する OUTER JOIN をオーバーライドしますか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2025-01-09 10:22:40827ブラウズ

Does an INNER JOIN Override a Preceding OUTER JOIN in SQL?

SQL JOIN: INNER JOIN は先行する OUTER JOIN をオーバーライドしますか?

この記事では、SQL クエリにおける INNER JOIN 句と OUTER JOIN 句の間の相互作用について調査し、特に後続の INNER JOIN が先行する OUTER JOIN の効果を無効にするかどうかについて説明します。

簡単に言うと、「いいえ、自動的には機能しません」です。 ただし、INNER JOIN は、先行する の効果を大幅に制限OUTER JOINする可能性があります。

鍵は ONINNER JOIN 節にあります。 ON 句で、NULL が原因で OUTER JOIN になる可能性がある列が必要な場合、INNER JOIN はその列が NULL である行を効果的に除外します。 これは、OUTER JOIN を完全に無視するという意味での「オーバーライド」ではなく、フィルタリング効果です。

例 1: 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>

これは期待どおりに機能します。 INNER JOINemail には有効な person.email_id のみが必要です。 個人がアドレスを持っていない場合でも (address.idNULL)、LEFT JOIN にはその個人が含まれます。電子メールを持っている場合、INNER JOIN にはその電子メール データが含まれます。

例 2: INNER JOIN は OUTER 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 JOINcity には、NULL 以外の address.city_id が必要です。 LEFT JOINaddressNULL address.city_id を含む行を生成する可能性があるため、それらの行は INNER JOIN によって除外されます。 OUTER JOINの効果は厳しく制限されています。

解決策: 例 2 の OUTER JOIN の動作を維持するには、INNER JOINLEFT JOIN:

に変更します。
<code class="language-sql">SELECT *
FROM person
LEFT JOIN address ON person.address_id = address.id
LEFT JOIN city ON address.city_id = city.id;</code>

ベストプラクティス:

  • 厳密に必須ではありませんが、INNER JOIN はより制限的な条件を表すため、OUTER JOIN の前に INNER JOIN を配置すると読みやすくなります。
  • RIGHT JOINLEFT JOIN より直感的ではない可能性があるため、慎重に使用してください。 多くの場合、テーブルを切り替えた LEFT JOIN を使用すると、同じ結果がより明確に得られます。

INNER JOINOUTER JOIN の間の相互作用を理解することは、効率的で正しい SQL クエリを作成するために重要です。 すべての結合の ON 句を慎重に検討して、目的の動作と一致していることを確認してください。

以上がINNER JOIN は SQL の先行する OUTER JOIN をオーバーライドしますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。