情弱エンジニアのなかのblog

一人前のエンジニアになる為のブログです

内部結合と外部結合の違いについて

INNER JOIN と LEFT OUTER JOIN

この間MySQLのJOINについての記事を書きましたが、内部結合と外部結合についてよく分かっていなかったので今回まとめてみようと思います

1.前提条件

2.内部結合とは

3.外部結合とは

1.前提条件

まず説明を始める前に二つのテーブル、顧客テーブル「customers」と商品テーブル「items」があると仮定します。

「customers」にはidと顧客名と商品テーブルの外部キーが入っています。

id,name,item_id

「item」にはidと商品の種類と商品名が入っているとします。

id,category,name

それぞれの中身はこうなっています。

mysql> SELECT * FROM customers;
+----+--------+---------+
| id | name   | item_id |
+----+--------+---------+
|  1 | tanaka | 1       |
|  2 | yamada | 2       |
|  3 | satou  | 1       |
|  4 | itou   | 5       |
+----+--------+---------+

mysql> SELECT * FROM items;
+----+-----------+-------+
| id | category  | name  |
+----+-----------+-------+
|  1 | food      | salad |
|  2 | book      | novel |
|  3 | clothes   | coat  |
|  4 | furniture | chair |
+----+-----------+-------+

2.内部結合とは

そもそも結合とは二つのテーブルをくっつけることです、今回の場合「customers」と「items」ですね。

そして内部結合(INNER JOIN)とは二つのフィールドを検索して一致するものだけを抽出して、二つのテーブルを結合するというものになります。

実際に試すとこうなります。

mysql> SELECT * FROM customers INNER JOIN items ON  customers.item_id = items.id;

+----+--------+---------+-----+----------+-------+
| id | name   | item_id | id  | category | name  |
+----+--------+---------+-----+----------+-------+
|  1 | tanaka | 1       | 1   | food     | salad |
|  3 | satou  | 1       | 1   | food     | sarad |
|  2 | yamada | 2       | 2   | book     | novel |
+----+--------+---------+-----+----------+-------+

重要なのは 「customers.item_id」 と 「items.id」が一致するものを検索条件にしているので、 一致するデータを持っていないものは除外されてしまうという点です。

customersテーブルの

|  4 | itou   | 5       |

itemsテーブルの

|  4 | furniture | chair |

この二つのが消えてしまっています。

3.外部結合とは

続いて外部結合(LEFT OUTER JOIN)とは二つのフィールドを検索して一致するものプラス、左側のテーブルに関しては全て出力し、二つのテーブルを結合するというものになります。

ここで重要なのは検索されても存在しない右のテーブルのデータはNULLになるというところです。 NULLとは何もない何も表示されないという意味になります。

実際に試すとこうなります。

mysql> SELECT * FROM customers LEFT JOIN items ON  customers.item_id = items.id;

+----+--------+---------+------+----------+-------+
| id | name   | item_id | id   | category | name  |
+----+--------+---------+------+----------+-------+
|  1 | tanaka | 1       | 1    | food     | salad |
|  3 | satou  | 1       | 1    | food     | sarad |
|  2 | yamada | 2       | 2    | book     | novel |
|  4 | itou   | 5       | NULL | NULL     | NULL  |
+----+--------+---------+------+----------+-------+

お分かりいただけたでしょうか、さっきと違い基準となる「左側」のcustomersの

|  4 | itou   | 5       | NULL | NULL     | NULL  |

が消えていません、そして「items」には「5」というidが存在していないのでNULLが続いています。

そして「customers」を基準にしているのでさっきと同じく

|  4 | furniture | chair |

は消えています。

補足として結合後のテーブルは検索先である「item_id」の昇順に並び替えられます。

以上が内部結合と外部結合の違いにつての説明になります。 今回参考にさせて頂いたサイトを記載致します。

INNER JOINとOUTER JOIN - 紳士なブログ

inner join と outer join の違いと覚え方の自分用まとめ(外部表、駆動表もメモ) | ぱーくん plus idea

SQL:内部結合と外部結合の違い | 覚え書き.com

それでは