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

MySQL JOIN入門完全ガイド!初心者でもわかる複数テーブル結合の基本(INNER JOIN・LEFT JOIN・RIGHT JOIN対応)

MySQLのJOINで複数テーブルを結合する方法
MySQLのJOINで複数テーブルを結合する方法

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

生徒

「MySQLを勉強していたらJOINっていう言葉が出てきたんですが、これは何をするものなんですか?」

先生

「JOINは、複数のテーブルを結合して1つの表としてデータを取り出すためのSQLの機能です。データベースでは、情報を整理するために複数のテーブルに分けて保存することが多いので、そのテーブルをつなげて使うときにJOINを使います。」

生徒

「テーブルをつなげるって、どういうイメージですか?」

先生

「例えば、学校の名簿とテストの点数表が別々にあるとします。名前でその2つを合わせると、誰が何点だったかが分かりますよね。そのように、共通の情報を使って表を結びつけるのがJOINです。」

生徒

「なるほど!つまり複数の表を1つの表のように使えるんですね。」

先生

「その通りです。MySQLのデータベース操作ではとても重要な機能なので、ゆっくり順番に理解していきましょう。」

1. MySQLのJOINとは?複数テーブルを結合する仕組み

1. MySQLのJOINとは?複数テーブルを結合する仕組み
1. MySQLのJOINとは?複数テーブルを結合する仕組み

MySQLのJOINとは、複数のテーブルに分かれて保存されているデータを結合して1つの結果として表示するSQLの機能です。 データベースでは、情報を整理するためにデータをいくつかのテーブルに分けて管理します。

例えば、次のようなデータベースがあるとします。

・ユーザー情報テーブル
・注文情報テーブル

この2つのテーブルを組み合わせることで、 「どのユーザーが何を注文したのか」 という情報を取得できます。

このように、複数テーブルを関連付けてデータを取得する方法がJOINです。 MySQL、SQL、データベース操作を学ぶうえで必ず覚える重要な技術です。

2. JOINを理解するためのテーブル準備

2. JOINを理解するためのテーブル準備
2. JOINを理解するためのテーブル準備

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

1つ目はユーザー情報テーブルです。


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

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


order_id | user_id | product
---------+---------+---------
1        | 1       | ノート
2        | 2       | ペン
3        | 1       | マウス
4        | 3       | キーボード
5        | 4       | モニター

ここで注目してほしいのは「user_id」です。

この列はユーザーのidと対応しています。 つまり、この数字を使えば 「どのユーザーの注文か」 を判断できます。

このように、テーブル同士をつなぐための共通の値を キーと呼びます。

3. MySQLで基本的なJOINを書く方法

3. MySQLで基本的なJOINを書く方法
3. MySQLで基本的なJOINを書く方法

MySQLで複数テーブルを結合する基本的なSQL構文は次のようになります。


SELECT *
FROM users
JOIN orders
ON users.id = orders.user_id;

このSQLの意味を分解すると次のようになります。

SELECT → 表示するデータを指定
FROM → 基準になるテーブル
JOIN → 結合するテーブル
ON → 結合条件

つまりこのSQLは 「usersテーブルとordersテーブルをidで結びつける」 という意味になります。

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


id | name       | age | order_id | user_id | product
---+------------+-----+----------+---------+---------
1  | 山田太郎   | 25  | 1        | 1       | ノート
2  | 佐藤花子   | 19  | 2        | 2       | ペン
1  | 山田太郎   | 25  | 3        | 1       | マウス
3  | 鈴木一郎   | 30  | 4        | 3       | キーボード
4  | 田中美咲   | 22  | 5        | 4       | モニター

このように、ユーザー情報と注文情報が結びついて表示されます。

4. INNER JOINで一致するデータだけ取得する

4. INNER JOINで一致するデータだけ取得する
4. INNER JOINで一致するデータだけ取得する

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


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

このSQLでは ユーザー名と購入商品だけを表示しています。


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

INNER JOINはMySQLのJOINの中で最もよく使われる基本的な結合方法です。

5. LEFT JOINで左テーブルのデータをすべて取得する

5. LEFT JOINで左テーブルのデータをすべて取得する
5. LEFT JOINで左テーブルのデータをすべて取得する

LEFT JOINは、左側のテーブルのデータをすべて取得するJOINです。

注文していないユーザーも表示されます。


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

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


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

高橋健は注文していないため、productの部分がNULLになります。

NULLとは「データが存在しない」という意味です。

6. RIGHT JOINで右テーブルのデータをすべて取得する

6. RIGHT JOINで右テーブルのデータをすべて取得する
6. RIGHT JOINで右テーブルのデータをすべて取得する

RIGHT JOINは、右側のテーブルのデータをすべて取得するJOINです。


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

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


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

RIGHT JOINは右側テーブルを基準にデータを取得するため、注文データはすべて表示されます。

まとめ

まとめ
まとめ

ここまで、MySQLのJOINの基本について学んできました。データベースを扱ううえで、複数のテーブルを結合してデータを取得する技術は非常に重要です。実際のシステム開発では、1つのテーブルだけでデータを管理することはほとんどありません。ユーザー情報、注文情報、商品情報、決済情報など、多くのデータがそれぞれのテーブルに分けて保存されます。その理由は、データの重複を減らし、データベース設計を整理するためです。

例えば、ユーザーの名前やメールアドレスなどの情報を注文テーブルにすべて保存してしまうと、同じユーザーが注文するたびに同じデータが何度も保存されてしまいます。このような状態はデータの重複を生み、データベースの管理が難しくなります。そのため、ユーザー情報はusersテーブル、注文情報はordersテーブルというように分けて保存するのが一般的です。

しかし、テーブルを分けて保存すると「誰が何を注文したのか」という情報を確認する際には、複数のテーブルを組み合わせて取得する必要があります。ここで登場するのがJOINです。JOINはSQLの中でも特に重要な機能であり、MySQLを学ぶ初心者にとって必ず理解しておきたい基本的なデータベース操作です。

JOINにはいくつか種類がありますが、今回の記事では代表的な3つのJOINを学びました。それがINNER JOIN、LEFT JOIN、RIGHT JOINです。これらはSQLの基本構文としてよく利用されるため、MySQLだけでなく多くのデータベース管理システムでも共通して使われます。

INNER JOINの特徴

INNER JOINは、2つのテーブルの両方に存在するデータだけを取得するJOINです。共通のキーが一致するレコードだけが表示されるため、もっとも基本的でよく使われるJOINの種類です。ユーザーと注文のように、関連するデータを取得する場合によく使われます。

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

このSQLでは、usersテーブルとordersテーブルをidとuser_idで結びつけています。つまり、ユーザー情報と注文情報を関連付けて取得しています。MySQLのJOIN構文では、ON句で結合条件を指定することが非常に重要です。

LEFT JOINの特徴

LEFT JOINは、左側のテーブルのデータをすべて取得するJOINです。右側のテーブルに一致するデータがない場合でも、左側のデータは表示されます。その場合、結合できなかった列にはNULLが表示されます。

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

LEFT JOINは、データの存在を確認する場面でよく使われます。例えば「注文していないユーザーを調べたい」という場合には、LEFT JOINとNULLチェックを組み合わせて検索できます。これは実務でも非常によく使われるテクニックです。

RIGHT JOINの特徴

RIGHT JOINは、RIGHT JOINの右側にあるテーブルのデータをすべて取得するJOINです。左側のテーブルに一致するデータが存在しない場合でも、右側のデータは必ず表示されます。LEFT JOINと似ていますが、基準となるテーブルが逆になります。

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

MySQLではLEFT JOINの方が使用されることが多いですが、RIGHT JOINもSQLの基本機能として理解しておくことが大切です。どちらもテーブル結合の仕組みを理解するうえで重要な概念です。

JOINを理解するためのデータ確認

JOINの理解を深めるためには、実際のテーブルデータを確認することがとても大切です。ここでもう一度、今回使用したテーブルの内容を確認してみましょう。

usersテーブル

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

ordersテーブル

 order_id | user_id | product ---------+---------+--------- 1 | 1 | ノート 2 | 2 | ペン 3 | 1 | マウス 4 | 3 | キーボード 5 | 4 | モニター

このように、ordersテーブルにはuser_idという列があり、usersテーブルのidと対応しています。このような共通の値を使ってテーブル同士を結びつけることを、リレーショナルデータベースではリレーションと呼びます。

JOINを理解すると、SQLでより高度なデータ取得ができるようになります。例えば「どのユーザーがどの商品を購入したか」「注文が一度もないユーザーは誰か」「売上データとユーザーデータを組み合わせる」など、実際のアプリケーション開発で必要なデータ分析が可能になります。

MySQLのJOINは、Webアプリケーション開発、データ分析、バックエンド開発、システム開発など、あらゆる場面で使われます。SQL初心者の段階でJOINの基本をしっかり理解しておくと、その後のデータベース学習がとてもスムーズになります。

今回学んだ内容を整理すると、SQLで複数テーブルを結合する方法、JOINの基本構文、INNER JOIN、LEFT JOIN、RIGHT JOINの違いなどです。これらはMySQLのデータベース操作の基礎となる重要な知識です。

実際にSQLを書いてみると、JOINの動きがより理解できるようになります。ぜひ自分のMySQL環境でテーブルを作成し、さまざまなJOINを試してみてください。データベース操作は実際に手を動かしてSQLを実行することで、より深く理解できるようになります。

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

生徒

「今回のMySQLのJOINの解説で、複数のテーブルを結合する仕組みがよく分かりました。今まではテーブルは1つずつ使うものだと思っていたんですが、実際のデータベースでは複数のテーブルを組み合わせて使うんですね。」

先生

「その通りです。データベース設計では、データを整理するために複数のテーブルに分けることが基本になります。そして、そのテーブルを結びつけるためにJOINを使います。SQLを学ぶうえでとても重要な概念です。」

生徒

「INNER JOINは一致するデータだけを取得するJOINで、LEFT JOINは左のテーブルをすべて表示するJOIN、RIGHT JOINは右のテーブルをすべて表示するJOINという違いがあるんですよね。」

先生

「よく理解できていますね。特にINNER JOINとLEFT JOINは実務でも頻繁に使われるSQL構文です。MySQLでデータベース操作をするなら必ず覚えておきたい基本です。」

生徒

「JOINを使うと、ユーザー情報と注文情報を組み合わせて取得できるので、アプリケーションのデータ表示にも役立ちそうですね。」

先生

「その通りです。Webアプリケーション開発では、ユーザー、注文、商品、レビューなど多くのテーブルをJOINしてデータを表示します。SQLのJOINを理解すると、データベースの扱い方が一気に広がります。」

生徒

「これからは、SQLを書くときにJOINを意識してデータを取得してみます。MySQLのデータベース操作が少し理解できた気がします。」

先生

「とても良いですね。JOINはSQLの基礎ですが、データベースを扱う上で非常に強力な機能です。これからもSELECT文やGROUP BYなどと組み合わせて、さらにSQLの理解を深めていきましょう。」

カテゴリの一覧へ
新着記事
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とは?初心者向けに特徴をわかりやすく解説
No.4
Java&Spring記事人気No4
PostgreSQL
PostgreSQLのORDER BYの基本(昇順・降順)
No.5
Java&Spring記事人気No5
PostgreSQL
PostgreSQLでよく使うデータ型一覧(文字列・数値・日付)
No.6
Java&Spring記事人気No6
PostgreSQL
PostgreSQLのLIKE検索(部分一致・前方一致)
No.7
Java&Spring記事人気No7
PostgreSQL
PostgreSQLでスキーマを分割するメリット
No.8
Java&Spring記事人気No8
PostgreSQL
PostgreSQLスキーマ作成・削除完全ガイド!初心者でもわかるデータベース設計の基礎