PostgreSQLのJOIN完全入門!INNER・LEFT・RIGHT JOINで学ぶテーブル結合の基本
生徒
「データベースの表がたくさんあると聞きましたが、別々の表はどうやって一緒に見るんですか?」
先生
「そのときに使うのがJOINです。JOINは、複数の表を横につなげて、一つの大きな表のように見るための仕組みです。」
生徒
「表をつなげるって難しそうです。パソコンが苦手でも分かりますか?」
先生
「大丈夫です。名簿と住所録を並べて見比べる感覚で説明します。」
1. SQLとは何か?
SQLは、データベースという「情報を表の形で整理して保存する箱」に命令を出すための言葉です。紙の名簿を並べ替えたり、必要な行だけを抜き出したりする作業を、パソコンにお願いするための道具だと考えてください。
PostgreSQLは、このSQLを使って操作するデータベースソフトの一つで、無料で使えて信頼性が高いことで知られています。
2. テーブルとは何かを理解しよう
データベースの中身は「テーブル」と呼ばれる表で管理されています。テーブルは、縦が項目、横がデータです。学校の名簿で言うと、名前や年齢が項目で、一人ひとりの情報が横一列に並びます。
実際のシステムでは、情報を分かりやすく管理するために、表を一つにまとめず、役割ごとに分けて保存します。
3. JOINが必要になる理由
例えば「会員の情報」と「注文の情報」を一つの表に全部入れると、同じ名前やメールアドレスが何度も書かれてしまいます。これを防ぐために、表を分けて管理します。
ただし、分けたままだと情報が見づらくなります。そこでJOINを使って、必要なときだけ表をつなげて表示します。
4. サンプルとなるテーブルを確認しよう
まずは、二つのテーブルの中身を見てみます。
users テーブル
id | name | age
---+------------+----
1 | 山田太郎 | 25
2 | 佐藤花子 | 19
3 | 鈴木一郎 | 30
4 | 高橋次郎 | 22
orders テーブル
id | user_id | item
---+---------+------
1 | 1 | 本
2 | 1 | ペン
3 | 2 | ノート
4 | 4 | 本
usersは会員名簿、ordersは購入履歴です。user_idが、どの人の注文かを示しています。
5. INNER JOINの基本
INNER JOINは「両方の表に共通して存在するデータだけ」を表示します。名簿と出席表を見比べて、両方に名前がある人だけを抜き出すイメージです。
SELECT users.name, orders.item
FROM users
INNER JOIN orders
ON users.id = orders.user_id;
name | item
-----------+------
山田太郎 | 本
山田太郎 | ペン
佐藤花子 | ノート
高橋次郎 | 本
6. LEFT JOINとは何か
LEFT JOINは「左側の表を基準にして、右側の表をつなげる」方法です。右側に対応するデータがなくても、左側の情報は必ず表示されます。
これは、名簿に全員の名前を書き、注文がない人は空白のままにするイメージです。
SELECT users.name, orders.item
FROM users
LEFT JOIN orders
ON users.id = orders.user_id;
name | item
-----------+------
山田太郎 | 本
山田太郎 | ペン
佐藤花子 | ノート
鈴木一郎 |
高橋次郎 | 本
7. RIGHT JOINの考え方
RIGHT JOINは、LEFT JOINの反対で「右側の表を基準」にします。注文履歴を必ず表示し、会員情報がない場合でも注文は表示されます。
SELECT users.name, orders.item
FROM users
RIGHT JOIN orders
ON users.id = orders.user_id;
name | item
-----------+------
山田太郎 | 本
山田太郎 | ペン
佐藤花子 | ノート
高橋次郎 | 本
8. JOINを使うときの注意点
JOINでは、どの列同士をつなげるかがとても重要です。今回はusers.idとorders.user_idを使いました。このような列を「関連づけるための番号」と考えると分かりやすいです。
また、JOINの種類によって表示される行が変わるため、「どの表を基準にしたいか」を意識することが大切です。
9. 日常生活で考えるJOINのイメージ
JOINは、名前が書かれた名簿と、買い物メモを机に並べて、同じ人の情報を横に並べる作業と同じです。INNER JOINは両方にある人だけ、LEFT JOINは名簿を優先、RIGHT JOINは買い物メモを優先します。
PostgreSQLのJOINを理解すると、バラバラに保存された情報を一度に見られるようになり、データベース操作が一気に楽になります。