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.
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.
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 |
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, JOIN-Prädikat
(join_predicate)
Weitere Beispiele zur Datenanfrage