👏

SQLのJOINを完全理解!初心者でもわかるJOINの種類と使い方

2025/02/28に公開

データベースで複数のテーブルを結合する際に使われる JOIN(ジョイン)
SQLの中でも重要な概念ですが、初心者には 「INNER JOINとLEFT JOINの違いは?」「OUTER JOINって何?」 など、少し分かりにくい部分もあります。

この記事では、JOINの種類と使い方を初心者向けに解説 します!
実際のデータを使って視覚的に理解できるように説明するので、ぜひ最後まで読んでみてください!


🔹 1. JOINとは?

📌 JOINの基本

JOINとは、複数のテーブルを結合して1つの結果セットを作成する SQLの機能です。
リレーショナルデータベースでは、データを複数のテーブルに分けて管理 するため、必要に応じてデータを結合する必要があります。

例えば、以下の users テーブルと orders テーブル を考えます。

📝 users テーブル

user_id name email
1 中野 tanaka@example.com
2 哲平 suzuki@example.com
3 佐藤 sato@example.com

📝 orders テーブル

order_id user_id product
101 1 ノートPC
102 1 スマートフォン
103 2 タブレット

👉 この2つのテーブルを結合して「ユーザー名」と「購入した商品」を取得 する場合、JOINを使います!


🔹 2. JOINの種類と使い方

SQLのJOINには、以下の 5種類 があります。

JOINの種類 説明
INNER JOIN 両方のテーブルに一致するデータだけを取得
LEFT JOIN 左側のテーブルのデータをすべて取得し、一致しない場合はNULL
RIGHT JOIN 右側のテーブルのデータをすべて取得し、一致しない場合はNULL
FULL OUTER JOIN 両方のテーブルのすべてのデータを取得
CROSS JOIN 両方のテーブルのすべての組み合わせ(直積)を取得

それでは、1つずつ見ていきましょう!


✅ 2-1. INNER JOIN(内部結合)

📌 特徴

  • 両方のテーブルに一致するデータだけを取得 する
  • 一致しないデータは無視される

📌 SQL

SELECT users.user_id, users.name, orders.product
FROM users
INNER JOIN orders ON users.user_id = orders.user_id;

📌 結果

user_id name product
1 哲平 ノートPC
1 中野 スマートフォン
2 鈴木 タブレット

👉 ユーザーIDが一致するデータのみ取得され、「佐藤(user_id=3)」は注文がないため表示されない!


✅ 2-2. LEFT JOIN(左外部結合)

📌 特徴

  • 左側のテーブル(users)のデータはすべて取得
  • 一致するデータがない場合は NULL が入る

📌 SQL

SELECT users.user_id, users.name, orders.product
FROM users
LEFT JOIN orders ON users.user_id = orders.user_id;

📌 結果

user_id name product
1 田中 ノートPC
1 田中 スマートフォン
2 鈴木 タブレット
3 佐藤 NULL

👉 「佐藤(user_id=3)」は注文がないため、NULL が表示される!

📌 どんなときに使う?

  • すべてのユーザーを取得し、注文がないユーザーも表示する場合
  • 「データがないこと」も考慮して分析したいとき

✅ 2-3. RIGHT JOIN(右外部結合)

📌 特徴

  • 右側のテーブル(orders)のデータはすべて取得
  • 一致するデータがない場合は NULL が入る

📌 SQL

SELECT users.user_id, users.name, orders.product
FROM users
RIGHT JOIN orders ON users.user_id = orders.user_id;

📌 結果

user_id name product
1 田中 ノートPC
1 田中 スマートフォン
2 鈴木 タブレット

👉 この例では orders にすべての user_id が存在するため、RIGHT JOIN でも INNER JOIN と同じ結果になる
👉 「ユーザーがいないのに存在する注文」などがある場合に NULL が表示される


✅ 2-4. FULL OUTER JOIN(完全外部結合)

📌 特徴

  • 両方のテーブルのすべてのデータを取得
  • 一致しないデータは NULL になる

📌 SQL

SELECT users.user_id, users.name, orders.product
FROM users
FULL OUTER JOIN orders ON users.user_id = orders.user_id;

📌 結果

user_id name product
1 田中 ノートPC
1 田中 スマートフォン
2 鈴木 タブレット
3 佐藤 NULL

👉 LEFT JOIN と RIGHT JOIN を組み合わせたような結果!
👉 「どちらのテーブルにも存在しないデータ」も取得できる

📌 どんなときに使う?

  • すべてのデータを結合したいとき
  • どちらかのテーブルにしかないデータも取得したい場合

📌 注意点

  • MySQL では FULL OUTER JOIN をサポートしていない(UNION を使って実現)

✅ 2-5. CROSS JOIN(クロス結合)

📌 特徴

  • 両方のテーブルのすべての組み合わせを取得
  • 条件がないため、データ量が爆発的に増える

📌 SQL

SELECT users.name, orders.product
FROM users
CROSS JOIN orders;

📌 結果

name product
田中 ノートPC
田中 スマートフォン
田中 タブレット
鈴木 ノートPC
鈴木 スマートフォン
佐藤 タブレット

👉 すべてのユーザーとすべての注文の組み合わせが作成される!


🔹 まとめ

JOINの種類 特徴
INNER JOIN 一致するデータのみ取得
LEFT JOIN 左のテーブルをすべて取得(NULLあり)
RIGHT JOIN 右のテーブルをすべて取得(NULLあり)
FULL OUTER JOIN 両方のデータをすべて取得
CROSS JOIN すべての組み合わせを取得

JOINを適切に使いこなせると、データをより効率的に取得できます! 🚀

Discussion