LoginSignup
0
0

More than 1 year has passed since last update.

SQL 結合編

Last updated at Posted at 2023-01-10

・結合とは

 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/

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0