直積(チョクセキ)とは?データベースの集合演算を初心者向けに解説
生徒
「先生、データベースの集合演算に直積(チョクセキ)という言葉が出てきました。これはどんな意味なんですか?」
先生
「直積(チョクセキ)は、二つの表(テーブル)のすべての組み合わせを作り出す集合演算(シュウゴウエンザン)のひとつです。英語ではCartesian Product(カーティジアンプロダクト)と呼ばれます。」
生徒
「すべての組み合わせってどういうことですか?なんだかデータがすごく増えそうですね。」
先生
「その通りです。直積をすると、片方の表の行ともう片方の表の行をすべて組み合わせるので、結果は掛け算のように増えていきます。」
1. 直積(チョクセキ)とは?
直積(チョクセキ)とは、データベースの集合演算のひとつで、二つの表(テーブル)に含まれる全ての行(レコード)を組み合わせて新しい表を作る操作のことです。英語ではCartesian Product(カーティジアンプロダクト)と呼ばれます。数学の集合における直積の考え方をデータベースに応用したものです。
例えば表Aに3行、表Bに4行があれば、直積の結果は3 × 4 = 12行となります。つまり、掛け算のように行数が膨れ上がるのが直積の特徴です。
2. 直積の読み方と意味
直積は、読み方は直積(チョクセキ)といいます。英語表記はCartesian Product(カーティジアンプロダクト)です。意味は「すべての組み合わせを作り出すこと」であり、表と表の全レコードをペアにして結果を得る操作です。
日常生活に例えるなら「服と靴をすべての組み合わせで試す」といったイメージに近いです。シャツが3枚、靴が2足あれば、全部で6通りの組み合わせができます。これが直積の基本的な考え方です。
3. 直積の具体例
分かりやすくするために例を挙げましょう。次のような表があるとします。
表A(商品リスト)
商品ID | 商品名
1 | りんご
2 | バナナ
表B(店舗リスト)
店舗ID | 店舗名
101 | 東京店
102 | 大阪店
103 | 名古屋店
この二つの表を直積すると、次のような結果になります。
結果(直積)
商品ID | 商品名 | 店舗ID | 店舗名
1 | りんご | 101 | 東京店
1 | りんご | 102 | 大阪店
1 | りんご | 103 | 名古屋店
2 | バナナ | 101 | 東京店
2 | バナナ | 102 | 大阪店
2 | バナナ | 103 | 名古屋店
このように、すべての組み合わせが結果に現れます。商品数が2、店舗数が3なので、結果は2 × 3 = 6行になります。
4. 直積のSQLでの書き方
SQL(エスキューエル、Structured Query Languageの略、読み方はストラクチャードクエリランゲージ)では、直積を求めるときに特別なキーワードを使う必要はありません。単にカンマで二つの表を指定すると直積が得られます。
SELECT *
FROM 商品, 店舗;
このSQL文を実行すると、商品表と店舗表のすべての組み合わせが出力されます。多くの場合、直積だけではなく、条件を加えて「どの商品がどの店舗で販売されているか」などを絞り込むことが多いです。
5. 直積と内部結合の関係
直積は内部結合(ナイブケツゴウ)や外部結合(ガイブケツゴウ)と深い関係があります。結合(ジョイン)も集合演算の応用で、特定の条件で二つの表を組み合わせる操作です。
直積は「無条件の結合」と考えることができます。つまり、条件を何も指定しないで全ての組み合わせを作る操作です。そのため、多くの場合は直積にWHERE条件をつけて、必要なデータだけを残す形で内部結合に発展させます。
6. 直積の注意点
直積を使うときには、いくつかの注意点があります。
- 結果が非常に大きくなりやすい(表Aが100行、表Bが200行なら結果は20,000行)
- 不要な組み合わせまで含まれるため、そのまま使うことは少ない
- 実務では直積に条件を組み合わせて結合(ジョイン)として使うのが一般的
直積を単独で使うよりも、「全ての組み合わせを一度作ってから条件で絞る」という考え方を理解しておくと応用しやすくなります。
7. 直積の使いどころ
直積は一見すると無駄が多いように見えますが、実はとても重要な役割を持っています。
- 商品の一覧と店舗一覧を直積してから、販売データを条件で結合する
- 全社員と全資格を直積して、未取得資格を洗い出す
- 全ユーザーと全サービスを直積して、利用していないサービスを確認する
このように直積は、他の集合演算や結合の基礎になる演算であり、データベースを理解するうえで避けては通れない重要な仕組みです。