どうもこんにちは。
今回は業務内で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かなと言う印象です!