Anfang des Inhaltsbereichs

Diese Grafik wird im zugehörigen Text erklärt Joins: Informationen aus mehreren Tabellen Dokument im Navigationsbaum lokalisieren

Zur Beantwortung mancher Anfragen müssen mehrere Tabellen durchsucht werden. Die Verbindung zwischen diesen Tabellen wird über Spalten hergestellt, die in mehreren Tabellen erscheinen. Eine solche Anweisung wird als Join bezeichnet.

Voraussetzungen

Sie benötigen die Demo-Daten für das SQL-Tutorial.

Starten Sie das Query Tool SQL Studio als Datenbankadministrator MONA mit dem Kennwort RED und melden Sie sich an die Demo-Datenbankinstanz DEMODB an.

Beispiele

SELECT reservation.rno, customer.name, reservation.arrival, reservation.departure
  FROM hotel.customer, hotel.reservation
    WHERE customer.name =
'Porter'
      
AND customer.cno = reservation.cno

Anzeige, ob und wann für den Kunden Porter eine Buchung vorliegt.

Ergebnis

RNO

NAME

ARRIVAL

DEPARTURE

100

Porter

2004-11-13

2004-11-15

110

Porter

2004-12-24

2005-01-06

Die Verknüpfung der beiden Tabellen erfolgt über die Kundennummer, d.h. es werden nur die Zeilen ausgewählt, die den Name Porter enthalten und für die die Kundennummern übereinstimmen. Als Operatoren in der WHERE-Klausel sind =, <, <=, >, >= und <> möglich.

Die Gesamtergebniszeile wird aus den gewünschten Spalten der jeweiligen Tabelle zusammengesetzt. Wenn Spalten in zwei verschiedenen Tabellen denselben Namen haben, muss in der Anweisung vor dem Spaltennamen der Tabellenname angegeben werden, wobei beide durch einen Punkt verbunden werden.

 

SELECT customer.name, reservation.rno, hotel.name hotel_name
  FROM hotel.customer, hotel.reservation, hotel.hotel
    WHERE customer.name =
'Porter'
      AND customer.cno=reservation.cno
      AND reservation.hno = hotel.hno

Anzeige aller Hotels, die der Kunder Porter gebucht hat. Dazu müssen die Tabellen customer, reservation und hotel verkettet werden.

Ergebnis

NAME

RNO

HOTEL_NAME

Porter

100

Midtown

Porter

110

Beach

 

Outer-Join

Zunächst noch einmal ein Join-Beispiel:

 

SELECT hotel.name hotel_name, city.zip, city.name city_name
  FROM hotel.hotel, hotel.city
    WHERE city.state = 'CA' AND city.zip=hotel.zip

Anzeige der Städte des Staates CA, für die Hotels in der Hoteltabelle angegeben sind

Ergebnis

HOTEL_NAME

ZIP

CITY_NAME

Long Beach

90804

Long Beach

Star

90029

Hollywood

Indian Horse

92262

Palm Springs

 

Wenn Sie jetzt alle Städtenamen angezeigt bekommen wollen, unabhängig davon ob für diese Stadt ein Hotel angegeben ist, so können Sie einen Outer-Join verwenden.

Ein Outer-Join wird durch den Operator (+) gekennzeichnet.

 

SELECT hotel.name hotel_name, city.zip, city.name city_name
  FROM hotel.hotel, hotel.city
    WHERE city.state = 'CA' AND city.zip=hotel.zip (+)

Anzeige der Städte des Staates CA, für die Hotels in der Hoteltabelle angegeben sind

Ergebnis

HOTEL_NAME

ZIP

CITY_NAME

Long Beach

90804

Long Beach

Star

90029

Hollywood

Indian Horse

92262

Palm Springs

?

90018

Los Angeles

?

92714

Irvine

?

95054

Santa Clara

Es wird eine Liste aller Städte des Staates CA angezeigt. Für die Städte, für die es keine Hoteleinträge gibt, wird der Hotelname mit einem NULL-Wert belegt.

 

Siehe auch:

SQL-Referenzhandbuch, StrukturlinkJOIN-Prädikat (join_predicate)

Weitere Beispiele zur Datenanfrage

Ende des Inhaltsbereichs