0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【SQL】内部結合と外部結合のこと

Last updated at Posted at 2022-04-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を使います。
SELECT * FROM users INNER JOIN messages ON users.message_id = messages.id;

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のレコード)は削除されます。

内部結合をすることで一つのテーブルになっているので
SELECT users.id, users.name, messages.content FROM users INNER JOIN messages ON users.message_id = messages.id;

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

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

外部結合

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

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

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

左外部結合

SELECT * FROM users LEFT OUTER JOIN messages ON users.message_id = messages.ID;

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 こんにちは

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

右外部結合

SELECT * FROM users RIGHT OUTER JOIN messages ON users.message_id = messages.ID;

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ライフを送りましょう!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?