PostgreSQLでCROSS JOINを使いこなす方法|SQL例で理解する

目次

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】

idcolor
1red
2blue

【テーブルB:sizes】

idsize
1S
2M
3L

● CROSS JOIN

SELECT color, size
FROM colors
CROSS JOIN sizes
ORDER BY color, size;

● 結果

colorsize
redS
redM
redL
blueS
blueM
blueL

→ 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冊”として特におすすめです。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

・20代
・IT未経験からSIerに就職、開発とプロジェクト管理を経験
・働いている中で会計に興味を持ち、ERPの会計領域を挑戦中
・筋トレ最高!
保有資格:日商簿記1級/応用情報/ITストラテジスト

コメント

コメントする

目次