1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

[SQL]テーブル結合時に利用するJOIN句の種類と使い方をとにかく簡単にまとめておく

Last updated at Posted at 2024-07-30

どんなプロジェクトでも必ず必要になるテーブル結合のSQL。
結合用のJOIN句の種類とレコード取得結果はどうなるんだけっけ...と、記憶があやふやになることがあるので簡単にまとめて備忘録とする。

なお、この記事ではメインで使用する以下3つのJOIN句の情報をまとめています。

・INNER JOIN
・LEFT JOIN
・RIGHT JOIN

結合処理の内容をさらっと確認したい人へ

簡単に確認を済ませたい人はこの方のツイート内容がおすすめ。
図を使ってくれているので非常にわかりやすい!
この図を確認した上で以下の文章を読み進めても良いかもです。

かずなり | 生成AI×ビジネスハック SQL JOINS

テーブル例

例として使用するテーブルは以下の2つです。

・userテーブル
・user_orderテーブル(ユーザーの注文を管理するテーブル)

データ内容はこんな感じ

userテーブル

mysql> SELECT * FROM user;
+---------+--------+----------+
| user_id | name   | order_id |
+---------+--------+----------+
|       1 | 高橋   |        1 |
|       2 | 山田   |        2 |
|       3 | 青木   |        3 |
|       4 | 井上   |        4 |
|       5 | 澁谷   |        5 |
|       6 | 遠藤   |        6 |
+---------+--------+----------+

user_orderテーブル

mysql> SELECT * FROM user_order;
+----------+---------+-----------------------------------------+
| order_id | user_id | order_name                              |
+----------+---------+-----------------------------------------+
|        1 |       1 | ビッグマック                               |
|        2 |       2 | チーズバーガー                             |
|        3 |       3 | テリヤキバーガー                           |
|        4 |      10 | フィレオフィッシュバーガー                     |
+----------+---------+-----------------------------------------+

なお、今回は全てuserテーブル起点(from user)で考え、JOINに使用するカラムは、
user_orderテーブルの「user_id」カラムとします。

1. INNER JOIN 文

SELECT * FROM
  user 
INNER JOIN 
  user_order 
ON 
  user_order.user_id = user.user_id;

INNER JOINのポイント

・JOINで指定したカラムの値が一致するレコードのみ出力される

SQL実行結果

+---------+--------+----------+----------+---------+--------------------------+
| user_id | name   | order_id | order_id | user_id | order_name               |
+---------+--------+----------+----------+---------+--------------------------+
|       1 | 高橋   |        1 |        1 |       1 | ビッグマック                |
|       2 | 山田   |        2 |        2 |       2 | チーズバーガー              |
|       3 | 青木   |        3 |        3 |       3 | テリヤキバーガー            |
+---------+--------+----------+----------+---------+--------------------------+

2. LEFT JOIN 文

SELECT * FROM
  user 
LEFT JOIN 
  user_order 
ON 
  user_order.user_id = user.user_id;

LEFT JOINのポイント

・from句で指定したテーブル側のレコードは全て出力
・JOINで指定したカラムの値が一致するレコード → データを連結して出力
・JOINで指定したカラム値が一致しないレコード → 結合相手(user_order)のテーブルカラム値をnullにして出力

SQL実行結果

+---------+--------+----------+----------+---------+--------------------------+
| user_id | name   | order_id | order_id | user_id | order_name               |
+---------+--------+----------+----------+---------+--------------------------+
|       1 | 高橋   |        1 |        1 |       1 | ビッグマック               |
|       2 | 山田   |        2 |        2 |       2 | チーズバーガー              |
|       3 | 青木   |        3 |        3 |       3 | テリヤキバーガー            |
|       4 | 井上   |        4 |     NULL |    NULL | NULL                     |
|       5 | 澁谷   |        5 |     NULL |    NULL | NULL                     |
|       6 | 遠藤   |        6 |     NULL |    NULL | NULL                     |
+---------+--------+----------+----------+---------+--------------------------+

3. RIGHT JOIN 文

SELECT * FROM
  user 
RIGHT JOIN 
  user_order 
ON 
  user_order.user_id = user.user_id;

RIGHT JOINのポイント

・結合相手側(user_order)のテーブルレコードは全て出力
・JOINで指定したカラムの値が一致するレコード → データを連結して出力
・JOINで指定したカラム値が一致しないレコード → from句で指定した側のテーブルカラム値をnull状態にして出力

SQL実行結果

+---------+--------+----------+----------+---------+-----------------------------+
| user_id | name   | order_id | order_id | user_id | order_name                  |
+---------+--------+----------+----------+---------+-----------------------------+
|       1 | 高橋   |        1 |        1 |       1 | ビッグマック                   |
|       2 | 山田   |        2 |        2 |       2 | チーズバーガー                  |
|       3 | 青木   |        3 |        3 |       3 | テリヤキバーガー                |
|    NULL | NULL   |     NULL |       4 |      10 | フィレオフィッシュバーガー       |
+---------+--------+----------+----------+---------+-----------------------------+

以上です!!

1
1
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
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?