Angenommen, Sie benötigen eine chronologische Liste der Aufträge und die Angabe der Firma, die sie erteilt hat, doch Sie möchten den Firmennamen anstelle der Kunden-ID erhalten. Um dieses Ergebnis zu erhalten, verwenden Sie einen Join.
Um die Auftrags-ID, das Datum und den Firmennamen aller Aufträge seit Anfang 2001 aufzulisten, führen Sie folgende Abfrage aus:
SELECT SalesOrders.ID, SalesOrders.OrderDate, Customers.CompanyName FROM SalesOrders KEY JOIN Customers WHERE OrderDate > '2001/01/01' ORDER BY OrderDate; |
Folgende Anweisung liefert dasselbe Ergebnis, wenn sie anstelle eines Joins eine Unterabfrage verwendet:
SELECT SalesOrders.ID, SalesOrders.OrderDate, ( SELECT CompanyName FROM Customers WHERE Customers.ID = SalesOrders.CustomerID ) FROM SalesOrders WHERE OrderDate > '2001/01/01' ORDER BY OrderDate; |
Die Unterabfrage bezieht sich auf die Spalte "CustomerID" in der Auftragstabelle "SalesOrders", obwohl die Tabelle "SalesOrders" kein Bestandteil der Unterabfrage ist. Stattdessen bezieht sich die Spalte "SalesOrders.CustomerID" auf die Tabelle "SalesOrders" im Hauptteil der Anweisung.
Eine Unterabfrage kann immer dann anstelle eines Joins verwendet werden, wenn nur eine Spalte aus der anderen Tabelle benötigt wird. (Beachten Sie, dass Unterabfragen nur eine Spalte zurückgeben können.) In diesem Beispiel benötigen Sie nur die Spalte "CompanyName". Daher kann der Join in eine Unterabfrage geändert werden.
Um alle Kunden im US-Bundesstaat Washington zusammen mit ihren letzten Auftrags-IDs aufzulisten, führen Sie folgende Abfrage aus:
SELECT CompanyName, State, ( SELECT MAX( ID ) FROM SalesOrders WHERE SalesOrders.CustomerID = Customers.ID ) FROM Customers WHERE State = 'WA'; |
CompanyName | State | MAX(SalesOrders.ID) |
---|---|---|
Custom Designs | WA | 2547 |
It's a Hit! | WA | (NULL) |
Die Firma "It's a Hit!" hat keine Aufträge erteilt, und die Unterabfrage gibt für diesen Kunden NULL zurück. Firmen, die keine Aufträge erteilt haben, werden bei der Verwendung eines Inner-Joins nicht aufgelistet.
Sie können auch einen Outer-Join explizit festlegen. In diesem Fall ist eine GROUP BY-Klausel erforderlich.
SELECT CompanyName, State, MAX( SalesOrders.ID ) FROM Customers KEY LEFT OUTER JOIN SalesOrders WHERE State = 'WA' GROUP BY CompanyName, State; |
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 |