SQL 外部結合


SQL SELECT
SQL DISTINCT
SQL WHERE
SQL AND OR
SQL IN
SQL BETWEEN
SQL LIKE
SQL ORDER BY
SQL 関数
SQL COUNT
SQL GROUP BY
SQL HAVING
SQL 別名
SQL 結合
SQL 外部結合
SQL SUBQUERY
SQL UNION
SQL UNION ALL
SQL INTERSECT
SQL MINUS
SQL CONCATENATE
SQL SUBSTRING
SQL TRIM


サイトのご案内

  SQL > SQL コマンド > Outer Join

上述したのは左結合 (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になります。

SQL Subquery >>