Inner vs. Outer Joins
Ein Join kombiniert immer Datenzeilen aus zwei Sätzen (normalerweise als linker Satz und rechter Satz bezeichnet).Standardmäßig gelangen nur Zeilen in die Ergebnismenge, die die Join-Bedingung erfüllen (d. h. die mindestens einer Zeile in der anderen Menge entsprechen, wenn die Join-Bedingung angewendet wird).Dieser Standard-Join-Typ wird als inner join bezeichnet.Angenommen, wir haben die folgenden zwei Tabellen:
ID | S |
---|---|
87 |
Just some text |
235 |
Silence |
CODE | X |
---|---|
-23 |
56.7735 |
87 |
416.0 |
Wenn wir diese Tabellen wie folgt verbinden:
select *
from A
join B on A.id = B.code;
dann ist die Ergebnismenge:
ID | S | CODE | X |
---|---|---|---|
87 |
Just some text |
87 |
416.0 |
Die erste Reihe von A
wurde mit der zweiten Reihe von B
verbunden, weil sie zusammen die Bedingung “A.id = B.code
” erfüllten.Die anderen Zeilen aus den Quelltabellen haben keine Übereinstimmung in der entgegengesetzten Menge und werden daher nicht in den Join aufgenommen.Denken Sie daran, dies ist ein INNER
-Join.Wir können diese Tatsache explizit machen, indem wir schreiben:
select *
from A
inner join B on A.id = B.code;
Da jedoch INNER
die Vorgabe ist, wird es normalerweise weggelassen.
Es ist durchaus möglich, dass eine Reihe im linken Satz mit mehreren Reihen im rechten Satz übereinstimmt oder umgekehrt.In diesem Fall sind alle diese Kombinationen enthalten, und wir können Ergebnisse erhalten wie:
ID | S | CODE | X |
---|---|---|---|
87 |
Just some text |
87 |
416.0 |
87 |
Just some text |
87 |
-1.0 |
-23 |
Don’t know |
-23 |
56.7735 |
-23 |
Still don’t know |
-23 |
56.7735 |
-23 |
I give up |
-23 |
56.7735 |
Manchmal möchten (oder müssen) wir alle Zeilen einer oder beider Quellen in der verbundenen Menge erscheinen, unabhängig davon, ob sie mit einem Datensatz in der anderen Quelle übereinstimmen.Hier kommen Outer Joins ins Spiel.Ein 'LEFT' Outer Join enthält alle Datensätze aus dem linken Satz, aber nur übereinstimmende Datensätze aus dem rechten Satz.Bei einem RIGHT
Outer Join ist es umgekehrt.FULL
Outer Joins beinhalten alle Datensätze aus beiden Sets.In allen Outer Joins werden die "Löcher" (die Stellen, an denen ein eingeschlossener Quelldatensatz keine Übereinstimmung im anderen Satz hat) mit NULL
aufgefüllt.
Um einen Outer Join zu erstellen, müssen Sie LEFT
, RIGHT
oder FULL
angeben, optional gefolgt vom Schlüsselwort OUTER
.
Unten sind die Ergebnisse der verschiedenen Outer Joins, wenn sie auf unsere ursprünglichen Tabellen A
und B
angewendet werden:
select *
from A
left [outer] join B on A.id = B.code;
ID | S | CODE | X |
---|---|---|---|
87 |
Just some text |
87 |
416.0 |
235 |
Silence |
<null> |
<null> |
select *
from A
right [outer] join B on A.id = B.code
ID | S | CODE | X |
---|---|---|---|
<null> |
<null> |
-23 |
56.7735 |
87 |
Just some text |
87 |
416.0 |
select *
from A
full [outer] join B on A.id = B.code
ID | S | CODE | X |
---|---|---|---|
<null> |
<null> |
-23 |
56.7735 |
87 |
Just some text |
87 |
416.0 |
235 |
Silence |
<null> |
<null> |