0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Join(inner join)とLeft Joinの違い

Last updated at Posted at 2020-05-18

Join(内部結合)とLeft Join(外部結合)の違い

目次

背景

面接でタイトルの質問をされたので、覚えるためにまとめます。

結論

Join(内部結合)

どちらか一方のテーブルになければ複製されず表示されない。

Left Join(外部結合)

左の行は強制的に全て表示し、右テーブルには全ての値がNULLである行を生成して結合する

 検証1.Join

例えば、以下のテーブルがあったとします。

usersテーブル

|id|name|
|---|---|---|
|1 | Bob |
2 | Alan |
3 | James |

postsテーブル

id body user_id
1 Hello 3
2 Hi 1
3 Good 2
4 Why? 2

現状では、idが2のuserが一つに対し、user_idが2のpostが二つあります.
ここでjoin(内部結合)を使って結合してみます.

SELECT *
FROM users -- 結合元の左テーブル
JOIN posts -- 結合先の右テーブル
ON users.id = posts.user_id -- 左テーブルのidと右テーブルのidが一致するもの

id name id body user_id
3 James 1 Hello 3
1 Bob 2 Hi 1
2 Alan 3 Good 2
2 Alan 4 Why? 2

usersテーブルの行が一つ増えます.
右テーブルに繋ぐべき行が複数ある場合、左テーブルの行を複製して結合します。

もし、右テーブルにつなぐべき行がない場合は、表示されません

表示されない例

usersテーブル

|id|name|
|---|---|---|
|1 | Bob |
| 2 | Alan |
| 3 | James |
| 4 | Tony |

postsテーブル

id body user_id
1 Hello 3
2 Hi 1
3 Good 2
4 Why? 2

結果

id name id body user_id
3 James 1 Hello 3
1 Bob 2 Hi 1
2 Alan 3 Good 2
2 Alan 4 Why? 2

検証2.Left Join

Left Joinは左の行は強制的に全て表示し、右テーブルには全ての値がNULLである行を生成して結合します.

例えばid:4 TonyのPostレコードはないため,内部結合では表示されませんでした.
しかし Left Joinでは表示されていることがわかります.

usersテーブル

|id|name|
|---|---|---|
|1 | Bob |
| 2 | Alan |
| 3 | James |
| 4 | Tony |

postsテーブル

id body user_id
1 Hello 3
2 Hi 1
3 Good 2
4 Why? 2

結果

id name id body user_id
3 James 1 Hello 3
1 Bob 2 Hi 1
2 Alan 3 Good 2
4 Tony NULL NULL NULL

同じように外部結合の中でもRight Joinと呼ばれるものもあるのですが、
Right Joinは右の行は強制的に全て表示し、左テーブルには全ての値がNULLである行を生成して結合します.

学んだこと

  1. Join(内部結合)は左テーブルと右テーブルで一致する要素のみ表示する
  2. Left Join(外部結合)は左テーブルにある全ての行を表示し,右テーブルにNULLのレコードを生成する
0
2
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
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?