JOIN-Prädikat (join_predicate)
Ein JOIN-
Prädikat ( join_predicate ) spezifiziert einen JOIN. Ein JOIN-Prädikat kann ohne, mit einem oder mit zwei OUTER JOIN-Indikatoren angegeben werden.Syntax
<join_predicate> ::=
<expression> [<outer_join_indicator>] <comp_op> <expression> [<outer_join_indicator>]
<outer_join_inidicator> ::= (+)
expression, comp_opErläuterung
Jeder Ausdruck (
expression ) muß eine Spaltenspezifikation enthalten. Es muß eine Spaltenspezifikation des ersten Ausdrucks und eine Spaltenspezifikation des zweiten Ausdrucks geben, so daß sich die beiden Spaltenspezifikationen auf verschiedene Tabellennamen oder Referenznamen beziehen.Sei x der Wert des ersten Ausdrucks und y der Wert des zweiten Ausdrucks. Die Werte x und y müssen vergleichbar sein.
Es gelten die in
Vergleichsprädikat angegebenen Regeln.Wenn mindestens ein OUTER JOIN-Indikator (
outer_join_indicator ) in einem JOIN-Prädikat einer Suchbedingung angegeben wird, dürfen dem entsprechenden Tabellenausdruck nur genau zwei Tabellen zugrundeliegen oder es muß folgendes gelten:Wenn für einen JOIN mehr als zwei Tabellen für die
QUERY-Spezifikation notwendig sind und kann eine der oben genannten Regeln nicht eingehalten werden, kann auch ein QUERY-Ausdruck in der FROM-Klausel verwendet werden.Es werden nur solche Zeilen einer Tabelle in die Ergebnistabelle übertragen, die ein dem Vergleichsoperator (
comp_op ) entsprechendes Gegenstück in der anderen im JOIN-Prädikat angegebenen Tabelle haben.Wenn sichergestellt werden soll, daß jede Zeile einer Tabelle mindestens einmal in der Ergebnistabelle enthalten ist, muß der OUTER JOIN-Indikator auf der Seite des Vergleichsoperators angegeben werden, auf der die andere Tabelle spezifiziert ist.
Es wird dann (wenn für eine Zeile einer Tabelle nicht mindestens ein Gegenstück in der anderen Tabelle gefunden werden kann) aus der Tabelle trotzdem eine Zeile für die Ergebnistabelle gebildet. Dabei wird für die Ausgabespalten, die aus Spalten der anderen Tabelle gebildet werden, der NULL-Wert verwendet.
Da der OUTER JOIN-Indikator auf beiden Seiten des Vergleichsoperators angegeben werden kann, wenn dem
Das JOIN-Prädikat ist ein Spezialfall des
Vergleichsprädikats. Die Anzahl der JOIN-Prädikate in einer Suchbedingung ist auf 128 beschränkt.
JOIN-Prädikat
Beispieltabellen
Liegt für den Kunden 'Barth' eine Buchung vor? Wenn ja, wann?
SELECT buchung.bnr, kunde.nachname, buchung.ankunft, abreise
FROM kunde, buchung
WHERE kunde.nachname = 'Barth' AND kunde.knr = buchung.knr
BNR |
NACHNAME |
ANKUNFT |
ABREISE |
100 |
Barth |
13.11.1998 |
15.11.1998 |
110 |
Barth |
24.12.1998 |
06.01.1999 |
Angabe eines OUTER JOIN-Indikators
Beispieltabellen hotel, buchung
Liste aller Hamburger Hotels, zu denen Buchungen existieren und ebenfalls die, für die keine Buchung existiert: Der fehlende Eintrag einer Buchungsnummer wird mit einem NULL-Wert belegt.
SELECT hotel.hnr, hotel.name, buchung.bnr
FROM hotel, buchung
WHERE hotel.ort = 'Hamburg' AND hotel.hnr = buchung.hnr (+)
HNR |
NAME |
BNR |
40 |
Seestern |
? |
50 |
Strandhof |
120 |
80 |
Alpenblick |
100 |
80 |
Alpenblick |
140 |