SQLの外部結合のサンプルです。
left outer joinとright outer joinを使用します。
目次
左外部結合(left outer join)
| select 項目 from「テーブルA 」left outer join 「テーブルB」on 結合する条件 |
- left outer joinは、左外部結合と呼ばれます。
- left outer joinの前後に結合したいテーブルを記述します。
- onの後に結合する条件を記述します。
- 抽出する行は、「テーブルA」と「テーブルB」で条件が一致した行と
結合する条件に一致していない「テーブルA」にある全ての行です。 - 「テーブルA」のみにある行で、テーブルBのみにある列を表示するときは、NULLになります。
説明用のデータ
次の2つのテーブルがあるとします。
| user_id | name |
|---|---|
| 1 | 鈴木 |
| 2 | 田中 |
| user_cd | item_no |
|---|---|
| 1 | A001 |
| 1 | B001 |
| 99 | D001 |
SQL文
上記テーブルに対してleft outer joinを使用してデータを抽出します。
SELECT
u.user_id,u.name,s.user_cd,s.item_no
FROM users u
left outer join sales s
on u.user_id = s.user_cd;
4行目は、left outer joinです。
5行目は、上記2つのテーブルにあるuser_idとuser_cdを結合条件としています。
結果
結果は、以下のとおりです。
| user_id | name | user_cd | item_no |
|---|---|---|---|
| 1 | 鈴木 | 1 | A001 |
| 1 | 鈴木 | 1 | B001 |
| 2 | 田中 | Null | Null |
表の1,2行目は、上記SQLの5行目の条件に一致した行です。
表の3行目は、usersテーブルのみにある行です。usersテーブルにない項目の「user_cd」と「item_no」はNULLになります。
salesテーブルにあるuser_cd=99の行は抽出されません。
右外部結合(right outer join)
| select 項目 from「テーブルA」right outer join「テーブルB」on 結合する条件 |
- right outer joinは、右外部結合と呼ばれます。
- right outer joinの前後に結合したいテーブルを記述します。
- onの後に結合する条件を記述します。
- 抽出する行は、「テーブルA」と「テーブルB」で条件が一致した行と
結合する条件に一致していない「テーブルB」にある全ての行です。 - 「テーブルB」のみにある行で、テーブルAのみにある列を表示するときは、NULLになります。
説明用のデータ
次の2つのテーブルがあるとします。
| user_id | name |
|---|---|
| 1 | 鈴木 |
| 2 | 田中 |
| user_cd | item_no |
|---|---|
| 1 | A001 |
| 1 | B001 |
| 99 | D001 |
SQL文
上記テーブルに対してright outer joinを使用してデータを抽出します。
SELECT
u.user_id,u.name,s.user_cd,s.item_no
FROM users u
right outer join sales s
on u.user_id = s.user_cd;
4行目は、right outer joinです。
5行目は、上記2つのテーブルにあるuser_idとuser_cdを結合条件としています。
結果
結果は、以下のとおりです。
| user_id | name | user_cd | item_no |
|---|---|---|---|
| 1 | 鈴木 | 1 | A001 |
| 1 | 鈴木 | 1 | B001 |
| NULL | NULL | 99 | D001 |
表の1,2行目は、上記SQLの5行目の条件に一致した行です。
表の3行目は、salesテーブルのみにある行です。salesテーブルにない項目の「user_id」と「name」はNULLになります。
usersテーブルにある"田中"の行は抽出されません。
関連の記事
SQL INSERT文のサンプル
SQL UPDATE文とDELETE文のサンプル
SQL 重複行を表示しないサンプル(distinct)
SQL 複数の行をまとめる(集約関数/group by/having)
SQL 副問合せのサンプル(サブクエリ)
SQL 自己結合のサンプル
SQL 内部結合のサンプル(inner join)
SQL UNIONとUNION ALLのサンプル