JOIN の使い方
表をつなぐ(内部結合)
書き方
FROM 表 a JOIN 表 b ON a.列 = b.列
ON の条件に合う組み合わせだけを残します。INNER JOIN と同じ。同じ名前の列は 別名.列 で区別します。
よく使うオプション
| オプション | 意味 |
|---|---|
JOIN … ON 条件 | 条件に合う組み合わせだけを残す(INNER JOIN と同じ) |
表 別名 | 表に短い名前をつける(e.name のように使う) |
USING (列) | 両方の表で同じ名前の列でつなぐ |
例
SELECT e.name, d.name AS dept
FROM employees e
JOIN departments d ON d.id = e.dept_id; name | dept
------+------
佐藤 | 営業
鈴木 | 開発
(2 rows)社員に部署の名前をつけて出します。社員の dept_id と部署の id が同じ行どうしをつなぎます。
SELECT c.name, o.total FROM orders o JOIN customers c ON c.id = o.customer_id WHERE o.total >= 10000;
1 万円以上の注文に、客の名前をつけて出します。つないだ後に WHERE で絞れます。
SELECT e.name, d.name, o.id FROM employees e JOIN departments d ON d.id = e.dept_id JOIN orders o ON o.customer_id = e.id;
JOIN を続けて書くと、3 つ以上の表もつなげます。
よくある間違い・注意
- 相手の表に合う行が無い行は、結果から消えます。消したくないときは LEFT JOIN を使います。
- ON の条件を書き間違えると、組み合わせが増えて行数がふくれます。つないだ後の件数を COUNT(*) で確かめると安心です。
- 両方の表に同じ名前の列(name など)があるときは、e.name のように表の名前か別名を付けます。
実際に打って練習する
SQL コースの Lv26「表をつなぐ JOIN」で覚えます。ブラウザの中のシミュレーターで、本物と同じように打って確かめられます。
Lv1〜3 は、登録不要・無料で遊べます(それより先はブロンズ以上のプランで遊べます)。