Anfang des Inhaltsbereichs

JOIN-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:

·        Nur für eine der in der FROM-Klausel angegebenen Tabellen werden OUTER JOIN-Indikatoren angegeben.

·        Alle JOIN-Prädikate dieser Tabelle zu genau einer anderen Tabelle enthalten jeweils den OUTER JOIN-Indikator.

·        Alle anderen JOIN-Prädikate enthalten keinen OUTER JOIN-Indikator.

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 customer, reservation

Liegt für den Kunden 'Porter' eine Buchung vor? Wenn ja, wann?

SELECT reservation.rno, customer.name,customer.firstname, reservation.arrival, departure

FROM customer, reservation

WHERE customer.name = 'Porter' AND customer.cno = reservation.cno

RNO

NAME

FIRSTNAME

ARRIVAL

DEPARTURE

100

Porter

Jenny

13/11/2001

15/11/2001

110

Porter

Jenny

24/12/2001

06/01/2002

120

Porter

Martin

14/11/2001

18/11/2002

Angabe eines OUTER JOIN-Indikators

Beispieltabellen hotel, reservation

Liste aller Hotels in Los Angeles, 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.hno, hotel.name, reservation.rno

FROM hotel, reservation

WHERE hotel.city = 'Los Angeles' AND hotel.hno = reservation.hno (+)

HNO

NAME

RNO

80

Midtown

100

50

Lake Michigan

120

80

Midtown

140

120

Sunshine

180

40

Eigth Avenue

?

 

Ende des Inhaltsbereichs