Normalerweise erstellen Sie Joins, die Zeilen nur zurückgeben, wenn sie Join-Bedingungen erfüllen. Diese werden als Inner-Joins bezeichnet und bilden die Standard-Joins bei Abfragen. Manchmal möchten Sie aber vielleicht alle Zeilen in einer Tabelle behalten. Dies können Sie mithilfe eines Outer-Joins erreichen.
In einem Left- oder Right-Outer-Join zweier Tabellen werden alle Zeilen einer der Tabellen beibehalten, und für Zeilen der anderen Tabelle, die die Join-Bedingung nicht erfüllen, wird NULL zurückgegeben. Ein Left-Outer-Join bewahrt jede Zeile in der linken Tabelle, und ein Right-Outer-Join bewahrt jede Zeile in der rechten Tabelle. In einem vollständigen Outer-Join werden alle Zeilen aus beiden Tabellen beibehalten.
Die Tabellenausdrücke auf einer Seite eines Left- oder Right-Outer-Join werden als bewahrt und Nullwert-liefernd bezeichnet. In einem Left-Outer-Join wird der Ausdruck der linken Tabelle beibehalten und die rechte Tabelle gibt NULL zurück.
Hinweise über das Erstellen von Outer-Joins mit der Transact-SQL-Syntax finden Sie unter Transact-SQL-Outer-Joins (*= oder =*).
Die folgende Anweisung umfasst alle Kunden. Wenn ein bestimmter Kunde keine Bestellung aufgegeben hat, enthält jede Spalte im Ergebnis, die sich auf die Bestelldaten bezieht, NULL.
SELECT Surname, OrderDate, City FROM Customers LEFT OUTER JOIN SalesOrders ON Customers.ID = SalesOrders.CustomerID WHERE Customers.State = 'NY' ORDER BY OrderDate; |
Surname | OrderDate | City |
---|---|---|
Thompson | (NULL) | Bancroft |
Reiser | 2000-01-22 | Rockwood |
Clarke | 2000-01-27 | Rockwood |
Mentary | 2000-01-30 | Rockland |
... | ... | ... |
Sie können den Outer-Join in dieser Anweisung wie folgt interpretieren. Hinweis: Es handelt sich hierbei um eine konzeptuelle Erklärung, die nicht darstellt, wie SQL Anywhere die Ergebnismenge tatsächlich ermittelt.
Für jede von einem Kunden aufgegebene Bestellung wird eine Zeile zurückgegeben. Wenn der Kunde zwei oder mehr Bestellungen aufgegeben hat, werden mehrere Zeilen zurückgegeben, da für jede Bestellung eine Zeile zurückgegeben wird. Dies ist dasselbe Ergebnis wie bei einem Inner-Join. Die ON-Bedingung wird verwendet, um Kunden- und Bestellungszeilen in Übereinstimmung zu bringen. Die WHERE-Klausel wird für diesen Schritt nicht verwendet.
Für jeden Kunden, der keine Bestellungen aufgegeben hat, wird eine Zeile einbezogen. Damit wird sichergestellt, dass jede Zeile aus der Tabelle "Customers" enthalten ist. Für alle diese Zeilen werden die Spalten aus "SalesOrders" mit NULL gefüllt. Diese Zeilen werden hinzugefügt, weil das Schlüsselwort OUTER verwendet wird, sie wären in einem Inner-Join nicht enthalten gewesen. Weder die ON-Bedingung noch die WHERE-Klausel wird für diesen Schritt verwendet.
Mithilfe der WHERE-Klausel werden alle Zeilen von Kunden ausgeschlossen, die nicht in New York leben.
Outer-Joins und Join-Bedingungen
Komplexe Outer-Joins
Outer-Joins von Ansichten und abgeleiteten Tabellen
Kommentieren Sie diese Seite in DocCommentXchange. Senden Sie uns Feedback über diese Seite via E-Mail. |
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |