CROSS JOIN の使い方
すべての組み合わせ
書き方
FROM a CROSS JOIN b
a の行数 × b の行数の組み合わせを作ります。同じ表を 2 回書けば自己結合(社員と上司)もできます。
よく使うオプション
| オプション | 意味 |
|---|---|
CROSS JOIN | すべての行の組み合わせを作る(行数 × 行数) |
自己結合 | 同じ表に別の別名をつけて 2 回書き、表の中の行どうしをつなぐ |
例
SELECT d.name, s.size FROM departments d CROSS JOIN (VALUES ('S'), ('M'), ('L')) AS s(size);部署 3 つとサイズ 3 つの、9 通りの組み合わせを作ります。
SELECT e.name, m.name AS manager
FROM employees e
JOIN employees m ON m.id = e.manager_id; name | manager
------+---------
田中 | 佐藤
鈴木 | 佐藤
(2 rows)社員と、その上司の名前を並べて出します。同じ employees 表を e と m の 2 つとして使っています。
SELECT a.name, b.name FROM employees a JOIN employees b ON a.dept_id = b.dept_id AND a.id < b.id;
同じ部署の社員の 2 人組を、重なりなしで作ります。a.id < b.id で同じ組を 2 回出さないようにします。
よくある間違い・注意
- CROSS JOIN は行数がかけ算で増えます。1000 行と 1000 行なら 100 万行です。
- FROM a, b と , で並べて WHERE を書き忘れると、CROSS JOIN と同じになります。
実際に打って練習する
SQL コースの Lv29「自分とつなぐ・全部の組み合わせ」で覚えます。ブラウザの中のシミュレーターで、本物と同じように打って確かめられます。
Lv1〜3 は、登録不要・無料で遊べます(それより先はブロンズ以上のプランで遊べます)。