外部結合を使用すると指定した列のデータがテーブルのどちらか一方にしかないレコードも抽出することができます. 外部結合には左外部結合,右外部結合,完全外部結合があります.
左外部結合は結合する列のデータを基準として,左側の表の内容をすべて抽出し,右側の表の内容は左側の表の内容と一致するもののみ抽出する結合です. 左外部結合を使用するにはLEFT OUTERE JOINを使用します.
SELECT 列名1, 列名2, ...
FROM テーブル名1 LEFT [OUTER] JOIN テーブル名2
ON テーブル名1.列名 = テーブル名2.列名
[WHERE 条件式など]
LEFT OUTER JOINで結合するテーブルを指定し,どの列をキーにして結合するかをON句で指定します.なお,OUTERは省略可能です.
サンプルに移動
右外部結合は左外部結合の反対です.すなわち結合する列のデータを基準として,右側の表の内容をすべて抽出し,左側の表の内容は左側の表の内容と一致するもののみ抽出します.右外部結合を使用するにはRIGHT OUTERE JOINを使用します.
SELECT 列名1, 列名2, ...
FROM テーブル名1 RIGHT [OUTER] JOIN テーブル名2
ON テーブル名1.列名 = テーブル名2.列名
[WHERE 条件式など]
RIGHT OUTER JOINで結合するテーブルを指定し,どの列をキーにして結合するかをON句で指定します.なお,OUTERは省略可能です.
サンプルに移動
完全外部結合は2つのテーブルそれぞれに一致しないレコードも抽出結果に含めます. 完全外部結合を使用するにはFULL OUTER JOINを使用します.
SELECT 列名1, 列名2, ...
FROM テーブル名1 FULL OUTER JOIN テーブル名2
ON テーブル名1.列名 = テーブル名2.列名
[WHERE 条件式など]
FULL OUTER JOINで結合するテーブルを指定し,どの列をキーにして結合するかをON句で指定します.
サンプルに移動
外部結合をまとめると以下のようになります.
外部結合 | SQL | 省略形 |
---|---|---|
左外部結合 | LEFT OUTER JOIN | LEFT JOIN |
右外部結合 | RIGHT OUTER JOIN | RIGHT JOIN |
完全外部結合 | FULL OUTER JOIN | - |
例として売上伝票と商品マスタを商品コードをキーにして結合します.
売上明細
伝票番号 | 商品コード |
---|---|
01-101 | A001 |
01-102 | A002 |
01-103 | B002 |
01-104 | D001 |
商品
商品コード | 商品名 |
---|---|
A001 | 冷蔵庫 |
A002 | 洗濯機 |
B001 | エアコン |
B002 | 空気清浄機 |
C001 | 液晶テレビ |
SQL
SELECT 売上明細.伝票番号, 商品.商品コード, 商品.商品名
FROM 売上明細 LEFT OUTER JOIN 商品
ON 売上明細.商品コード = 商品.商品コード
結果
伝票番号 | 商品コード | 商品名 |
---|---|---|
01-101 | A001 | 冷蔵庫 |
01-102 | A002 | 洗濯機 |
01-103 | B002 | 空気清浄機 |
01-104 | D001 | <NULL> |
SQL
SELECT 売上明細.伝票番号, 商品.商品コード, 商品.商品名
FROM 売上明細 RIGHT OUTER JOIN 商品
ON 売上明細.商品コード = 商品.商品コード
結果
伝票番号 | 商品コード | 商品名 |
---|---|---|
01-101 | A001 | 冷蔵庫 |
01-102 | A002 | 洗濯機 |
<NULL> | B001 | エアコン |
01-103 | B002 | 空気清浄機 |
<NULL> | C001 | 液晶テレビ |
SQL
SELECT 売上明細.伝票番号, 商品.商品コード, 商品.商品名
FROM 売上明細 FULL OUTER JOIN 商品
ON 売上明細.商品コード = 商品.商品コード
結果
伝票番号 | 商品コード | 商品名 |
---|---|---|
01-101 | A001 | 冷蔵庫 |
01-102 | A002 | 洗濯機 |
<NULL> | B001 | エアコン |
01-103 | B002 | 空気清浄機 |
<NULL> | C001 | 液晶テレビ |
01-104 | D001 | <NULL> |