SQL LEFT OUTER JOIN 外部結合のサンプル

SQLのleft outer joinのサンプルです。left joinとも呼ばれます。

目次

サンプル left outer join(左外部結合)
  on句の結合条件とwhere句の条件で絞る
  Oracleの場合 (+の記号)
  結合するテーブルが3つの場合
  テーブル3つでOracleの場合 (+の記号)
参考 right outer join(右外部結合)

left outer join(左外部結合)

select
   項目
from テーブルA
   left [outer] join テーブルB
on
   結合する条件
where
   抽出する条件
  • left outer joinは、テーブルAにあるすべての行と、テーブルAとテーブルBで結合する条件が一致したテーブルBの行を抽出します(図の黄色の部分)。
  • テーブルAのみにある行で、テーブルBのみにある列を表示するときは、NULLになります。
  • onの後に結合する条件を記述します。件数を絞る条件も追加できます。
  • whereは、結合されたデータ(※)に対して条件をつけて抽出します。
    (※オプティマイザにより結合前のデータを対象とする場合があります。)
  • left outer joinは、左外部結合と呼ばれます。left(左)のouter(外側)のjoin(結合)です。
  • outerは省略可能です。left joinとも呼ばれます。

left outer joinの使用例

次の2つのテーブルがあるとします。

salesテーブル
id price
1 300
2 400
3 200
productテーブル
id name
2 鉛筆
3 消しゴム
4 ノート

SQL

上記テーブルに対してleft outer joinを使用してデータを抽出します。

select 
  s.id,
  p.name,
  s.price
from sales s
  left outer join product p
on 
  s.id = p.id;

6行目は、left outer joinです。
8行目は、上記2つのテーブルにあるidを結合条件としています。

結果

結果は、以下のとおりです。

id name price
1 NULL 300
2 鉛筆 400
3 消しゴム 200

2,3行目は、上記SQLの8行目の条件に一致した行です。
1行目は、salesテーブルのみにある行です。salesテーブルにない列の「name」の値はNULLになります。

on句の結合条件とwhere句の条件で絞る

left outer joinのon句の結合条件とwhere句の条件で絞るサンプルです。

select 
  s.id,
  p.name,
  s.price
from sales s
  left outer join product p
on 
  s.id = p.id
where 
  s.price > 300;

9行目は、where句です。抽出する条件を指定しています。
where句で右側のテーブル(product)の項目を指定する場合は、値がnullの場合があるので注意が必要です。

Oracleの場合 (+の記号)

Oracleの場合、(+)の記号で外部結合できます。

select 
  s.id,
  p.name,
  s.price
from 
  sales s,
  product p
where
  s.id = p.id(+);

6,7行目は、left outer joinがありません。
9行目に(+)の記号があります。この場合(+)の記号のない方のsalesテーブルの行はすべて抽出されます。

 

結合するテーブルが3つの場合

次の3つのテーブルがあるとします。

salesテーブル
id price company_cd
1 300 101
2 400 201
3 200 301
productテーブル
id name
2 鉛筆
3 消しゴム
4 ノート
companyテーブル
id name
101 A社
201 B社

SQL

上記テーブルに対してleft outer joinを使用してデータを抽出します。

select 
  s.id,
  p.name,
  s.price,
  c.name as company
from 
  sales s 
   left outer join product p
   on 
     s.id = p.id
   left outer join company c
   on
     s.company_cd = c.id;

salesテーブルに対してproductテーブルとcompanyテーブルを外部結合しています。

結果

結果は、以下のとおりです。

id name price company
1 NULL 300 A社
2 鉛筆 400 B社
3 消しゴム 200 NULL

テーブル3つでOracleの場合 (+の記号)

テーブル3つでOracleの場合です。(+)の記号で外部結合できます。

select 
  s.id,
  p.name,
  s.price,
  c.name as company
from 
  sales2 s,
  product p,
  company c
where
  s.id = p.id(+) and
  s.company_cd = c.id(+);

7~9行目は、left outer joinはありません。
11,12行目に(+)の記号があります。
この場合(+)の記号のない方のsalesテーブルの行はすべて抽出されます。

right outer join(右外部結合)

select
   項目
from テーブルA
   right outer join テーブルB
on
   結合する条件
  • right outer joinは、テーブルBにあるすべての行と、テーブルAとテーブルBで結合する条件が一致したテーブルBの行を抽出します(図の黄色の部分)。
  • ほぼ使用されません。left outer joinが使用されます。
  • right outer joinは、右外部結合と呼ばれます。

right outer joinのサンプルです。

select 
  p.id,
  p.name,
  s.price
from sales2 s
  right outer join product p
on 
  s.id = p.id;

関連の記事

SQL INNER JOIN 内部結合のサンプル
SQL 自己結合のサンプル
SQL UNIONとUNION ALLのサンプル(結合して抽出)

△上に戻る