たとえば、受注と受注先の日付順リストが必要な場合に、Customers ID ではなく会社名を知りたいとします。次のようなジョインを使用して、この結果を得ることができます。
2001 年 1 月 1 日以降の受注 ID、日付、各注文を行った会社名をリストするには、次のクエリを実行します。
SELECT SalesOrders.ID, SalesOrders.OrderDate, Customers.CompanyName FROM SalesOrders KEY JOIN Customers WHERE OrderDate > '2001/01/01' ORDER BY OrderDate; |
次の SQL 文は、ジョインではなくサブクエリを使用して同じ結果を得ます。
SELECT SalesOrders.ID, SalesOrders.OrderDate, ( SELECT CompanyName FROM Customers WHERE Customers.ID = SalesOrders.CustomerID ) FROM SalesOrders WHERE OrderDate > '2001/01/01' ORDER BY OrderDate; |
SalesOrders テーブルがサブクエリの一部でない場合でも、サブクエリは SalesOrders テーブル内の CustomerID カラムを参照します。一方、SalesOrders.CustomerID カラムは SQL 文の本文にある SalesOrders テーブルを参照します。
他のテーブルから要求されるカラムが 1 つだけである場合は、ジョインの代わりにサブクエリを使用できます。サブクエリが返すことができるカラムは 1 つだけです。この例では CompanyName カラムだけを必要としていたので、ジョインをサブクエリに変更することができました。
ワシントン州在住の顧客名すべてとその顧客の最も最近の受注 ID をリストするには、次のクエリを実行します。
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) |
It's a Hit! という会社は何も注文しなかったので、サブクエリはこの顧客については NULL を返します。内部ジョインを使用した場合、発注しなかった会社はリストされません。
外部ジョインを明示的に指定することもできます。その場合は、次のように GROUP BY 句も指定する必要があります。
SELECT CompanyName, State, MAX( SalesOrders.ID ) FROM Customers KEY LEFT OUTER JOIN SalesOrders WHERE State = 'WA' GROUP BY CompanyName, State; |
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |