PostgreSQLのCROSS JOINとは
PostgreSQLの CROSS JOIN は、2つのテーブルの全行同士の組み合わせを生成する JOIN です。
つまり、かけ算(直積) をつくるJOINです。
他のJOIN(INNER JOIN や LEFT JOIN)が「結合条件」を使うのに対し、CROSS JOINは条件を使わず、全行×全行を生成するためです。
テーブルAが3行、テーブルBが4行なら、CROSS JOIN結果は 3 × 4 = 12 行。
まず理解すべきは「結合条件なし」「全組み合わせ」という特徴です。
CROSS JOINが生成するデータと特徴
CROSS JOINのもっとも重要な特徴は以下の通りです。
- 条件が設定できない(設定した場合はエラー)
- 全組み合わせを必ず生成する
- 結果の行数が非常に大きくなりやすい
- LATERALと組み合わせると強力
特に、行数が過剰になり性能への影響には要注意です。
実務で扱う際は、必ずデータ量を意識しましょう。
CROSS JOINの基本的な書き方
● 基本文法
SELECT *
FROM table_a
CROSS JOIN table_b;● CROSSを省略した書き方
PostgreSQLでは、次のように書くこともできます。
SELECT *
FROM table_a, table_b;ただし、可読性と意図を明確にするため、CROSS JOIN の記述を推奨します。
実例で理解するCROSS JOIN
小規模テーブルでのサンプル
【テーブルA:colors】
| id | color |
|---|---|
| 1 | red |
| 2 | blue |
【テーブルB:sizes】
| id | size |
|---|---|
| 1 | S |
| 2 | M |
| 3 | L |
● CROSS JOIN
SELECT color, size
FROM colors
CROSS JOIN sizes
ORDER BY color, size;● 結果
| color | size |
|---|---|
| red | S |
| red | M |
| red | L |
| blue | S |
| blue | M |
| blue | L |
→ 2 × 3 = 6 行が生成される。
「組み合わせを作りたい場面」で力を発揮します。
条件付きのCROSS JOIN(WHERE併用)
CROSS JOIN自体は条件を持てませんが、WHERE句を併用すれば、組み合わせに絞りを掛けられます。
SELECT color, size
FROM colors
CROSS JOIN sizes
WHERE size IN ('M', 'L');→ 結果は 2 × 2 = 4行 に絞られる。
このように、
- まず全組み合わせを作る
- 後で条件で絞る
という考え方が重要です。
INNER JOINやLEFT JOINとの違い
| JOIN種類 | 挙動 |
|---|---|
| INNER JOIN | 一致した行のみ |
| LEFT JOIN | 左側を必ず残す |
| CROSS JOIN | 全組み合わせ(条件なし) |
特徴的なのは、結合条件 ON が存在しないという点です。
そのため、次のような用途には向きません。
× 「一致するデータを取りたい」
× 「外部結合で欠損を残したい」
CROSS JOINは “組み合わせ生成”が本質 です。
CROSS JOINの注意点:巨大化とパフォーマンス
CROSS JOIN最大の注意点は 行数が爆発すること です。
● 例
- テーブルA:10,000行
- テーブルB:50,000行
結果:5億行(= 10,000 × 50,000)
分析用途で使うときは問題ありませんが、
アプリのAPIやダッシュボードで「うっかりCROSS JOIN」は危険です。
● パフォーマンス対策
- WHEREで早く絞る
- CROSSする前に対象テーブルをサブクエリで絞る
- 必要な列だけSELECTする
- LIMITを併用する
- マテリアライズドビューで管理する
「意図して使う」ことが何よりも大切です。
まとめ:CROSS JOINを使いこなすポイント
- CROSS JOINは 全組み合わせを生成するJOIN
- 条件がなく行数が増えやすい
- JOIN条件が必要な場合は、INNER/LEFT JOINを使う
- WHEREと組み合わせれば絞込みも可能
- KPI集計・テストデータ生成・カレンダー生成など実務で役立つ
特にPostgreSQLでは、CROSS JOINはLATERALと組み合わせることでさらに強力 になるため、基礎としてしっかり理解しておくべき要素です。
DB関連おすすめ書籍
基礎から実務レベルまで体系的に学べる“DBエンジニア必携の2冊”として特におすすめです。



コメント