内部結合(INNER JOIN句) - テーブルの結合 - SQLite入門
INNER JOIN(内部結合)はそれぞれのテーブルの指定した列の値が一致するデータだけを取得する。
たとえば、以下のようなテーブルがあったとする。
hoge1
| user_id | type | name |
| 1 | MH | engagesr1 |
| 2 | MH | engagesr2 |
| 3 | HM | ATOLLV |
| 4 | MH | engagesr4 |
| 5 | AB | Zwauth |
| 6 | AB | Zwarth |
| 7 | AB | Wryneck |
| 8 | AB | Leprechaun |
| 9 | AB | Dumbine |
| 10 | AB | Sirbine |
| 11 | AB | Billbine |
| 12 | WM | Zabungle |
| 13 | WM | Walker-Gallia |
| 14 | KMF | Gawain |
| 15 | TA | Raiden |
| 16 | HM | AshRaTemple |
hoge2
| id | custom_id | name |
| 1 | 4 | delta |
| 2 | 6 | zeta |
| 3 | 9 | iota |
| 4 | 13 | nu |
| 5 | 14 | xi |
hoge3
| id | member_id | name |
| 1 | 1 | Akaishi |
| 2 | 10 | Adachi |
| 3 | 8 | Amagi |
| 4 | 7 | Kuroishi |
| 5 | 16 | Kita |
| 6 | 4 | Ibuki |
| 7 | 14 | Miyaura |
| 8 | 13 | Shirane |
INNER JOINを使ってSELECT文を発行してみる。
(書き方はLEFT JOINとかと変わらない)
mysql > select * from hoge1 inner join hoge2 on hoge1.user_id = hoge2.custom_id;
結果
| user_id | type | name | id | custom_id | name |
| 4 | MH | engagesr4 | 1 | 4 | delta |
| 6 | AB | Zwarth | 2 | 6 | zeta |
| 9 | AB | Dumbine | 3 | 9 | iota |
| 13 | WM | Walker-Gallia | 4 | 13 | nu |
| 14 | KMF | Gawain | 5 | 14 | xi |
複数のテーブルをINNER JOINする。
mysql > select * from hoge1 inner join hoge2 on hoge1.user_id = hoge2.custom_id inner join hoge3 on hoge1.user_id = hoge3.member_id;
結果
| user_id | type | name | id | custom_id | name | id | member_id | name |
| 4 | MH | engagesr4 | 1 | 4 | delta | 6 | 4 | Ibuki |
| 14 | KMF | Gawain | 5 | 14 | xi | 7 | 14 | Miyaura |
| 13 | WM | Walker-Gallia | 4 | 13 | nu | 8 | 13 | Shirane |
ちなみに、LEFT JOINだと、一致していないものも検出される。
mysql > select * from hoge1 left join hoge2 on hoge1.user_id = hoge2.custom_id left join hoge3 on hoge1.user_id = hoge3.member_id;
結果
| user_id | type | name | id | custom_id | name | id | member_id | name |
| 1 | MH | engagesr1 | NULL | NULL | NULL | 1 | 1 | Akaishi |
| 2 | MH | engagesr2 | NULL | NULL | NULL | NULL | NULL | NULL |
| 3 | HM | ATOLLV | NULL | NULL | NULL | NULL | NULL | NULL |
| 4 | MH | engagesr4 | 1 | 4 | delta | 6 | 4 | Ibuki |
| 5 | AB | Zwauth | NULL | NULL | NULL | NULL | NULL | NULL |
| 6 | AB | Zwarth | 2 | 6 | zeta | NULL | NULL | NULL |
| 7 | AB | Wryneck | NULL | NULL | NULL | 4 | 7 | Kuroishi |
| 8 | AB | Leprechaun | NULL | NULL | NULL | 3 | 8 | Amagi |
| 9 | AB | Dumbine | 3 | 9 | iota | NULL | NULL | NULL |
| 10 | AB | Sirbine | NULL | NULL | NULL | 2 | 10 | Adachi |
| 11 | AB | Billbine | NULL | NULL | NULL | NULL | NULL | NULL |
| 12 | WM | Zabungle | NULL | NULL | NULL | NULL | NULL | NULL |
| 13 | WM | Walker-Gallia | 4 | 13 | nu | 8 | 13 | Shirane |
| 14 | KMF | Gawain | 5 | 14 | xi | 7 | 14 | Miyaura |
| 15 | TA | Raiden | NULL | NULL | NULL | NULL | NULL | NULL |
| 16 | HM | AshRaTemple | NULL | NULL | NULL | 5 | 16 | Kita |