Databases Reference
In-Depth Information
mer dann, wenn wir solchen Beziehungen in unseren Abfragen Rechnung tragen
wollen, brauchen wir den Outer-Join. Es erfordert einige Übung, um einen Blick
dafür zu bekommen, wann ein Inner- und wann ein Outer-Join das geeignete In-
strument ist, das ER-Diagramm bietet aber eine gute Orientierung. Der Outer-Join
wird vielfach nur am Rande erwähnt und ist daher nicht so gängig. Dies ent-
spricht aber nicht seiner Bedeutung in der Praxis. Im Zweifelsfall sollten wir uns
eher für einen Outer- als einen Inner-Join entscheiden.
Wenn es Inner-Joins gibt, dann auch Outer-Joins. Gibt es Left-Outer-Joins, dann
wohl auch Right-Outer-Joins, oder? Tatsächlich können wir unseren Left-Outer-
Join auch äquivalent als Right-Outer-Join formulieren:
select r.name, a.titel
from alben a right outer join reihen r
on a.reihe=r.id
Mit den Schlüsselworten left und right wird immer die Seite bezeichnet, auf
der die Tabelle steht, aus der alle Datensätze in das Ergebnis eingehen sollen. SQL 1
bietet außerdem einen kombinierten Left- und Right-Outer-Join:
select r.name, a.titel
from alben a full outer join reihen r
on a.reihe=r.id
13.4
Muss es immer natürlich sein?
Bisher haben wir mit dem zum natürlichen Join gehörigen Prädikat
a.reihe=r.id gearbeitet. Da die Joins aus SQL den -Joins der Relatio-
nenalgebra (siehe Kapitel 4) entsprechen, können neben dem = -Operator auch
andere Vergleichsoperatoren verwendet werden. Im folgenden Beispiel wird der
< -Operator eingesetzt; außerdem beteiligt sich die Tabelle alben gleich zweimal
am Join:
select a2.reihe, a2.jahr
from alben a1, alben a2
where a1.reihe=a2.reihe and
a2.band>a1.band and a2.preis>a1.preis
group by a2.reihe, a2.jahr
Es werden die Erscheinungsjahre aller Alben ermittelt, zu denen es in der gleichen
Reihe ein günstigeres Vorgängeralbum gibt. Anders formuliert, werden die Jahre
ermittelt, bei denen es innerhalb einer Reihe zu einer Preiserhöhung kam. Die
group by -Komponente verwenden wir hier nur, um Dubletten zu eliminieren.
Das Ergebnis sehen wir in Tabelle 13.7.
1
H2 kennt den Full-Outer-Join nicht.
 
Search WWH ::




Custom Search