通常は、ジョイン条件を満たす場合のみローを返すジョインを作成します。これは内部ジョインと呼ばれ、クエリ時に使用されるデフォルトのジョインです。ただし、1 つのテーブルのすべてのローを保護したい場合があります。そのような場合は「外部ジョイン」を使用します。
2 つのテーブルの左または右の「外部ジョイン」を使用すると、一方のテーブルではすべてのローが保護され、他方のテーブルにはジョイン条件が満たされないときに NULL が入力されます。「左外部ジョイン」では、左側のテーブルのローがすべて保護され、「右外部ジョイン」では右側テーブルのローがすべて保護されます。「全外部ジョイン」では、両方のテーブルのローがすべて保護されます。
左外部ジョインまたは右外部ジョインのそれぞれの側のテーブル式は、「保護された」テーブル式と「NULL 入力」テーブル式と呼ばれます。左外部ジョインでは、左側のテーブル式が保護テーブル式で、右側のテーブル式は NULL 入力テーブル式です。
Transact-SQL 構文を使用した外部ジョインの作成については、Transact-SQL の外部ジョイン (*= or =*)を参照してください。
次の文にはすべての顧客が含まれます。顧客が注文していない場合には、注文情報に対応する結果のそれぞれのカラムに 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 |
... | ... | ... |
この文の外部ジョインは次のように解釈できます。ここで説明しているのは概念であり、SQL Anywhere が実際に結果セットを計算する過程を示すものではありません。
顧客からの発注ごとにローが 1 つ返されます。1 つの発注に対して 1 つのローが返されるため、顧客が 2 つ以上注文した場合には、ローも 2 つ以上返されます。これは内部ジョインの結果と同じです。ON 条件は、customer ローと sales order ローを一致させるために使用します。この手順では、WHERE 句は使用されません。
注文しなかったそれぞれの顧客のローが 1 行入ります。これにより、Customers テーブルのすべてのローが確実に含まれます。これらのすべてのローに対して、SalesOrders のカラムに NULL が挿入されます。キーワード OUTER が使用されているため、これらのローは追加されますが、内部ジョインには表示されません。この手順では ON 条件も WHERE 句も使用されません。
WHERE 句を使用して、New York 在住ではない顧客のローをすべて除外します。
外部ジョインとジョインの条件
複雑な外部ジョインについて
ビューと派生テーブルの外部ジョイン
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |