#INNER JOINとOUTER JOINとは?
今回はテーブル結合をするために用いるSQL文のINNERJOINとOUTERJOINについて説明していきます。
##INNER JOIN
INNER JOINとは、内部結合のことを指しています。
例を使って説明してきます。
まず、このようなテーブルが2つあるとします。
testGroupテーブル
id | author_id | title |
---|---|---|
1 | 1 | title1 |
2 | 2 | title4 |
3 | 1 | title5 |
4 | 3 | title3 |
5 | 3 | title2 |
6 | 2 | title7 |
7 | 3 | title6 |
8 | 1 | title8 |
authorIdテーブル
id | title |
---|---|
1 | title10 |
2 | title13 |
3 | title11 |
4 | title9 |
5 | title12 |
- testGroupテーブルの[author_id]
- authourIdテーブルの[id]
これらが一致しているところを結合したいとき、このようなSQL文を書きます。
SELECT * FROM testGroup
INNER JOIN authorId
ON testGroup.author_id = authorId.id
すると結果は
id | author_id | title | id | title |
---|---|---|---|---|
1 | 1 | title1 | 1 | title10 |
3 | 1 | title5 | 1 | title10 |
8 | 1 | title8 | 1 | title10 |
2 | 2 | title4 | 2 | title13 |
6 | 2 | title2 | 2 | title13 |
4 | 3 | title5 | 3 | title11 |
5 | 3 | title3 | 3 | title11 |
7 | 3 | title7 | 3 | title11 |
このように author_id = id のところが全て表示されます。
この結果により、author_id 1番の人はtitle1,5,8,10を作ったことが分かります。
##OUTER JOIN
OUTER JOINにはLEFTとRIGHTがあり、外部結合のことをさしています。
上の例を使い説明していきます。
###LEFT OUTER JOIN
名前の通り左にくるテーブルに合わせて結合します。
SELECT * FROM testGroup
LEFT OUTER JOIN authorId
ON testGroup.author_id = authorId.id
すると結果は
id | author_id | title | id | title |
---|---|---|---|---|
1 | 1 | title1 | 1 | title10 |
3 | 1 | title5 | 1 | title10 |
8 | 1 | title8 | 1 | title10 |
2 | 2 | title4 | 2 | title13 |
6 | 2 | title2 | 2 | title13 |
4 | 3 | title5 | 3 | title11 |
5 | 3 | title3 | 3 | title11 |
7 | 3 | title7 | 3 | title11 |
今回左のテーブルのauthor_idは1〜3番までであり、結合された右のテーブルのidも1〜3番まで全てあるので結果はINEER JOINと同じ結果になることが分かります。
###RIGHT OUTER JOIN
さっきとは逆になり、右にくるテーブルに合わせて結合します。
SELECT * FROM testGroup
RIGHT OUTER JOIN authorId
ON testGroup.author_id = authorId.id
すると結果は
id | author_id | title | id | title |
---|---|---|---|---|
1 | 1 | title1 | 1 | title10 |
2 | 2 | title4 | 2 | title13 |
3 | 1 | title5 | 1 | title10 |
4 | 3 | title5 | 3 | title11 |
5 | 3 | title3 | 3 | title11 |
6 | 2 | title2 | 2 | title13 |
7 | 3 | title7 | 3 | title11 |
8 | 1 | title8 | 1 | title10 |
NULL | NULL | NULL | 4 | title9 |
NULL | NULL | NULL | 5 | title12 |
今回は右のテーブルに合わせたのでid 4,5番は左のテーブルには存在しないのでNULLとはでるが表示はされていることが分かります。
また、並び順に関しても右のテーブルが基準になっていることも分かります。
##まとめ
今回はテーブル結合について説明しました。言葉で説明すると一見難しそうですが、実際にテーブルを作って実行してみれば理解が深まると思います。
この構文は時間短縮にもなるのでぜひ活用していきたいですね。