カテゴリ: MySQL 更新日: 2026/03/22

MySQLのINNER JOINとLEFT JOINの違いを初心者向けに完全解説!SQLのJOIN入門(データベース結合の基本)

MySQLのINNER JOINとLEFT JOINの違い
MySQLのINNER JOINとLEFT JOINの違い

先生と生徒の会話形式で理解しよう

生徒

「MySQLの勉強をしていたら、JOINという言葉が出てきました。テーブルを結合するって書いてあるんですが、どういう意味なんですか?」

先生

「JOINは、データベースの複数のテーブルを組み合わせて、一つの表のようにしてデータを取得する方法です。例えば、会員情報の表と注文履歴の表を組み合わせると、誰が何を注文したのかを一度に確認できます。」

生徒

「なるほど。でもINNER JOINとかLEFT JOINとか種類がありますよね。何が違うんですか?」

先生

「大きな違いは、どのデータを結果として表示するかです。両方のテーブルに共通するデータだけ表示するのがINNER JOIN、左のテーブルをすべて表示するのがLEFT JOINです。これから図や具体例で詳しく説明していきます。」

生徒

「テーブルのイメージがつかめれば理解できそうです!」

1. MySQLのJOINとは?テーブルを結合する基本

1. MySQLのJOINとは?テーブルを結合する基本
1. MySQLのJOINとは?テーブルを結合する基本

MySQLのJOINとは、複数のテーブルを結合して一つの結果として表示するSQLの機能です。データベースでは、情報を整理するためにテーブルを分けて保存することが一般的です。

例えば、会員情報と注文情報を別のテーブルに保存することで、データを管理しやすくなります。しかし、実際のシステムでは「誰が何を注文したのか」を知りたいことが多くあります。そのときに使うのがJOINです。

JOINを使うことで、複数のテーブルのデータを関連付けて取得できます。これはExcelでいう「VLOOKUP」のようなイメージに近いです。

MySQLでは主に次のようなJOINが使われます。

  • INNER JOIN(内部結合)
  • LEFT JOIN(左外部結合)
  • RIGHT JOIN(右外部結合)

この記事では特に初心者がつまずきやすいINNER JOINとLEFT JOINの違いを中心に解説します。

2. サンプルテーブルを用意してJOINを理解する

2. サンプルテーブルを用意してJOINを理解する
2. サンプルテーブルを用意してJOINを理解する

まずは、JOINの仕組みを理解するために2つのテーブルを用意します。

1つ目は会員情報のテーブルです。


usersテーブル

id | name       | age
---+------------+----
1  | 山田太郎   | 25
2  | 佐藤花子   | 19
3  | 鈴木一郎   | 30
4  | 田中美咲   | 28
5  | 高橋健     | 40

2つ目は注文情報のテーブルです。


ordersテーブル

id | user_id | product
---+---------+---------
1  | 1       | ノートPC
2  | 3       | マウス
3  | 1       | キーボード
4  | 4       | モニター

ここで重要なのが「user_id」です。この値はusersテーブルのidと対応しています。つまり、どのユーザーが注文したのかを表しています。

このようにテーブル同士を関連付けるキーを使ってJOINを行います。

3. INNER JOINとは?共通するデータだけ取得する

3. INNER JOINとは?共通するデータだけ取得する
3. INNER JOINとは?共通するデータだけ取得する

INNER JOINとは、2つのテーブルの両方に存在するデータだけを取得するJOINです。

簡単に言うと「両方の表に共通するデータだけを表示する」という仕組みです。

それでは実際にSQLを書いてみます。


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

このSQLは、usersテーブルとordersテーブルを結合して、ユーザー名と購入商品を表示します。

実行結果は次のようになります。


name       | product
-----------+----------
山田太郎   | ノートPC
鈴木一郎   | マウス
山田太郎   | キーボード
田中美咲   | モニター

ここで注目したいのは、注文していないユーザーは表示されていないという点です。例えば「佐藤花子」や「高橋健」は注文データがないため結果に含まれていません。

これがINNER JOINの特徴です。

4. LEFT JOINとは?左のテーブルをすべて表示する

4. LEFT JOINとは?左のテーブルをすべて表示する
4. LEFT JOINとは?左のテーブルをすべて表示する

LEFT JOIN(左外部結合)は、左側のテーブルのデータをすべて表示し、右側のテーブルに一致するデータがあれば結合する方法です。

もし右側に一致するデータがなければ、その部分はNULL(データが存在しないことを意味する値)になります。

実際にSQLを書いてみましょう。


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

実行結果はこちらです。


name       | product
-----------+----------
山田太郎   | ノートPC
山田太郎   | キーボード
佐藤花子   | NULL
鈴木一郎   | マウス
田中美咲   | モニター
高橋健     | NULL

LEFT JOINでは、usersテーブルのすべてのユーザーが表示されています。注文がないユーザーはproductがNULLになります。

5. INNER JOINとLEFT JOINの違いをわかりやすく比較

5. INNER JOINとLEFT JOINの違いをわかりやすく比較
5. INNER JOINとLEFT JOINの違いをわかりやすく比較

INNER JOINとLEFT JOINの違いは、結果に含まれるデータの範囲です。

JOIN種類 表示されるデータ
INNER JOIN 両方のテーブルに存在するデータのみ
LEFT JOIN 左テーブルはすべて表示(右が無ければNULL)

簡単な例えで考えてみましょう。

学校の名簿と部活の名簿があるとします。

INNER JOINは「学校にも部活にも登録されている生徒だけ」を表示します。

LEFT JOINは「学校の生徒は全員表示し、部活に入っている人だけ部活名を表示する」というイメージです。

この考え方を覚えるとJOINの理解がとても楽になります。

6. LEFT JOINでNULLのデータを探す方法

6. LEFT JOINでNULLのデータを探す方法
6. LEFT JOINでNULLのデータを探す方法

LEFT JOINは「データが存在しないもの」を探すときにもよく使われます。

例えば「まだ注文していないユーザー」を調べたい場合です。


SELECT users.name
FROM users
LEFT JOIN orders
ON users.id = orders.user_id
WHERE orders.id IS NULL;

実行結果です。


name
---------
佐藤花子
高橋健

このSQLではLEFT JOINを使い、注文データが存在しないユーザーだけを検索しています。

実務のデータベースでは、このような「未登録データ」や「未購入ユーザー」を調べる場面が非常に多いため、LEFT JOINはとても重要なSQL技術です。

7. MySQL初心者が覚えておくべきJOINのポイント

7. MySQL初心者が覚えておくべきJOINのポイント
7. MySQL初心者が覚えておくべきJOINのポイント

MySQLのJOINを理解するために、初心者が覚えておきたいポイントがあります。

  • JOINは複数のテーブルを結合するSQL機能
  • INNER JOINは共通データのみ表示
  • LEFT JOINは左テーブルをすべて表示
  • NULLはデータが存在しないことを意味する
  • LEFT JOINは未登録データの検索にも使える

MySQLやSQLを学ぶ上でJOINは避けて通れない重要な機能です。データベース設計では、テーブルを分けて管理することが多いため、JOINを使わないと必要な情報を取り出すことができません。

最初は難しく感じるかもしれませんが、「共通データだけ表示するのがINNER JOIN」「左のテーブルを全部表示するのがLEFT JOIN」と覚えておくと理解しやすくなります。

まとめ

まとめ
まとめ

ここまで、MySQLのJOINの基本から、INNER JOINとLEFT JOINの違いまでを具体例を使いながら解説してきました。データベースやSQLを学び始めたばかりの初心者にとって、JOINは最初に難しく感じるポイントの一つですが、仕組みを理解するとデータベース操作の幅が大きく広がります。

MySQLのJOINとは、複数のテーブルを結合して一つの結果として取得するためのSQL機能です。データベースでは、情報を整理するためにテーブルを分けて保存するのが一般的です。例えばユーザー情報を管理するusersテーブルと、商品購入履歴を管理するordersテーブルなど、役割ごとにテーブルを分けて管理します。

しかし、実際のシステムでは「誰が何を購入したのか」「どのユーザーが注文したのか」といった複数のテーブルにまたがる情報を取得する必要があります。そのときに活躍するのがSQLのJOINです。JOINを使うことで、複数のテーブルを関連付けて一つの結果として表示することができます。

MySQLのJOINにはいくつか種類がありますが、特に基本となるのがINNER JOINとLEFT JOINです。この二つを理解しておくと、多くのデータベース処理をスムーズに行えるようになります。

INNER JOINの特徴を振り返る

INNER JOINは、二つのテーブルの両方に存在するデータだけを取得する結合方法です。つまり、共通して存在するデータのみが結果として表示されます。

例えばusersテーブルとordersテーブルを結合する場合、注文が存在するユーザーだけが結果に表示されます。注文をしていないユーザーは結果に含まれません。

 usersテーブル id | name | age ---+------------+---- 1 | 山田太郎 | 25 2 | 佐藤花子 | 19 3 | 鈴木一郎 | 30 4 | 田中美咲 | 28 5 | 高橋健 | 40
 ordersテーブル id | user_id | product ---+---------+--------- 1 | 1 | ノートPC 2 | 3 | マウス 3 | 1 | キーボード 4 | 4 | モニター
 SELECT users.name, orders.product FROM users INNER JOIN orders ON users.id = orders.user_id;
 name | product -----------+---------- 山田太郎 | ノートPC 鈴木一郎 | マウス 山田太郎 | キーボード 田中美咲 | モニター

この結果を見ると、注文をしていない佐藤花子や高橋健は表示されていません。つまりINNER JOINは「両方のテーブルに存在するデータだけを取得する」という特徴を持っています。

LEFT JOINの特徴を振り返る

LEFT JOINは、左側のテーブルのデータをすべて表示し、右側のテーブルに一致するデータがある場合だけ結合するSQLです。右側に対応するデータが存在しない場合、その部分はNULLになります。

 SELECT users.name, orders.product FROM users LEFT JOIN orders ON users.id = orders.user_id;
 name | product -----------+---------- 山田太郎 | ノートPC 山田太郎 | キーボード 佐藤花子 | NULL 鈴木一郎 | マウス 田中美咲 | モニター 高橋健 | NULL

この結果では、usersテーブルに存在するすべてのユーザーが表示されています。注文していないユーザーの場合は、product列がNULLになります。このようにLEFT JOINは、左テーブルを基準にすべてのデータを取得する結合方法です。

LEFT JOINを使った未登録データ検索

LEFT JOINは実務のデータベース開発でも非常によく使われます。特に役立つのが「存在しないデータ」を調べるときです。例えば「まだ注文していないユーザー」を調べる場合です。

 SELECT users.name FROM users LEFT JOIN orders ON users.id = orders.user_id WHERE orders.id IS NULL;
 name --------- 佐藤花子 高橋健

このSQLではLEFT JOINを使い、ordersテーブルに対応するデータが存在しないユーザーだけを検索しています。ECサイトや会員管理システムでは「まだ購入していないユーザー」や「まだ登録されていない情報」を調べる場面が多くあります。このような場合にLEFT JOINとNULL判定を組み合わせたSQLが活躍します。

MySQLのJOINを理解するための重要ポイント

MySQLのJOINを理解するためには、次のポイントを覚えておくと理解が深まります。SQL初心者は、これらの基本をしっかり押さえておくことが大切です。

  • JOINは複数のテーブルを結合するSQL機能
  • INNER JOINは両方のテーブルに存在するデータのみ表示
  • LEFT JOINは左テーブルのデータをすべて表示
  • 一致しないデータはNULLとして表示される
  • LEFT JOINとNULL検索で未登録データを探せる

SQLやMySQLを学ぶ上でJOINは非常に重要な技術です。実際のデータベースでは、一つのテーブルだけで情報を管理することはほとんどありません。ユーザー情報、注文情報、商品情報、支払い情報など、多くのテーブルが関連しながらデータを管理しています。

そのため、複数のテーブルを結合してデータを取得するJOINを理解することは、データベース操作やSQLクエリ作成の基礎スキルになります。INNER JOINとLEFT JOINの違いを理解しておくことで、実務のデータベース開発やデータ分析でも役立つ場面が増えていきます。

最初は難しく感じるかもしれませんが、実際にSQLを書いて実行結果を確認しながら学習すると、JOINの仕組みが自然と理解できるようになります。MySQLやSQLの学習では、サンプルテーブルを作成しながら何度もJOINのクエリを書いてみることが理解への近道です。

先生と生徒の振り返り会話

生徒

「今日のMySQLの勉強でJOINの仕組みがかなり理解できました。INNER JOINとLEFT JOINは結果の出方が違うんですね。」

先生

「その通りです。INNER JOINは両方のテーブルに存在するデータだけを表示し、LEFT JOINは左側のテーブルをすべて表示するという違いがあります。SQL初心者が最初につまずきやすい部分ですが、実際に結果を見ると理解しやすいでしょう。」

生徒

「INNER JOINだと注文したユーザーだけ表示されて、LEFT JOINだと注文していないユーザーも表示されるという違いがよく分かりました。」

先生

「とても良い理解です。データベースでは、こうしたテーブル結合を使ってデータを取得することが多いので、JOINを理解するとSQLの応用力が一気に上がります。」

生徒

「LEFT JOINでNULLを使って注文していないユーザーを探すSQLも面白かったです。実際のシステムでも使われているんですね。」

先生

「はい。未購入ユーザーの抽出や未登録データの検索など、LEFT JOINとNULL判定は実務で非常によく使われます。MySQLやSQLを学ぶなら、JOINは必ず身につけておきたい基本技術です。」

生徒

「これからはINNER JOINとLEFT JOINを使い分けながらSQLを書いてみます。データベースの理解が深まった気がします。」

先生

「その姿勢が大切です。実際にSQLを書いて試しながら、MySQLのJOINやデータベース操作に慣れていきましょう。」

カテゴリの一覧へ
新着記事
New1
MySQL
MySQL JOIN入門完全ガイド!初心者でもわかる複数テーブル結合の基本(INNER JOIN・LEFT JOIN・RIGHT JOIN対応)
New2
PostgreSQL
PostgreSQL初心者必見!サブクエリとCTE(WITH句)の使い分けとパフォーマンス徹底比較
New3
MySQL
MySQLのINNER JOINとLEFT JOINの違いを初心者向けに完全解説!SQLのJOIN入門(データベース結合の基本)
New4
PostgreSQL
PostgreSQL入門!EXISTSとNOT EXISTSの使い方を初心者向けに徹底解説
人気記事
No.1
Java&Spring記事人気No1
PostgreSQL
PostgreSQLのUPDATE文の使い方(部分更新・条件更新)
No.2
Java&Spring記事人気No2
PostgreSQL
PostgreSQLユーザーとロール作成完全ガイド!初心者でもわかるデータベース権限管理
No.3
Java&Spring記事人気No3
PostgreSQL
PostgreSQLのORDER BYの基本(昇順・降順)
No.4
Java&Spring記事人気No4
PostgreSQL
PostgreSQLとは?初心者向けに特徴をわかりやすく解説
No.5
Java&Spring記事人気No5
PostgreSQL
PostgreSQLでよく使うデータ型一覧(文字列・数値・日付)
No.6
Java&Spring記事人気No6
PostgreSQL
PostgreSQLでスキーマを分割するメリット
No.7
Java&Spring記事人気No7
PostgreSQL
PostgreSQLスキーマ作成・削除完全ガイド!初心者でもわかるデータベース設計の基礎
No.8
Java&Spring記事人気No8
PostgreSQL
PostgreSQLのLIKE検索(部分一致・前方一致)