Anfang des InhaltsbereichsJOIN-Prädikat (join_predicate) Dokument im Navigationsbaum lokalisieren

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_op

Erlä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
Tabellenausdruck nur genau zwei Tabellen zugrundeliegen, kann für beide Tabellen sichergestellt werden, daß jede Zeile mindestens einmal in der Ergebnistabelle enthalten ist.

Das JOIN-Prädikat ist ein Spezialfall des Vergleichsprädikats. Die Anzahl der JOIN-Prädikate in einer Suchbedingung ist auf 128 beschränkt.

Beispiel

JOIN-Prädikat

Beispieltabellen kunde, buchung

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

Ende des Inhaltsbereichs