上述したのは左結合 (left join)と呼ばれ、内部結合 (inner join)とも言われます。そのような場合、二テーブルの中に一致する値があってから、当該データが読み込まれます。では、一方のテーブルにあるデータの値が、他方のテーブルに一つも現われない場合、どうしますか。その場合、 SQL OUTER JOIN (外部結合)コマンドを使います。
外部結合のプログラミングは、データベースにより異なります。例えば、Oracleでは、 テーブル内のデータがすべて必要であることを表すために、 WHERE 句で読み込まれたあらゆるテーブルの後に "(+)" を付けます。
仮に、以下の二つのテーブルがあるとします。
Store_Information テーブル
| store_name |
Sales |
Date |
| Los Angeles |
$1500 |
Jan-05-1999 |
| San Diego |
$250 |
Jan-07-1999 |
| Los Angeles |
$300 |
Jan-08-1999 |
| Boston |
$700 |
Jan-08-1999 |
Geography テーブル
| region_name |
store_name |
| East |
Boston |
| East |
New York |
| West |
Los Angeles |
| West |
San Diego |
それぞれの店の売上を調べることにします。もし、一般の結合を利用した場合、 Store_Information テーブルに存在しない'New York'といった店のデータが漏れてしまいます。だから、そのような場合、外部結合により、このテーブルを結合します。
SELECT A1.store_name, SUM(A2.Sales) SALES
FROM Geography A1, Store_Information A2
WHERE A1.store_name = A2.store_name (+)
GROUP BY A1.store_name
ここに使われた Oracleの外部結合のプログラミングは次の通り。
の結果ができます。
| store_name |
SALES |
| Boston |
$700 |
| New York |
|
| Los Angeles |
$1800 |
| San Diego |
$250 |
注意: 二つ目のテーブルに対応のデータがない場合、SQL から NULL 值が入ります。 この例において、 'New York'が Store_Information テーブルに存在しないので、その "SALES" フィールドがNULLになります。