目次
外部結合とは
どちらかのテーブルにデータがあれば取り出す のが外部結合です。
つまり片方のテーブルの情報が全て出力されます。
そのため外部結合は、欠落のあるデータを取り扱う結合といえます。
※ 両方のテーブルにあるデータのみを取り出す のが内部結合です。
2つのテーブルにあって、合体できるデータのみを取り出します。
基本構文 ( left outer join )
【 left outer join 】左側(from句で最初に書いたテーブル)をマスターとします。
1 2 3 4 5 6 7 8 9 10 |
select テーブル名1.列名, テーブル名2.列名, ... from テーブル名1 left outer join テーブル名2 on テーブル名1.列名 = テーブル名2.列名; |
例題:以下の構文の時に基準となるテーブルは device table です。出力結果について考えてみましょう。
構文
1 2 3 4 |
select * from device left outer join owners on device.owner_id = owners.id; |
利用デバイステーブル(device table)
id | name | owner_id |
---|---|---|
1 | macbookpro13 | 1 |
2 | iPad11 | 1 |
3 | iPhoneSE | 2 |
4 | iPhone11 | 4 |
5 | surface | 1 |
持ち主テーブル(owners table)
id | name |
---|---|
1 | tanaka |
2 | yamada |
3 | sato |
結果は以下のようになります。
left outer join なので、device table を基準にします。
- device table からデータ全件を取得します。
- device table の owner_id がowners table の id と一致するデータを取得します。
- owners table にないデータは、 null としてテーブルを結合します。
id | name | owner_id | id | name |
---|---|---|---|---|
1 | macbookpro13 | 1 | 1 | tanaka |
2 | iPad11 | 1 | 1 | tanaka |
3 | iPhoneSE | 2 | 2 | yamada |
4 | iPhone11 | 4 | null | null |
5 | surface | 1 | 1 | tanaka |
基本構文 ( right outer join )
【 right outer join 】右側(from句で後に書いたテーブル)をマスターとします。
1 2 3 4 5 6 7 8 9 10 |
select テーブル名1.列名, テーブル名2.列名, ... from テーブル名1 right outer join テーブル名2 on テーブル名1.列名 = テーブル名2.列名; |
例題:以下の構文の時に基準となるテーブルは owners table です。出力結果について考えてみましょう。
構文
1 2 3 4 |
select * from device right outer join owners on device.owner_id = owners.id; |
利用デバイステーブル(device table)
id | name | owner_id |
---|---|---|
1 | macbookpro13 | 1 |
2 | iPad11 | 1 |
3 | iPhoneSE | 2 |
4 | iPhone11 | 4 |
5 | surface | 1 |
持ち主テーブル(owners table)
id | name |
---|---|
1 | tanaka |
2 | yamada |
3 | sato |
結果は以下のようになります。
right outer join なので、owners table を基準にします。
- owners table からデータ全件を取得します。
- owners table の id が device table の owner_id と一致するデータを取得します。
- device table にないデータは、 null としてテーブルを結合します。
id | name | owner_id | id | name |
---|---|---|---|---|
1 | macbookpro13 | 1 | 1 | tanaka |
2 | iPad11 | 1 | 1 | tanaka |
5 | surface | 1 | 1 | tanaka |
3 | iPhoneSE | 2 | 2 | yamada |
null | null | null | 3 | sato |