Relationenalgebra und SQL: Outer-Join


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.

Natural-Left-Outer-Join

Bearbeiten

Beispiel

Bearbeiten
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;

Left-Outer-Join

Bearbeiten

Beispiel

Bearbeiten
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;

Natural-Right-Outer-Join

Bearbeiten

Beispiel

Bearbeiten
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;

Right-Outer-Join

Bearbeiten

Beispiel

Bearbeiten
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;

Full-Outer-Join

Bearbeiten

Beispiel

Bearbeiten
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);