Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (日本語) » SQL Anywhere サーバ - SQL の使用法 » データのクエリと変更 » ジョイン:複数テーブルからのデータ検索 » 内部ジョインと外部ジョイン

 

外部ジョイン

通常は、ジョイン条件を満たす場合のみローを返すジョインを作成します。これは内部ジョインと呼ばれ、クエリ時に使用されるデフォルトのジョインです。ただし、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 在住ではない顧客のローをすべて除外します。


外部ジョインとジョインの条件
複雑な外部ジョインについて
ビューと派生テーブルの外部ジョイン