MySQL JOIN入門完全ガイド!初心者でもわかる複数テーブル結合の基本(INNER JOIN・LEFT JOIN・RIGHT JOIN対応)
生徒
「MySQLを勉強していたらJOINっていう言葉が出てきたんですが、これは何をするものなんですか?」
先生
「JOINは、複数のテーブルを結合して1つの表としてデータを取り出すためのSQLの機能です。データベースでは、情報を整理するために複数のテーブルに分けて保存することが多いので、そのテーブルをつなげて使うときにJOINを使います。」
生徒
「テーブルをつなげるって、どういうイメージですか?」
先生
「例えば、学校の名簿とテストの点数表が別々にあるとします。名前でその2つを合わせると、誰が何点だったかが分かりますよね。そのように、共通の情報を使って表を結びつけるのがJOINです。」
生徒
「なるほど!つまり複数の表を1つの表のように使えるんですね。」
先生
「その通りです。MySQLのデータベース操作ではとても重要な機能なので、ゆっくり順番に理解していきましょう。」
1. MySQLのJOINとは?複数テーブルを結合する仕組み
MySQLのJOINとは、複数のテーブルに分かれて保存されているデータを結合して1つの結果として表示するSQLの機能です。 データベースでは、情報を整理するためにデータをいくつかのテーブルに分けて管理します。
例えば、次のようなデータベースがあるとします。
・ユーザー情報テーブル
・注文情報テーブル
この2つのテーブルを組み合わせることで、 「どのユーザーが何を注文したのか」 という情報を取得できます。
このように、複数テーブルを関連付けてデータを取得する方法がJOINです。 MySQL、SQL、データベース操作を学ぶうえで必ず覚える重要な技術です。
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を書く方法
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で一致するデータだけ取得する
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で左テーブルのデータをすべて取得する
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で右テーブルのデータをすべて取得する
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の理解を深めていきましょう。」