PostgreSQLのRIGHT JOIN完全入門!初心者でもわかる使いどころと仕組み
生徒
「LEFT JOINはよく聞くんですけど、RIGHT JOINってあまり見かけません。何のためにあるんですか?」
先生
「RIGHT JOINは、右側の表を基準にしてデータを並べたいときに使います。名簿と出席表を比べて、出席表を必ず全部表示したい場合に便利です。」
生徒
「表を基準にするって、どういう意味ですか?」
先生
「どの表のデータを必ず表示するか、という考え方です。RIGHT JOINでは右側の表の行がすべて表示されます。」
1. SQLとは何か?
SQLは、データベースという「情報を表の形でたくさん保存しておく場所」に命令を出すための言葉です。紙のノートに書いた名簿を探したり、並べ替えたりする作業を、パソコンにお願いするための道具だと考えてください。PostgreSQLは、そのSQLを使って操作できるデータベースの一種です。
2. JOINとは何をする仕組みか
JOINとは、別々の表をつなぎ合わせて一つの結果として表示する仕組みです。例えば「生徒の名前が書いてある表」と「テストの点数が書いてある表」が別々にあった場合、それを合体させて「誰が何点を取ったか」を表示できます。このとき、どの表を中心に考えるかでINNER JOINやLEFT JOIN、RIGHT JOINが使い分けられます。
3. RIGHT JOINの基本的な考え方
RIGHT JOINは、右側に書いた表のデータを必ずすべて表示するJOINです。左側の表に対応するデータがなくても、右側の表にある行は消えません。対応するデータがない部分は、空っぽで表示されます。この空っぽの状態をNULLと呼び、「値が存在しない」という意味になります。
4. テーブルの例で理解するRIGHT JOIN
まずは、社員と部署の表を例にします。社員がまだ配属されていない部署も確認したい、という場面を想像してください。
employees
id | name | department_id
---+------------+---------------
1 | 田中一郎 | 1
2 | 佐藤花子 | 2
3 | 鈴木次郎 | 1
departments
id | department_name
---+----------------
1 | 営業部
2 | 開発部
3 | 総務部
SELECT employees.name, departments.department_name
FROM employees
RIGHT JOIN departments
ON employees.department_id = departments.id;
name | department_name
---------+----------------
田中一郎 | 営業部
鈴木次郎 | 営業部
佐藤花子 | 開発部
| 総務部
総務部には社員がいませんが、RIGHT JOINを使うことで、部署の情報は必ず表示されています。これがRIGHT JOINの大きな特徴です。
5. RIGHT JOINの使いどころ
RIGHT JOINは、「右側の表を主役にしたい」ときに使います。例えば、商品マスタと注文履歴があり、注文が一度もない商品も含めて一覧表示したい場合です。売れていない商品を確認したいときに役立ちます。左側の表を基準にしたい場合はLEFT JOIN、右側ならRIGHT JOINと覚えると整理しやすくなります。
6. LEFT JOINとの違いを整理する
RIGHT JOINとLEFT JOINは、実は左右を入れ替えると同じ結果になります。そのため、現場ではLEFT JOINがよく使われますが、すでに書かれたSQLを読むときにはRIGHT JOINを理解していないと混乱します。「どちらの表を必ず表示したいか」という視点で見ることが大切です。
SELECT employees.name, departments.department_name
FROM departments
LEFT JOIN employees
ON employees.department_id = departments.id;
7. RIGHT JOINを読むときのコツ
RIGHT JOINを見たら、まずFROMの後にある表とRIGHT JOINの後にある表を確認してください。そして「右の表が必ず残る」と頭の中で言葉にすると理解しやすくなります。最初は難しく感じますが、表を紙に書いて線で結ぶイメージを持つと、仕組みが自然と見えてきます。