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 は、登録不要・無料で遊べます(それより先はブロンズ以上のプランで遊べます)。

SQL 構文一覧(使い方と例)へ戻る