Jaka jest różnica między „INNER JOIN” a „OUTER JOIN”?

W jaki sposób pasują także LEFT JOIN, RIGHT JOIN i FULL JOIN?

1 odpowiedź

Zakładając, że dołączasz do kolumn bez duplikatów, co jest bardzo częstym przypadkiem: -Połączenie wewnętrzne A i B daje wynik przecięcia A i B, tj. Wewnętrznej części przecięcia diagramu Venna. -Złącze zewnętrzne A i B daje wyniki połączenia A i B, tj. Zewnętrznych części unii diagramu Venna. Przykłady

Załóżmy, że masz dwie tabele z pojedynczą kolumną i dane w następujący sposób:

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

Zauważ, że (1,2) są unikalne dla A, (3,4) są wspólne, a (5,6) są unikalne dla B. Inner join Inner join przy użyciu jednego z równoważnych zapytań daje przecięcie dwóch tabel, tj. Dwóch wspólnych rzędów.

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

Left outer join Left outer join da wszystkie wiersze w A oraz wszystkie wspólne wiersze w 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

Right outer join Right outer join da wszystkie wiersze w B oraz wszystkie wspólne wiersze w 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

Full outer join

Full outer join daje połączenie A i B, tj. Wszystkie wiersze w A i wszystkie wiersze w B. Jeśli coś w A nie ma odpowiedniego punktu odniesienia w B, to część B jest zerowa i vice odwrotnie.

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

Twoja odpowiedź

Zaloguj się aby odpowiedzieć.

Operiada

Operiada to polskojęzyczne forum informatyczne działające na zasadzie pytań i odpowiedzi.

Obserwowane tagi

Zaloguj się aby obserwować tagi.