MySQLのINNER JOINとLEFT JOINの違いを初心者向けに完全解説!SQLのJOIN入門(データベース結合の基本)
生徒
「MySQLの勉強をしていたら、JOINという言葉が出てきました。テーブルを結合するって書いてあるんですが、どういう意味なんですか?」
先生
「JOINは、データベースの複数のテーブルを組み合わせて、一つの表のようにしてデータを取得する方法です。例えば、会員情報の表と注文履歴の表を組み合わせると、誰が何を注文したのかを一度に確認できます。」
生徒
「なるほど。でもINNER JOINとかLEFT JOINとか種類がありますよね。何が違うんですか?」
先生
「大きな違いは、どのデータを結果として表示するかです。両方のテーブルに共通するデータだけ表示するのがINNER JOIN、左のテーブルをすべて表示するのがLEFT 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を理解する
まずは、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とは?共通するデータだけ取得する
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とは?左のテーブルをすべて表示する
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の違いをわかりやすく比較
INNER JOINとLEFT JOINの違いは、結果に含まれるデータの範囲です。
| JOIN種類 | 表示されるデータ |
|---|---|
| INNER JOIN | 両方のテーブルに存在するデータのみ |
| LEFT JOIN | 左テーブルはすべて表示(右が無ければNULL) |
簡単な例えで考えてみましょう。
学校の名簿と部活の名簿があるとします。
INNER JOINは「学校にも部活にも登録されている生徒だけ」を表示します。
LEFT JOINは「学校の生徒は全員表示し、部活に入っている人だけ部活名を表示する」というイメージです。
この考え方を覚えるとJOINの理解がとても楽になります。
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のポイント
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やデータベース操作に慣れていきましょう。」