MySQLのLEFT JOINとは?初心者でもわかる使いどころと書き方をやさしく解説
生徒
「データベースの表をくっつけるって聞いたんですが、LEFT JOINって何をするものなんですか?」
先生
「LEFT JOINは、左側の表を基準にして、右側の表の情報を合体させる方法です。右側にデータがなくても、左側の情報は必ず表示されます。」
生徒
「右側にデータがなくても表示される、というのがよく分かりません……」
先生
「名簿と提出物の表を想像してください。提出していない人も含めて名簿全員を表示したいときに使うのがLEFT JOINです。」
1. LEFT JOINを理解するための前提知識
MySQLは、たくさんのデータを表の形で保存するデータベース管理システムです。 表はエクセルの表や紙の一覧表と同じで、横が項目、縦がデータの並びになっています。
JOINとは、複数の表を共通の情報を使って一つにまとめる操作です。 その中でもLEFT JOINは、「左の表を主役にする」という特徴があります。
2. LEFT JOINとは何か?
LEFT JOINは、「左側のテーブルにあるデータをすべて表示し、右側に一致するデータがあれば一緒に表示する」JOINです。 もし右側に対応するデータがなければ、その部分は空欄になります。
この「空欄」は、データベースの世界ではNULL(ヌル)と呼ばれます。 NULLとは、「何も入っていない状態」を意味します。
3. サンプルで使うテーブルを確認しよう
まずは、会員情報と注文情報の2つの表を見てみましょう。
【usersテーブル】
id | name | age
---+------------+-----
1 | 山田太郎 | 25
2 | 佐藤花子 | 19
3 | 鈴木一郎 | 30
4 | 高橋美咲 | 22
【ordersテーブル】
id | user_id | product
---+---------+----------
1 | 1 | 本
2 | 1 | ペン
3 | 3 | ノート
usersは会員名簿、ordersは注文履歴だと考えてください。 まだ注文したことがない人もいます。
4. LEFT JOINの基本的な書き方
LEFT JOINの基本構文は次の形です。 ONの後ろで、どの列同士をつなぐかを指定します。
SELECT *
FROM users
LEFT JOIN orders
ON users.id = orders.user_id;
このSQLを実行すると、次のような結果になります。
id | name | age | id | user_id | product
---+------------+-----+----+---------+---------
1 | 山田太郎 | 25 | 1 | 1 | 本
1 | 山田太郎 | 25 | 2 | 1 | ペン
2 | 佐藤花子 | 19 | | |
3 | 鈴木一郎 | 30 | 3 | 3 | ノート
4 | 高橋美咲 | 22 | | |
注文していない佐藤花子さんや高橋美咲さんも、usersテーブルに存在するため必ず表示されています。 これがLEFT JOINの最大の特徴です。
5. INNER JOINとの違い
INNER JOINは、両方の表に一致するデータだけを表示します。 そのため、注文していない会員は結果から消えてしまいます。
「全員を一覧で見たい」のか、「共通している人だけを見たい」のかで、 LEFT JOINとINNER JOINを使い分けます。
6. LEFT JOINのよくある使いどころ
LEFT JOINは、「存在しているかどうかを確認したい」ときによく使われます。 例えば、未提出の人、未購入の人、未登録の設定などを探す場面です。
SELECT users.name, orders.product
FROM users
LEFT JOIN orders
ON users.id = orders.user_id
WHERE orders.product IS NULL;
このSQLの実行結果は次のようになります。
name | product
-----------+---------
佐藤花子 |
高橋美咲 |
IS NULLは、「空欄かどうか」を調べるための条件です。 LEFT JOINと組み合わせることで、「まだ何もしていない人」を見つけられます。
7. 初心者がつまずきやすいポイント
LEFT JOINで多い失敗は、WHERE句の条件の書き方です。 右側の表の条件をそのまま書くと、意図せずINNER JOINのような結果になることがあります。
「左の表を必ず表示したい」という目的を忘れず、 NULLの扱いを意識することが大切です。