0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

SQL #4 【JOIN】

Posted at

JOINとは

JOIN とはその名の通り結合です。複数のテーブルをまとめて、そこから検索を行います。

本来 FROM で指定したテーブルからのみデータを検索しますが、JOIN を使用することにより複数のデータを扱うことができます。

データの準備

membersテーブル

id name age team_id
1 Yamamoto 20 1
2 Sato 25 3
3 Yamada 16 2
4 Tanaka 35 1
5 Kato 42 4

teamsテーブル

id team_name
1 BLUE
2 GREEN
3 RED

INNER JOIN(内部結合)

複数のテーブルを共通のキーで結びつけて、両方のテーブルに存在するデータだけを結合します。

基本構文

SELECT カラム名1, カラム名2, ... FROM テーブル名1
  INNER JOIN テーブル名2 ON 結合の条件;
  1. テーブル1からカラム1、カラム2を取得
  2. 結合の条件に従ってテーブル2からも取得
  3. 結合

具体例

SELECT * FROM members
  INNER JOIN teams ON members.team_id = teams.id;
  1. membersテーブルから全てのカラムを取得し、
  2. membersテーブルの team_id と teamsテーブルの id を対応させた状態で、
  3. teamsテーブルを結合

実行結果

id name age team_id id team_name
1 Yamamoto 20 1 1 BLUE
2 Sato 25 3 3 RED
3 Yamada 16 2 2 GREEN
4 Tanaka 35 1 1 BLUE

membersテーブルのKatoはどこへ?
Katoの team_id は 4 だが、teamsテーブルの id に 4 は存在しません!
内部結合では、条件にマッチするレコードがないものは、結果セットから外れます。
→ だから Kato は表示されなかったのです。

OUTER JOIN(外部結合)

内部結合のようにそれぞれのテーブルの指定したカラムの値が一致するものを結合するのに加え、結合条件に一致しない行も含めて結果に出すことができます。

基本構文

SELECT カラム名1, カラム名2, ... FROM テーブル名1
  LEFT(RIGHT) JOIN テーブル名2 ON 結合の条件;
  • LEFT JOIN : 左側のテーブルを軸にして結合
  • RIGHT JOIN : 右側のテーブルを軸にして結合

具体例

SELECT * FROM members
  LEFT JOIN teams ON members.team_id = teams.id;

実行結果

id name age team_id id team_name
1 Yamamoto 20 1 1 BLUE
2 Sato 25 3 3 RED
3 Yamada 16 2 2 GREEN
4 Tanaka 35 1 1 BLUE
5 Kato 42 4 NULL NULL

Katoが結果セットに含まれている!
内部結合では表示されなかった Kato が、外部結合では表示されています。
外部結合では、結合条件に一致しない側のカラムには NULL が入る

おまけ

OUTER JOINには LEFT, RIGHTの他に FULL があるが、実行環境によっては非対応の場合もあるので注意が必要です。

まとめ

  • JOIN は 複数のテーブルを結合するもの
  • INNER JOIN は結合条件に一致するもののみ結果セットに含む
  • OUTER JOIN は内部結合の働きに加え、一致しない場合は NULL として結果セットに含む

参考文献

SQLのJOINを完全に理解する
SQL素人でも分かるテーブル結合(inner joinとouter 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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?