PostgreSQLのLEFT JOIN完全入門!不足データを補いながらテーブル結合する仕組みをやさしく解説
生徒
「表と表をつなげると、データが消えることがあるって聞きました。本当ですか?」
先生
「使い方によっては表示されないデータがあります。でもLEFT JOINを使うと、消さずにそのまま残すことができます。」
生徒
「データが足りない場合でも大丈夫なんですか?」
先生
「はい。LEFT JOINは、足りない部分を空白のまま補って表示してくれる仕組みです。」
1. SQLとは何か?
SQLは、データベースという「情報を表の形で整理して保存する箱」に対して命令を出すための言語です。紙の名簿から特定の人を探したり、条件に合う人だけを抜き出したりする作業を、パソコンにお願いするための言葉です。
PostgreSQLは、このSQLを使って操作するデータベースソフトで、多くの企業やサービスで利用されています。
2. テーブルを分けて管理する理由
データベースでは、情報を一つの表にまとめず、役割ごとに複数のテーブルに分けて管理します。これは、同じ情報を何度も書かなくて済むようにするためです。
例えば、会員の名前や年齢は会員表に、購入した商品は注文表に分けて保存します。
3. LEFT JOINとは何か
LEFT JOINは、「左側に書いたテーブルのデータをすべて表示する」結合方法です。右側のテーブルに対応するデータがなくても、左側の情報は消えずに表示されます。
これは、名簿を必ず全員分表示し、情報が足りない部分は空白にするイメージです。
4. サンプルテーブルを確認しよう
今回使う二つのテーブルを確認します。
users テーブル
id | name | age | email
---+------------+-----+-------------------
1 | 山田太郎 | 25 | taro@example.com
2 | 佐藤花子 | 19 | hanako@example.com
3 | 鈴木一郎 | 30 | ichiro@example.com
4 | 高橋次郎 | 22 | jiro@example.com
orders テーブル
id | user_id | product
---+---------+---------
1 | 1 | 本
2 | 1 | ペン
3 | 2 | ノート
ordersには、鈴木一郎さんと高橋次郎さんの注文が登録されていません。
5. INNER JOINとの違いを知ろう
INNER JOINでは、両方のテーブルに存在するデータだけが表示されます。そのため、注文のない人は結果に出てきません。
LEFT JOINは、注文がなくても会員情報を必ず表示したいときに使います。
6. LEFT JOINの基本的な書き方
LEFT JOINは、INNER JOINと書き方がよく似ていますが、JOINの種類が違います。
SELECT users.name, orders.product
FROM users
LEFT JOIN orders
ON users.id = orders.user_id;
name | product
-----------+---------
山田太郎 | 本
山田太郎 | ペン
佐藤花子 | ノート
鈴木一郎 |
高橋次郎 |
7. 空白で表示されるデータの意味
結果に表示される空白は、「データが存在しない」ことを表しています。エラーではなく、情報が登録されていないだけです。
LEFT JOINでは、この空白を確認することで、「まだ注文していない人」などを見つけることができます。
8. WHEREを使って不足データを探す
LEFT JOINとWHEREを組み合わせると、足りないデータだけを抽出できます。
SELECT users.name
FROM users
LEFT JOIN orders
ON users.id = orders.user_id
WHERE orders.id IS NULL;
name
------
鈴木一郎
高橋次郎
9. 日常生活で考えるLEFT JOINの例え
LEFT JOINは、クラスの名簿を机に広げて、給食の申込書を横に並べる作業と同じです。申込書がない生徒でも、名簿から名前が消えることはありません。
PostgreSQLのLEFT JOINを理解すると、データが足りない状態も含めて確認できるようになり、管理やチェック作業がとても楽になります。