PostgreSQLのFULL OUTER JOIN完全解説|初心者でもわかる全件取得SQL入門
生徒
「PostgreSQLのJOINって種類が多くて混乱します。FULL OUTER JOINは何をするものなんですか?」
先生
「FULL OUTER JOINは、2つの表にあるデータを、条件に合う・合わないに関係なく、すべて表示するための方法です。名簿を2冊並べて、載っている人を全員書き出すイメージですね。」
生徒
「表にしか載っていない人も表示されるんですか?」
先生
「はい。どちらか一方にしか存在しないデータも、空白を使いながらすべて表示されます。SQLが初めてでも、紙の表を想像すると理解しやすいですよ。」
1. PostgreSQLとSQLの基本
PostgreSQLは、データベースと呼ばれる「情報を表の形で保存する仕組み」の一つです。データベースは、学校の名簿や住所録のように、行と列で情報を管理します。そのデータベースを操作するための言葉がSQLです。
SQLを使うと、必要な情報を探したり、複数の表を組み合わせて表示したりできます。JOINは、その中でも「表と表をつなぐ」ための重要な考え方です。
2. JOINとは何かをやさしく理解する
JOINとは、2つ以上の表を共通の項目で結びつける操作です。例えば「会員情報の表」と「注文履歴の表」を、同じ会員IDでつなぐことで、誰が何を注文したかが分かります。
紙の名簿を横に並べて、同じ番号の人を線で結ぶイメージをすると、JOINの役割が見えてきます。
3. INNER・LEFT・RIGHT JOINとの違い
INNER JOINは、両方の表に存在するデータだけを表示します。LEFT JOINは、左側の表をすべて表示し、右側に無い場合は空白になります。RIGHT JOINは、その逆です。
FULL OUTER JOINは、これらすべてを含んだ考え方で、「左右どちらにしか無いデータも全部表示する」という特徴があります。
4. FULL OUTER JOINの基本構文
FULL OUTER JOINは、2つの表を完全に結合します。どちらか一方にしか存在しない行も結果に含まれます。データが存在しない側の列にはNULLという空白の値が入ります。
SELECT *
FROM users
FULL OUTER JOIN orders
ON users.id = orders.user_id;
5. サンプルテーブルで理解するFULL OUTER JOIN
まずは、2つの表の中身を確認します。
users テーブル
id | name | age
---+------------+-----
1 | 山田太郎 | 25
2 | 佐藤花子 | 19
3 | 鈴木一郎 | 30
4 | 高橋次郎 | 40
orders テーブル
id | user_id | product
---+---------+---------
1 | 1 | 本
2 | 2 | ペン
3 | 5 | ノート
SELECT users.name, orders.product
FROM users
FULL OUTER JOIN orders
ON users.id = orders.user_id;
name | product
-----------+---------
山田太郎 | 本
佐藤花子 | ペン
鈴木一郎 | NULL
高橋次郎 | NULL
NULL | ノート
6. NULLの意味と扱い方
NULLとは、「値が存在しない」ことを表します。0や空文字とは違い、そもそも情報が無い状態です。FULL OUTER JOINでは、片方にしか無いデータを表示するため、NULLがよく登場します。
初心者の方は「空欄」と考えると理解しやすいです。
7. WHERE句と組み合わせる注意点
FULL OUTER JOINの結果にWHERE句を使うと、条件によってはデータが消えてしまうことがあります。NULLは普通の比較ができないため、IS NULLという特別な書き方を使います。
SELECT *
FROM users
FULL OUTER JOIN orders
ON users.id = orders.user_id
WHERE orders.product IS NULL;
8. FULL OUTER JOINが役立つ場面
FULL OUTER JOINは、データの抜け漏れを確認したいときに便利です。例えば、登録はあるが注文が無い人、注文はあるが登録情報が無い人を同時に確認できます。
業務では、データチェックや一覧表示に使われることが多く、PostgreSQLのJOIN入門では必ず知っておきたい考え方です。