交差結合(CROSS JOIN句)

広告
eyecatch

2つのテーブルを結合してデータを取得する方法の中で、2つのテーブルのデータの全ての組み合わせを取得する方法が交差結合です。ここでは交差結合を行うための CROSS JOIN 句の使い方について解説します。

交差結合とは

最初に交差結合について簡単に説明しておきます。交差結合とは2つのテーブルのデータの全ての組み合わせを取得するものです。

次の図を見て下さい。左側のテーブルのデータ1つにつき右側のテーブルをデータを最初から最後まで1つずつ結合します。そして左側のデータがなくなるまで繰り返します。

交差結合とは(1)

結合したデータの数は左側のテーブルのデータが n 個、右側のデータが m 個だった場合 n × m 個となり場合によっては非常に多くなりますのでご注意ください。

CROSS JOIN句の使い方

SELECT 文と CROSS JOIN 句を組み合わせることで2つのテーブルを交差結合させてデータを取得することができます。書式は次の通りです。

SELECT テーブル名.カラム名, ... FROM テーブル名1
  CROSS JOIN テーブル名2
  ON テーブル名1.カラム名1 = テーブル名2.カラム名2;

長いので簡略化すると次のようになります。

SELECT (取得するカラム) FROM テーブル名1
  CROSS JOIN テーブル名2 ON (結合条件);

ON 句も指定できますが CROSS JOIN 句では結合条件を指定せずに使用するケースが多いのではないかと思いますので以下の解説でも結合条件は省略して解説します。

-- --

それでは簡単な例を使ってどのように使用するのかについて確認します。製品の一覧が登録された product テーブルと、色のパターンが登録された color テーブルを用意しました。それぞれ INSERT 文を使ってデータを格納してあります。

create table product(id integer, name text);

insert into product values(1, 'Desk');
insert into product values(2, 'Light');
insert into product values(3, 'Chair');

CROSS JOIN句の使い方(1)

create table color(id integer, name text);

insert into color values(1, 'Red');
insert into color values(2, 'Blue');
insert into color values(3, 'White');

CROSS JOIN句の使い方(2)

では次のように交差結合し、データを取得してみます。

select * from product cross join color;

CROSS JOIN句の使い方(3)

product テーブルのデータ 1 つ 1 つに対して color テーブルのデータを 1 つずつ結合したデータを取得することができました。

データの結合方法に関する解説

先ほどのサンプルを元にどのようにテーブルが交差結合されるのかについて確認していきます。まず SELECT 文の最初に記述されたテーブルの1つ目のデータに対して結合が行われます。

id name  
---------
1  Desk

このデータに対して color テーブルの全てのデータとそれぞれ結合してデータとして返します。

id name      id  name
------------------------
1  Desk      1   Red
1  Desk      2   Blue
1  Desk      3   White

product テーブルのデータを順番に同じように結合していきます。最後まで同じ手順で結合したら終了です。最終的に取得できるデータは次の通りです。

id name      id  name
------------------------
1  Desk      1   Red
1  Desk      2   Blue
1  Desk      3   White
2  Light     1   Red
2  Light     2   Blue
2  Light     3   White
3  Chair     1   Red
3  Chair     2   Blue
3  Chair     3   White

これは先ほど実際に試した結果と一致します。交差結合でも結合条件を指定できますが、内部結合の場合と結果は変わらなり使われることはあまりないかと思いますので省略します。

取得するデータのカラム指定方法

取得するデータのカラム指定方法は内部結合の場合と同じです。詳細は「取得するデータのカラム指定方法」を参照されて下さい。2 つのテーブルで同じカラム名がある場合は「テーブル名.カラム名」のように指定し、どちらかのテーブルにしかないカラム名の場合はテーブル名を省略して「カラム名」で指定します。

交差結合の場合も実際に試しておきます。

select product.id, product.name, color.name from product cross join color;

取得するデータのカラム指定方法(1)

-- --

交差結合を行うための CROSS JOIN 句の使い方について解説しました。

SQLite入門の他の記事を見てみる

( Written by Tatsuo Ikura )

関連記事 (一部広告含む)
Profile
profile_img

著者 / TATSUO IKURA

初心者~中級者の方を対象としたプログラミング方法や開発環境の構築の解説を行うサイトの運営を行っています。