「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > 内側の結合は、null値を外側の結合に含めることをオーバーライドしますか?

内側の結合は、null値を外側の結合に含めることをオーバーライドしますか?

2025-03-13に投稿されました
ブラウズ:964

Does an INNER JOIN Override an OUTER JOIN's Inclusion of NULL Values?

内側と外側の結合の相互作用を理解するSQL

複雑なSQLクエリは、異なる結合タイプを組み合わせて、複数の結合操作を頻繁に使用します。 重要な考慮事項は、外側結合の特性であるnull値を含めることが、その後、内側の結合が適用されると影響を受けることです。

内側結合が外部結合結果にどのように影響するか

内側の結合は、その性質上、

の両方で結合条件が満たされる行を返す行のみを返します。 内側の結合が外側の結合に続いて、内側の結合の状態がnull(外側の結合のため)の可能性のある列に依存している場合、それらの列がnullである行を効果的に除去します。これにより、外側の結合が最初に提供されたヌル値が含まれています。

実例

シナリオを調べてみましょう:

select * 人から person.address_id = address.idの左結合アドレス 内側の参加ememail_id = email.id;
SELECT *
FROM person
LEFT JOIN address ON person.address_id = address.id
INNER JOIN email ON person.email_id = email.id;
left join

は、テーブルからのすべての行が含まれていることを保証します。 ただし、内側の結合 email との結合は、 email_id email の両方に存在する行のみに制限されます。 一致するアドレスを持っていた person がありますが、null email_id が除外されます。 問題のあるシナリオとそのソリューション

このクエリを検討してください:

select * 人から person.address_id = address.idの左結合アドレス address.city_id = city.id;

の内側の参加都市

ここで、
SELECT *
FROM person
LEFT JOIN address ON person.address_id = address.id
INNER JOIN city ON address.city_id = city.id;

address.city_id がnullであると仮定します。 一部のアドレスに city_id がない場合、それらの行(および関連する列)が省略され、最初の left join 正しいアプローチは、 left join を使用することです。

select * 人から person.address_id = address.idの左結合アドレス destry.city_id = city.id;

に参加します。 これは、 Join の包括性を保持します。 これにより、すべての

レコードが含まれていることが保証されます。
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3