【SQL】内部結合、外部結合とわかりあう

目次

春の陽気に街が色づき始めた今日この頃。
いかがお過ごしでしょうか。

はじめまして
私は、22卒未経験でエンジニアとして働き始めて早16日。
鬼の若輩者です。

なんでもインプットよりアウトプットの方が大切という噂を聞いた事があります。

開発ブログを書く機会もいただけているので、
今回は内部結合や外部結合について学んだことを備忘録として書き留めます。

前提のテーブル

usersテーブル
id name message_id
1 hoge 2
2 huga 3
3 foo NULL
4 var 1
5 piyo 2

messagesテーブル
id content
1 おはよう
2 こんにちは
3 こんばんは
4 おばんです

内部結合

SQL実行

内部結合にはINNER JOINを使います。

id name messages_id id content
1 hoge 2 2 こんにちは
2 huga 3 3 こんばんは
4 var 1 1 おはよう
5 piyo 2 2 こんにちは

この時、テーブル内のINNER JOINの条件に一致しないレコード(この場合、usersテーブルのid:3のレコード)は削除されます。

内部結合をすることで一つのテーブルになっているので

id name content
1 hoge こんにちは
2 huga こんばんは
4 var おはよう
5 piyo こんにちは 

こういった様に必要な要素だけのわかりやすいテーブルを出力することができます。

外部結合

外部結合はLEFT(RIGHT) OUTER JOINを使います。

左外部結合、右外部結合があり、
どちらのテーブルを主として結合するかによって使い分けます。

そして前述の内部結合と違い、
一致しないレコードは削除されず、その対応する値が無い場合にはNULLが入ります。

左外部結合

id name message_id id content
1 hoge 2 2 こんにちは
2 huga 3 3 こんばんは
3 foo NULL NULL NULL
4 var 1 1 おはよう
5 piyo 2 2 こんにちは

内部結合では削除されてしまうレコードも利用する必要がある場合はこちらを使うイメージです。

右外部結合

id name massage_id id content
1 hoge 2 2 こんにちは
2 huga 3 3 こんばんは
4 var 1 1 おはよう
5 piyo 2 2 こんにちは
NULL NULL NULL 4 おばんです

このように内部結合、左外部結合とは違い、
右側に結合するテーブルの値を主としてSELECT文を出力することができます。

締め

これらを使い分けて、楽しいSQLライフを送りましょう!

ありがとうございました。
またよろしくお願いします!