SQL でテーブル間を結合する方法まとめ(inner / left / right / full outer / union)
join は複数のテーブルを結合して表示させたいときに使う SQL 文です。本記事では join の種類と、似たような機能をもつ union について説明していきます。
説明をより分かりやすくするために以下の2つのテーブルを用いて説明を行います。

inner join
inner join(内部結合)は、指定した関連性のある要素を軸にして、テーブルを組み合わせてくれる命令です。どのように結合するかはon
のあとに記述し、結合の対象となるカラムについて
テーブル名1.カラム名1 = テーブル名2.カラム名2
の形式で指定します。

例として、id を関連性の要素として inner join をすると次の通りになります。
select
A.id AS A_id,
B.id AS B_id,
A.value AS A_value,
B.value AS B_value
from
Table_A
inner join
Table_B
on
A.id = B.id;

left join
left join では「関連性のある要素」が存在する場合にのみ表示のに対して、left join(左外部結合)は、関連性はなくとも左側(from 側)に存在するレコードも合わせて返します。また、右側のテーブルから一致するレコードを返します。

同様に結合条件をA.id = B.id
で指定して left join すると次の通りになります。
select
A.id AS A_id, B.id AS B_id,
A.value AS A_value, B.value AS B_value
from
Table_A
left join
Table_B
on
A.id = B.id;

right join
right join(右外部結合)は、left join の逆で、右側(join 側)のテーブルを軸に結合を行います。

select
A.id AS A_id, B.id AS B_id,
A.value AS A_value, B.value AS B_value
from
Table_A
right join
Table_B
on
A.id = B.id;

full outer join
full outer join(完全外部結合)は、両方のテーブルの一致したレコードと一致しないレコードすべてのレコードを返します。

select
A.id AS A_id, B.id AS B_id,
A.value AS A_value, B.value AS B_value
from
Table_A
full outer join
Table_B
on
A.id = B.id;

union
union は join と同様に、2 つ以上のリレーションのデータを結合するために使用されます。ただし、データと取得結果の形式を組み合わせる方法は異なります。join は 2 つのリレーションの 属性
を結合して新しいテーブルを形成しますが、union は 2 つの クエリの結果
を結合します。
union はunion
とunion all
の2種類があります。違いとして、union
は重複した行は出力しません。union
とunion all
の構文は以下の通りです。
slect
カラム名
from
テーブルA
union
select
カラム名
from
テーブルB
slect
カラム名
from
テーブルA
union all
select
カラム名
from
テーブルB
注意点として、それぞれの select 文の選択リスト(カラム名)の 列数
および データ型
は一致させる必要があります。列数やデータ型が違う場合はエラーとなります。
同様にid
で union をしてみると以下のようになります。
slect
id
from
Table A
union
select
id
from
Table B

slect
id
from
Table A
union all
select
id
from
Table B

union 重複した行を出力していないことが確認できます。
参考

備考
Hakky では社内のデータ活用やサービスとしてデータ提供を行うためのソリューションを展開しております。
「どんなことをお願いできるのか」「こんなことをやりたい」など、ご検討段階でも構いませんので、ぜひお気軽にフォームよりお問い合わせくださいませ。