PostgreSQLのCROSS JOINは、あるテーブルのすべての行を別のテーブルのすべての行と組み合わせ、直積(デカルト積)を作成します。組み合わせの生成、テストデータの作成、2つのデータセットの要素のペアリングなどに便利です。
🔖 クイックリファレンス:すべてのJOINの種類をすぐに確認したいですか?図解とコード例付きのSQL JOINチートシートをご覧ください。
基本構文
SELECT column1, column2
FROM table1
CROSS JOIN table2;
暗黙的な構文を使うこともできます:
SELECT column1, column2
FROM table1, table2;
例:商品と色の組み合わせ
CROSS JOINの動作を示すために、productsとcolorsという2つのシンプルなテーブルを考えてみましょう。
productsテーブル:
| product_id | product_name |
|---|---|
| 1 | Tシャツ |
| 2 | ジーンズ |
colorsテーブル:
| color_id | color_name |
|---|---|
| 1 | 赤 |
| 2 | 青 |
商品と色のすべての組み合わせを生成するには:
SELECT product_name, color_name
FROM products
CROSS JOIN colors;
出力結果:
| product_name | color_name |
|---|---|
| Tシャツ | 赤 |
| Tシャツ | 青 |
| ジーンズ | 赤 |
| ジーンズ | 青 |
CROSS JOINはすべての商品をすべての色と組み合わせるため、2商品 × 2色 = 合計4通りの組み合わせになります。
主な活用例
すべての組み合わせの生成:サイズと色を組み合わせて商品バリエーションを作成します:
SELECT size, color
FROM sizes CROSS JOIN colors;
テストデータの作成:さまざまなパラメータを組み合わせてテスト用のサンプルデータを生成します:
SELECT strategy, scenario
FROM strategies CROSS JOIN scenarios;
レポートテンプレート:レポートで考えられるすべての組み合わせのプレースホルダー行を作成します。
注意点
パフォーマンス:CROSS JOINは非常に大きな結果セットを生成する可能性があります。1,000行のテーブルと別の1,000行のテーブルをクロス結合すると、1,000,000行になります。
フィルタリング:WHERE句を使って結果を絞り込みます:
SELECT product_name, color_name
FROM products CROSS JOIN colors
WHERE product_name = 'T-Shirt';
まとめ
CROSS JOINは組み合わせやテストデータの生成に便利ですが、パフォーマンスの問題を避けるため、大きなテーブルでは慎重に使いましょう。クエリを実行する前に、必ず結果セットのサイズを考慮してください。
Beekeeper Studioは無料のオープンソースのデータベースGUIです
これまで使った中で最高のSQLクエリ&エディタツールです。データベースの管理に必要なものがすべて揃っています。 - ⭐⭐⭐⭐⭐ Mit
Beekeeper Studioは高速で直感的、そして使いやすいツールです。多数のデータベースに対応し、Windows、Mac、Linuxで快適に動作します。
Beekeeper Studio 利用者の声
「Beekeeper Studioは、これまでのSQLワークフローを完全に置き換えました。高速で直感的で、データベース作業が再び楽しくなりました。」
「多くのデータベースGUIを試しましたが、Beekeeperは機能とシンプルさのバランスが完璧です。とにかくちゃんと動きます。」