5
1

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 1 year has passed since last update.

MySQLのLEFT JOIN(INNER JOIN, RIGHT JOIN, LEFT OUTER JOIN)が何者か調べてみたのでメモのすけ

Last updated at Posted at 2023-10-26

どうもこんにちは。

今回は業務内でMySQLを使用して、LEFT JOINというコードが何者かわからず勉強したのでメモします。

LEFT JOINって何?

そもそも、JOINがSQLでいうと「結合」という意味らしいです。

要するに、二つのテーブルを結合するということですかね。

LEFT JOINのコードを作成すると以下のようになります。

SELECT *
FROM table1
LEFT JOIN table2 ON table1.id = table2.id;

何をやっているかわからないので例を出します。以下の二つのテーブルが存在します。

<table1>

id name
1 Alice
2 Bob
3 Carol

<table2>

id score
1 95
3 88
4 79

この二つのテーブルに対して、LEFT JOINのコードを当てます。

そうすると、以下のようになります。

id name score
1 Alice 95
2 Bob null
3 Carol 88

作成したLEFT JOINのコードは、table1がメインのコードになっています。
なので、table1のIDと同じIDのデータをtable2から探して、一致したデータをくっつけます。

RIGHT JOINは?

RIGHT JOINのコードを作成すると以下のようになります。

SELECT *
FROM table1
RIGHT JOIN table2 ON table1.id = table2.id;

先ほど用意した二つのテーブルに対して、RIGHT JOINのコードを当てます。

そうすると、以下のようになります。

id name score
1 Alice 95
3 Carol 88
4 null 79

作成したRIGHT JOINのコードは、table2がメインのコードになります。
なので、table2のIDと同じIDのデータをtable1から探して、一致したデータをくっつけます。

LEFT JOINの動作と違うのはメインとするテーブルが異なる点になようです!

INNER JOINは?

INNER JOINのコードを作成すると以下のようになります。

SELECT *
FROM table1
INNER JOIN table2 ON table1.id = table2.id;

先ほど用意した二つのテーブルに対して、INNER JOINのコードを当てます。

そうすると、以下のようになります。

id name score
1 Alice 95
3 Carol 88

INNER JOINには、メインのテーブルとかはなさそうですね。
両方のテーブルを比較して、比較対象のカラムが一致したもののみ結合するという感じです。もっと言うとNULLは受け付けないよと言う感じですね。

似たようなLEFT OUTER JOINって何者?

これは似てるのではなく、同じらしいです。

なんやねん。

まとめ

個人的に使用するなら、NULLを受け付ける時にはLEFT JOINで、NULLを受け付けないならINNER JOINかなと言う印象です!

5
1
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
5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?