MySQLのJOINとは?INNER JOIN・LEFT JOIN・RIGHT JOINを初心者向けに完全解説
生徒
「MySQLでJOINって出てきたんですけど、何をしているのか全然わかりません…」
先生
「JOINは、別々の表をつなぎ合わせて、一つの結果として見るための仕組みです。紙の名簿を並べて見比べるようなイメージですね。」
生徒
「表をつなぐって、どういうことですか?」
先生
「例えば、会員の名前が書いてある表と、注文内容が書いてある表を、同じ人ごとにまとめて見ることです。パソコンが苦手でも大丈夫ですよ。」
1. MySQLのJOINとは?
MySQLのJOINとは、データベースにある複数のテーブルを、共通する情報をもとに結合して表示するための仕組みです。 データベースとは、たくさんの情報を表の形で整理して保存しておく箱のようなものです。
JOINを使わない場合、表は一つずつしか見られません。しかし実際の仕事や学習では、 「誰が」「何を」「いつ」行ったのかを、まとめて確認したい場面がよくあります。 そのときに活躍するのがMySQLのJOINです。
難しく感じるかもしれませんが、「別々の紙の表を、同じ番号の人ごとに重ねて見る」と考えると理解しやすくなります。
2. JOINを説明するためのサンプルテーブル
まずは、JOINの説明で使うテーブルを確認しましょう。 今回は「users(利用者)」と「orders(注文)」という2つの表を使います。
usersテーブル(利用者の表)
id | name | age
---+------------+-----
1 | 山田太郎 | 25
2 | 佐藤花子 | 19
3 | 鈴木一郎 | 30
4 | 高橋次郎 | 22
ordersテーブル(注文の表)
id | user_id | product
---+---------+---------
1 | 1 | ノート
2 | 1 | ペン
3 | 3 | パソコン
4 | 5 | マウス
user_idは、「どの利用者の注文か」を表す番号です。 usersテーブルのidと同じ数字を使うことで、誰の注文なのかが分かるようになっています。
3. INNER JOINの基本
INNER JOINは、両方のテーブルに共通して存在するデータだけを表示します。 「両方に載っている人だけをまとめて見る」というイメージです。
SELECT users.name, orders.product
FROM users
INNER JOIN orders
ON users.id = orders.user_id;
実行結果
name | product
-----------+----------
山田太郎 | ノート
山田太郎 | ペン
鈴木一郎 | パソコン
usersとordersの両方に存在する人だけが表示されています。 ordersに存在しない佐藤花子さんや高橋次郎さんは表示されません。 これがINNER JOINの特徴です。
4. LEFT JOINの基本
LEFT JOINは、左側に書いたテーブルを基準にして表示します。 注文がなくても、利用者の情報はすべて表示されます。
SELECT users.name, orders.product
FROM users
LEFT JOIN orders
ON users.id = orders.user_id;
実行結果
name | product
-----------+----------
山田太郎 | ノート
山田太郎 | ペン
佐藤花子 | NULL
鈴木一郎 | パソコン
高橋次郎 | NULL
注文がない人はproductがNULLになります。 NULLとは「何も入っていない」という意味です。 LEFT JOINは、「全員の名簿を見たいとき」によく使われます。
5. RIGHT JOINの基本
RIGHT JOINは、右側に書いたテーブルを基準にして表示します。 今回は注文の表を中心に見たい場合に使います。
SELECT users.name, orders.product
FROM users
RIGHT JOIN orders
ON users.id = orders.user_id;
実行結果
name | product
-----------+----------
山田太郎 | ノート
山田太郎 | ペン
鈴木一郎 | パソコン
NULL | マウス
user_idが5の注文は、usersテーブルに存在しないため、名前がNULLになります。 RIGHT JOINは、「注文の一覧をすべて確認したい」ときに役立ちます。
6. JOINでよく使われる考え方
MySQLのJOINを理解するコツは、「どの表を基準にしたいか」を意識することです。 INNER JOINは共通部分だけ、LEFT JOINは左側を全部、RIGHT JOINは右側を全部表示します。
最初は混乱しやすいですが、紙の表を指でなぞりながら見比べるように考えると、 少しずつ仕組みが見えてきます。 プログラミング未経験でも、焦らず繰り返し見ることが大切です。