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