PostgreSQLのCROSS JOIN完全解説|初心者でもわかる全組み合わせ取得SQL入門
生徒
「PostgreSQLのJOINを勉強しているんですが、CROSS JOINって何をするものなんですか?」
先生
「CROSS JOINは、2つの表にあるデータを、条件を使わずにすべて組み合わせて表示する方法です。全パターンを一覧にしたいときに使います。」
生徒
「条件が無いJOINなんて、イメージしづらいです……」
先生
「名簿Aの全員と、名簿Bの全員を、片っ端から組み合わせて表に書き出すイメージです。パソコンが苦手でも、紙で考えると理解できますよ。」
1. SQLとは何か?
SQLは、データベースに保存されている情報を操作するための言語です。データベースとは、たくさんの情報を表の形で整理して保存する箱のようなものです。
例えば、会員名簿、商品一覧、注文履歴などを、行と列で管理します。SQLを使うと、その表の中から必要な情報を取り出したり、複数の表を組み合わせたりできます。
2. JOINの基本的な考え方
JOINは、複数の表を一つの表のように扱うための仕組みです。多くの場合は「共通の番号」や「同じID」を使って表同士を結びつけます。
INNER JOINやLEFT JOINは「一致する条件」を使いますが、CROSS JOINは条件を使わない、少し特殊なJOINです。
3. CROSS JOINとは何をするものか
CROSS JOINは、2つの表にある行をすべて組み合わせて表示します。片方の表が3行、もう片方が4行あれば、結果は3×4で12行になります。
これは「直積」とも呼ばれ、全パターンを作りたいときに使われます。初心者の方は「全部掛け算するJOIN」と覚えると分かりやすいです。
4. CROSS JOINの基本構文
PostgreSQLでCROSS JOINを使うときの基本的な書き方はとてもシンプルです。ON句は書きません。
SELECT *
FROM users
CROSS JOIN roles;
このSQLは、usersテーブルとrolesテーブルの全行を組み合わせて表示します。
5. サンプルテーブルで全組み合わせを確認
まずは、2つの表の中身を確認します。
users テーブル
id | name | age
---+------------+-----
1 | 山田太郎 | 25
2 | 佐藤花子 | 19
3 | 鈴木一郎 | 30
roles テーブル
id | role_name
---+----------
1 | 管理者
2 | 一般
SELECT users.name, roles.role_name
FROM users
CROSS JOIN roles;
name | role_name
-----------+----------
山田太郎 | 管理者
山田太郎 | 一般
佐藤花子 | 管理者
佐藤花子 | 一般
鈴木一郎 | 管理者
鈴木一郎 | 一般
6. WHERE句とCROSS JOINの組み合わせ
CROSS JOINは条件なしで結合しますが、後からWHERE句で絞り込むことができます。これにより、全組み合わせを作ってから必要なものだけを選びます。
SELECT users.name, roles.role_name
FROM users
CROSS JOIN roles
WHERE roles.role_name = '管理者';
このSQLでは、全組み合わせの中から「管理者」だけを取り出しています。
7. INNER JOINとの違いを理解する
INNER JOINは「条件が一致する行だけ」を表示します。一方、CROSS JOINは条件を無視して全行を組み合わせます。
そのため、データ量が多いと結果が一気に増える点に注意が必要です。初心者の方は、行数が増える理由を「掛け算」として考えると混乱しにくくなります。
8. CROSS JOINが使われる場面
CROSS JOINは、日付と商品を全組み合わせで表示したい場合や、設定パターンをすべて洗い出したい場合に使われます。
PostgreSQLのJOIN入門として、INNER・LEFT・RIGHT JOINと一緒に理解しておくと、SQLの考え方がぐっと広がります。