1. ホーム
  2. sql

[解決済み】「INNER JOIN」と「OUTER JOIN」の違いは何ですか?

2022-03-18 07:16:23

質問

また、どのように LEFT JOIN , RIGHT JOINFULL JOIN が合うのか?

解決方法は?

重複のないカラムで結合していると仮定すると、これは非常に一般的なケースです。

  • AとBの内側joinは、A intersect Bの結果を与えます。 ベン図 が交差する。

  • AとBの外部結合は、A結合Bの結果、つまり、A結合Bの外側の部分を与えます。 ベン図 の組合があります。

2つのテーブルがあり、それぞれ1列で、データは以下の通りだとします。

A    B
-    -
1    3
2    4
3    5
4    6

なお、(1,2)はAに固有、(3,4)は共通、(5,6)はBに固有であることに注意してください。

内部結合

同等のクエリを使用した内部結合は、2つのテーブルの交差点、つまり、2つのテーブルに共通する2つの行を提供します。

select * from a INNER JOIN b on a.a = b.b;
select a.*, b.*  from a,b where a.a = b.b;

a | b
--+--
3 | 3
4 | 4

左外部結合

左外部結合では、Aのすべての行とBの共通行が得られます。

select * from a LEFT OUTER JOIN b on a.a = b.b;
select a.*, b.*  from a,b where a.a = b.b(+);

a |  b
--+-----
1 | null
2 | null
3 |    3
4 |    4

右外部結合

右外部結合では、Bの全行とAの共通行が得られます。

select * from a RIGHT OUTER JOIN b on a.a = b.b;
select a.*, b.*  from a,b where a.a(+) = b.b;

a    |  b
-----+----
3    |  3
4    |  4
null |  5
null |  6

完全外部結合

完全外部結合では、AとBの和、つまりAの全行とBの全行が得られます。AのデータにBのデータがない場合、Bの部分はnullとなり、その逆も同様です。

select * from a FULL OUTER JOIN b on a.a = b.b;

 a   |  b
-----+-----
   1 | null
   2 | null
   3 |    3
   4 |    4
null |    6
null |    5