【図解】SQLでJOINを使う方法(OUTER・LEFT・RIGHT)
目次
JOINとは?
JOINを簡単に説明すると、テーブルとテーブルを結合することです。
あるキーを用いて、複数のテーブルを結合してあげます。
例えば、以下のような社員の所属部署が格納されたテーブルと
社員それぞれの年齢が格納されたテーブルがあるとします。
所属部署
社員ID | 社員名 | 部署 |
---|---|---|
1 | 田中 | 営業 |
2 | 山田 | 営業 |
3 | 清水 | 経理 |
4 | 高橋 | 経理 |
5 | 岩井 | 人事 |
6 | 村田 | 人事 |
社員の年齢
社員ID | 社員名 | 年齢 |
---|---|---|
1 | 田中 | 24 |
2 | 山田 | 35 |
3 | 清水 | 40 |
4 | 高橋 | 50 |
5 | 岩井 | 33 |
6 | 村田 | 29 |
結合してみる
結合するためには、結合キーが必要になります。
今回で言うと”社員ID”が結合するためのキーになります。
上の画像のように、"社員ID"を結合のキーとして用います。
こうすることで、2つのテーブルを結合し、1つのテーブルにすることができます。
JOINのSQLクエリ
イメージは、図解したとおりになりますが、
実際のSQLクエリは、どのようになるでしょうか。
今回の社員IDをキーとして、部署と年齢のテーブルを結合してみたいと思います。
SELECT 所属部署.社員ID, 所属部署.社員名, 所属部署.部署, 社員の年齢.年齢 FROM 所属部署 JOIN 社員の年齢 ON 所属部署.社員ID = 社員の年齢.社員ID
実行結果
社員ID | 社員名 | 部署 | 年齢 |
---|---|---|---|
1 | 田中 | 営業 | 24 |
2 | 山田 | 営業 | 35 |
3 | 清水 | 経理 | 40 |
4 | 高橋 | 経理 | 50 |
5 | 岩井 | 人事 | 33 |
6 | 村田 | 人事 | 29 |
さて、結合した結果はこのようになりました。
バラバラのテーブルに存在していた所属部署と社員の年齢のデータが、
1つのテーブルに格納されましたね。
このように、SQLを用いてテーブルを結合することができます。
結合にもいくつかの種類があるので、それぞれを説明していきたいと思います。
(INNER) JOIN
INNER JOIN(内部結合)は、それぞれのテーブルに
指定したキーが一致するものだけを結合します。
言葉ではなく、図を用いて説明していきましょう。
INNER JOINのクエリ
SELECT 所属部署.社員ID, 所属部署.社員名, 所属部署.部署, 社員の年齢.年齢 FROM 所属部署 (INNER)JOIN ※INNERは、書いても書かなくても同じ 社員の年齢 ON 所属部署.社員ID = 社員の年齢.社員ID
この一部分だけキーが存在するテーブルを結合すると、
一致しない部分は消えてしまい、結合できた部分だけ残ります。
実行結果
社員ID | 社員名 | 部署 | 年齢 |
---|---|---|---|
1 | 田中 | 営業 | 24 |
3 | 清水 | 経理 | 40 |
4 | 高橋 | 経理 | 50 |
5 | 岩井 | 人事 | 33 |
ポイント
- INNER JOINは、結合キーが一致するもののみ結合される
- 結合キーが一致しないものは、消えてしまう
LEFT JOIN
これは、文字通り「左側のテーブルに結合する」という意味です。
INNER JOINとの違いは、左側のテーブルをベースにするので、
キーが一致しない場合でも、左側のテーブルに存在する値は残ります。
早速、言葉よりも図でご説明しましょう。
LEFT JOINのクエリ
SELECT 社員の年齢.社員ID, 社員の年齢.社員名, 社員の年齢.年齢, 所属部署.部署 FROM 社員の年齢 LEFT JOIN 所属部署 ON 社員の年齢.社員ID = 所属部署.社員ID
LEFT JOINする際に、どちらにLEFT側のテーブルを記載するかと言うと、
以下の画像のように、最初に記載したほうがLEFTのテーブルになります。
LEFT JOINやRIGHT JOINを利用する際には、
テーブルの記載する順番には気をつけましょう!
RIGHT JOIN
RIHGT JOINは、LEFT JOINと処理が逆になります。
右側のテーブルに対して左側のテーブルをJOINします。
RIHGT JOINのクエリ
SELECT 社員の年齢.社員ID, 社員の年齢.社員名, 社員の年齢.年齢, 所属部署.部署 FROM 所属部署 RIHGT JOIN 社員の年齢 ON 社員の年齢.社員ID = 所属部署.社員ID
LEFT JOINもRIGHT JOINも書き方は、ほとんど変わりませんね。
JOINの前にLEFTかRIHGTを記載することで処理が異なります。
基本的にJOINしか記載しなかった場合は、INNER JOINになります。
LEFT RIGHTどっちから結合する?
さて、LEFT JOINの両方を解説してきました。
ここで1つ疑問があります。
LEFTとRIHGTどっちに結合すると良いでしょうか?
原則、大きいテーブルの方に結合させてください。
もし、LEFT側のテーブルが大きい場合は、LEFT JOINを使います。
逆にRIGHT側のテーブルが大きい場合は、RIGHT JOINを利用します。
細かな説明は割愛しますが、大きいテーブルに結合するほうが、
処理速度が早くなる可能性が高いからです。
そのため、JOINをする際には、どちらのテーブルが大きいか確認してから、 結合を行うようにしましょう。
参考文献
入門者の方に非常におすすめの本になります。
今回のような入門テーマをわかりやすく解説してくれており、
練習問題までたくさん用意されているので、
SQLの習得に有用ではないかと思います。
スッキリわかるSQL入門 第2版 ドリル222問付き! (スッキリシリーズ)
- 作者: 中山清喬,飯田理恵子,株式会社フレアリンク
- 出版社/メーカー: インプレス
- 発売日: 2018/11/30
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る