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

INNER JOINとLEFT JOINの使い分け

Last updated at Posted at 2025-07-09

1.はじめに

データベースを扱う上で避けて通れないのが「JOIN(結合)」です。この記事では、SQLのJOINの基本から、特によく使われるINNER JOINLEFT JOINに焦点を当てて、その特徴と使い分けを解説します。

2. JOINとは

データベースにおけるJOINとは、異なる複数のテーブルに格納されたデータを、共通するカラム(列) を基準として一つにまとめ、関連付ける操作のことです。

データベースは通常、データを効率的に管理するために、関連する情報を複数のテーブルに分割します。例えば、顧客情報と注文情報を考えてみます。顧客の名前や住所は「顧客テーブル」に、いつ誰が何を注文したかは「注文テーブル」に保存されるのが一般的です。

しかし、「どの顧客が、どんな商品を、いつ購入したのか」といった情報をまとめて見たい場合、これら別々のテーブルを「顧客ID」のような共通の情報を手掛かりに結合する必要があります。JOINを使うことで、結合したいテーブル同士が持つ共通のキーを指定し、そのキーの値が一致する行を連結して新しい一つの結果セットを作成できます。

3. JOINの種類と特徴

SQLにはいくつかのJOINの種類がありますが、ここでは特によく利用されるINNER JOINLEFT JOINについて見ていきます。

3-1. INNER JOIN(内部結合)とは

INNER JOIN(内部結合) は、結合する両方のテーブルに共通するデータだけを結果として取得します。

これは、結合条件(ON 句で指定する共通カラム)が両方のテーブルで完全に一致する行のみが結合されます。どちらか一方のテーブルにしか存在しないデータは、結合後の結果セットには含まれません。

INNER JOINは、完全に一致するデータだけが必要なときに利用します。例えば、「注文履歴のある顧客だけを知りたい」場合などに適しています。

3-2. LEFT JOIN(左外部結合)とは

LEFT JOIN(左外部結合) は、結合するテーブルのうち、左側のテーブルのデータをすべて残しつつ、右側のテーブルで結合条件に合うデータをくっつけます。

もし右側のテーブルに一致するデータがなかった場合でも、左側のテーブルの行は結果セットに残ります。その際、右側のテーブルから取得されるはずだったカラムには NULL が入ります。

LEFT JOINは、左のデータを基準にして漏れなく取得したいときに利用します。例えば、「すべての顧客の情報を見つつ、もし注文履歴があればその情報も表示したい」場合などに有効です。

4. 実行例

実際にサンプルテーブルを使って、INNER JOINとLEFT JOINの違いを見ていきます。

サンプルテーブル紹介

customers テーブル(顧客情報)

customer_id customer_name
1 山田太郎
2 佐藤花子
3 鈴木一郎
4 田中優子

orders テーブル(注文情報)

order_id customer_id order_date amount
101 1 2023-01-10 5000
102 2 2023-01-15 8000
103 1 2023-01-20 3000
104 5 2023-01-25 10000

実際のSQL文

INNER JOIN

SELECT
    c.customer_id,
    c.customer_name,
    o.order_id,
    o.order_date,
    o.amount
FROM
    customers AS c
INNER JOIN
    orders AS o ON c.customer_id = o.customer_id;

LEFT JOIN

SELECT
    c.customer_id,
    c.customer_name,
    o.order_id,
    o.order_date,
    o.amount
FROM
    customers AS c
LEFT JOIN
    orders AS o ON c.customer_id = o.customer_id;

実行結果を表で比較

INNER JOIN

customer_id customer_name order_id order_date amount
1 山田太郎 101 2023-01-10 5000
2 佐藤花子 102 2023-01-15 8000
1 山田太郎 103 2023-01-20 3000

LEFT JOIN

customer_id customer_name order_id order_date amount
1 山田太郎 101 2023-01-10 5000
2 佐藤花子 102 2023-01-15 8000
3 鈴木一郎 NULL NULL NULL
4 田中優子 NULL NULL NULL
1 山田太郎 103 2023-01-20 3000

5. まとめ

  • INNER JOINは、結合条件が両方のテーブルで完全に一致するデータだけが欲しいときに使います。
  • LEFT JOINは、左側の基準となるテーブルのデータをすべて残しつつ、右側の関連するデータも取得したいときに使います。

結合条件と、どちらのテーブルのデータを基準にするかを理解することで適切にテーブルをJOINできるようになります。ぜひご自身のデータでも様々なJOINを試してみてください。

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