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