・結合とは
SQLには複数のテーブルを結合させて、そのデータの取得または取得したデータを結合することができる。・INNER JOIN
INNER JOINとは内部結合のことで、2つのテーブルでカラムを指定してそれぞれのカラムに同じ値が格納されているデータを結合して取得するものである。使うテーブル
スタッフテーブル
ID | 名前 | 部署ID |
---|---|---|
1 | 邦田さん | 1 |
2 | 網代さん | 3 |
3 | 雁切さん | 2 |
4 | 錦木さん | 3 |
5 | 吉田さん | 7 |
6 | 蟹佐原さん | 4 |
部署テーブル
部署ID | 部署名 |
---|---|
1 | 営業部 |
2 | 経理部 |
3 | 開発部 |
4 | 法務部 |
・やりかた
SELECT * FROM スタッフテーブル INNER JOIN 部署テーブル ON スタッフテーブル.部署ID = 部署テーブル.部署ID
とすると
ID | 名前 | 部署ID | ID | 部署名 |
---|---|---|---|---|
1 | 邦田さん | 1 | 1 | 営業部 |
2 | 網代さん | 3 | 3 | 開発部 |
3 | 雁切さん | 2 | 2 | 経理部 |
4 | 錦木さん | 3 | 3 | 開発部 |
6 | 蟹佐原さん | 4 | 4 | 法務部 |
とこのように2つのテーブルを結合させることができる。片方のテーブルにデータのないものは結合されない(今回の場合は、吉田さんは部署ID'7'を持っているが部署テーブルにはそのIDが存在しないため取り除かれている)
・結合するカラム名がテーブル間で同じ場合
スタッフテーブル
ID | 名前 | 部署ID |
---|---|---|
1 | 邦田さん | 1 |
2 | 網代さん | 3 |
3 | 雁切さん | 2 |
4 | 錦木さん | 3 |
5 | 吉田さん | 7 |
6 | 蟹佐原さん | 4 |
部署テーブル
部署ID | 名前 |
---|---|
1 | 営業部 |
2 | 経理部 |
3 | 開発部 |
4 | 法務部 |
5 | IT部 |
上のような2つのテーブルが名前という同じカラム名を持っている場合はUSING
を使う。
SELECT * FROM スタッフテーブル INNER JOIN 部署テーブル USING(ID)
とすると
部署ID | ID | 名前 | 名前 |
---|---|---|---|
1 | 1 | 邦田さん | 営業部 |
3 | 2 | 網代さん | 開発部 |
2 | 3 | 雁切さん | 経理部 |
3 | 4 | 錦木さん | 開発部 |
4 | 6 | 蟹佐原さん | 法務部 |
となる。
・LEFT JOIN, RIGHT JOIN
LEFT JOIN, RIGHT JOINとは外部結合の事で、内部結合とほとんど同じであるが、異なる点として一致しないデータも取得する。・LEFT JOINの場合
SELECT * FROM スタッフテーブル LEFT JOIN 部署テーブル ON スタッフテーブル.部署ID = 部署テーブル.部署ID
ID | 名前 | 部署ID | ID | 部署名 |
---|---|---|---|---|
1 | 邦田さん | 1 | 1 | 営業部 |
2 | 網代さん | 3 | 3 | 開発部 |
3 | 雁切さん | 2 | 2 | 経理部 |
4 | 錦木さん | 3 | 3 | 開発部 |
6 | 蟹佐原さん | 4 | 4 | 法務部 |
5 | 吉田さん | 7 | NULL | NULL |
・RIGHT JOINの場合
SELECT * FROM スタッフテーブル RIGHT JOIN 部署テーブル ON スタッフテーブル.部署ID = 部署テーブル.部署ID
ID | 名前 | 部署ID | ID | 部署名 |
---|---|---|---|---|
1 | 邦田さん | 1 | 1 | 営業部 |
2 | 網代さん | 3 | 3 | 開発部 |
3 | 雁切さん | 2 | 2 | 経理部 |
4 | 錦木さん | 3 | 3 | 開発部 |
6 | 蟹佐原さん | 4 | 4 | 法務部 |
NULL | NULL | NULL | 5 | IT部 |
・NATURAL
NATURALとは自然結合のことで、同じ名前のカラムを結合する場合、NATURALをつけることによって結合条件を省略することができる。・CROSS JOIN
CROSS JOINとは、交差結合のことで、2つのテーブルのデータをすべて組み合わせることができる。SELECT * FROM スタッフテーブル CROSS JOIN 部署テーブル
【参考】
JavaDrive
https://www.javadrive.jp/mysql/join/