はじめに
SQLでテーブル結合する動作についてまとめてみました。
サンプルテーブル
以下のテーブルを用いて説明していく
employeeテーブル
| id | name |
|---|---|
| 1 | 鈴木 |
| 2 | 高橋 |
| 3 | 木村 |
| 4 | 田口 |
departmentテーブル
| id | department_name |
|---|---|
| 1 | 開発部 |
| 2 | 営業部 |
| 5 | 人事部 |
データ流し込み用
オンラインのSQLエディタなどを使いお試しください
create table employee(id integer, name varchar(100));
insert into employee(id, name) values(1, "鈴木");
insert into employee(id, name) values(2, "高橋");
insert into employee(id, name) values(3, "木村");
insert into employee(id, name) values(4, "田口");
create table department(id integer, department_name varchar(100));
insert into department(id, department_name) values(1, "開発部");
insert into department(id, department_name) values(2, "営業部");
insert into department(id, department_name) values(5, "人事部");
INNER JOIN -内部結合-
INNER JOINは、結合するテーブルのデータのうち、条件に指定したカラムの値が一致するデータのみを結合します。
SELECT * FROM テーブルA INNER JOIN テーブルB ON 結合する条件 WHERE 抽出する条件;
サンプルテーブルでデータ抽出をする
SELECT * FROM employee INNER JOIN department ON employee.id = department.id;
id name id department_name
1 鈴木 1 開発部
2 高橋 2 営業部
idが一致しないものは除外される
LEFT OUTER JOIN -左外部結合-
LEFT OUTER JOINは、左側のテーブルを全て取り出し、その右側のテーブルのうち、条件に指定したカラムの値が一致するデータのみ結合します。なお、右側に結合するテーブルに一致するカラムが無い場合は、NULLが入ります。
-- テーブルAが左側のテーブル、テーブルBが右側のテーブルに当たる
SELECT * FROM テーブルA LEFT OUTER JOIN テーブルB ON 結合する条件 WHERE 抽出する条件;
サンプルテーブルでデータ抽出をする
SELECT * FROM employee LEFT OUTER JOIN department ON employee.id = department.id;
id name id department_name
1 鈴木 1 開発部
2 高橋 2 営業部
3 木村 NULL NULL
4 田口 NULL NULL
employeeテーブルのデータは全て出力されているが、idが一致しない4 田口のデータにはnullが入る
RIGHT OUTER JOIN -右外部結合-
RIGHT OUTER JOIN は、右側のテーブルを全て取り出し、その左側のテーブルのうち、条件に指定したカラムの値が一致するデータのみ結合します。なお、左側に結合するテーブルに一致するカラムが無い場合は、NULLが入ります。
-- テーブルBが右側のテーブル、テーブルAが左側のテーブルに当たる
SELECT * FROM テーブルA LEFT OUTER JOIN テーブルB ON 結合する条件 WHERE 抽出する条件;
サンプルテーブルでデータ抽出をする
SELECT * FROM employee RIGHT OUTER JOIN department ON employee.id = department.id;
id name id department_name
1 鈴木 1 開発部
2 高橋 2 営業部
NULL NULL 5 人事部
参考したもの
【INNER JOIN, LEFT JOIN , RIGHT JOIN】テーブル結合の挙動をまとめてみた【SQL】
SQLの基本とも言えるテーブル結合、その種類と使い方について解説