Im vorhergehenden Abschnitt haben wir uns mit dem linken oder inneren Verbund beschäftigt, bei dem Zeilen ausgewählt werden, die den verknüpften Tabellen gemeinsam sind. Nun könnten wir aber auch an Elementen in einer Tabelle interessiert sein, die sich nicht unbedingt in der zweiten Tabelle befinden. In diesem Fall müssen wir den Befehl SQL OUTER JOIN verwenden.
Die Syntax für die Verknüpfung als äußerer Verbund in SQL ist datenbankabhängig. In Oracle zum Beispiel platzieren wir ein "(+)" in der WHERE-Klausel auf der anderen Seite der Tabelle, für die alle Zeilen mitaufgenommen werden sollen.
Nehmen wir an, es liegen die folgenden zwei Tabellen vor,
Tabelle Store_Information
| store_name |
Sales |
Date |
| Los Angeles |
1500€ |
05.Jan.1999 |
| San Diego |
250€ |
07.Jan.1999 |
| Los Angeles |
300€ |
08.Jan.1999 |
| Boston |
700€ |
08.Jan.1999 |
Tabelle Geography
| region_name |
store_name |
| East |
Boston |
| East |
New York |
| West |
Los Angeles |
| West |
San Diego |
und wir möchten den Umsatz für alle Warenhäuser ermitteln. Bei einem regulären Verbund wäre dies nicht möglich, denn es würde das Warenhaus "New York" fehlen, das in der Tabelle Store_Information nicht enthalten ist. Wir müssen daher die zwei Tabellen zu einem äußeren Verbund kombinieren.
SELECT A1.store_name, SUM(A2.Sales) SALES
FROM Geography A1, Store_Information A2
WHERE A1.store_name = A2.store_name (+)
GROUP BY A1.store_name
Beachten Sie, dass wir im vorliegenden Fall die Oracle-Syntax verwenden.
Ergebnis:
| store_name |
SALES |
| Boston |
700€ |
| New York |
|
| Los Angeles |
1800€ |
| San Diego |
250€ |
Hinweis: NULL wird ausgegeben, wenn es keine Entsprechung in der zweiten Tabelle gibt. Im vorliegenden Fall ist "New York" nicht in der Tabelle Store_Information enthalten, weshalb die entsprechende Spalte "UMSATZ" den Inhalt NULL hat.