Aus Wikibooks
Im Gegensatz zum Equi-Join werden beim Outer-Join auch diejenigen Tupel der linken (left outer join) bzw. der rechten (right outer join) Relation in die Ergebnisrelation mit aufgenommen, welche keinen Join-Partner finden. Die nicht vorhandenen Attribute der Join-Relation werden mit Nullwerten aufgefüllt. Die Kombination aus Left- und Right-Outer-Join wird Outer-Join oder Full-Outer-Join genannt. Dabei werden alle Tupel in die Ergebnisrelation aufgenommen und jene Attribute eines Tupels mit Nullwerten aufgefüllt, die keinen Join-Partner in der jeweils anderen Relation gefunden haben.
Der Outer-Join kann mit oder ohne (natural outer join) Join-Bedingung verwendet werden. Der Outer-Join wird auch Inklusionsverbund genannt.
[Bearbeiten] Natural-Left-Outer-Join
R:
| A |
B |
C |
D |
| 1 |
2 |
3 |
4 |
| 4 |
5 |
6 |
7 |
| 7 |
8 |
9 |
0 |
|
|
NATURAL LEFT OUTER JOIN(R, S):
| A |
B |
C |
D |
F |
G |
| 1 |
2 |
3 |
4 |
2 |
3 |
| 4 |
5 |
6 |
7 |
NULL |
NULL |
| 7 |
8 |
9 |
0 |
8 |
9 |
|
SELECT * FROM R NATURAL LEFT OUTER JOIN S;
R:
| A |
B |
C |
D |
| 1 |
2 |
3 |
4 |
| 4 |
5 |
6 |
7 |
| 7 |
8 |
9 |
0 |
|
|
LEFT OUTER JOIN(R, R.A = S.A, S):
| A |
B |
C |
D |
A |
F |
G |
| 1 |
2 |
3 |
4 |
1 |
2 |
3 |
| 4 |
5 |
6 |
7 |
NULL |
NULL |
NULL |
| 7 |
8 |
9 |
0 |
7 |
8 |
9 |
|
SELECT * FROM R LEFT OUTER JOIN S ON R.A=S.A;
[Bearbeiten] Natural-Right-Outer-Join
R:
| A |
B |
C |
D |
| 1 |
2 |
3 |
4 |
| 4 |
5 |
6 |
7 |
| 7 |
8 |
9 |
0 |
|
|
NATURAL RIGHT OUTER JOIN(R, S):
| A |
B |
C |
D |
F |
G |
| 1 |
2 |
3 |
4 |
2 |
3 |
| 7 |
8 |
9 |
0 |
8 |
9 |
|
SELECT * FROM R NATURAL RIGHT OUTER JOIN S;
R:
| A |
B |
C |
D |
| 1 |
2 |
3 |
4 |
| 4 |
5 |
6 |
7 |
| 7 |
8 |
9 |
0 |
|
|
RIGHT OUTER JOIN(R, R.A = S.A, S):
| A |
B |
C |
D |
A |
F |
G |
| 1 |
2 |
3 |
4 |
1 |
2 |
3 |
| 7 |
8 |
9 |
0 |
7 |
8 |
9 |
|
SELECT * FROM R RIGHT OUTER JOIN S ON R.A=S.A;
R:
| A |
B |
C |
D |
| 1 |
2 |
3 |
4 |
| 4 |
5 |
6 |
7 |
| 7 |
8 |
9 |
0 |
|
|
FULL OUTER JOIN(S, R):
| A |
F |
G |
B |
C |
D |
| 1 |
2 |
3 |
2 |
3 |
4 |
| 4 |
NULL |
NULL |
5 |
6 |
7 |
| 7 |
8 |
9 |
8 |
9 |
0 |
|
SELECT * FROM S FULL OUTER JOIN R USING(A);