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.
R:
A |
B |
C |
D
|
1 |
2 |
3 |
4
|
4 |
5 |
6 |
7
|
7 |
8 |
9 |
0
|
|
S:
A |
F |
G
|
1 |
2 |
3
|
7 |
8 |
9
|
8 |
8 |
8
|
|
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
|
|
S:
A |
F |
G
|
1 |
2 |
3
|
7 |
8 |
9
|
8 |
8 |
8
|
|
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;
R:
A |
B |
C |
D
|
1 |
2 |
3 |
4
|
4 |
5 |
6 |
7
|
7 |
8 |
9 |
0
|
|
S:
A |
F |
G
|
1 |
2 |
3
|
7 |
8 |
9
|
8 |
8 |
8
|
|
NATURAL RIGHT OUTER JOIN(R, S):
A |
B |
C |
D |
F |
G
|
1 |
2 |
3 |
4 |
2 |
3
|
7 |
8 |
9 |
0 |
8 |
9
|
8 |
NULL |
NULL |
NULL |
8 |
8
|
|
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
|
|
S:
A |
F |
G
|
1 |
2 |
3
|
7 |
8 |
9
|
8 |
8 |
8
|
|
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
|
NULL |
NULL |
NULL |
NULL |
8 |
8 |
8
|
|
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
|
|
S:
A |
F |
G
|
1 |
2 |
3
|
7 |
8 |
9
|
9 |
4 |
6
|
|
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
|
9 |
4 |
6 |
NULL |
NULL |
NULL
|
|
SELECT * FROM S FULL OUTER JOIN R USING(A);