交差結合(CROSS JOIN句)

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

(Last modified: )

交差結合とは

最初に交差結合について簡単に説明しておきます。交差結合とは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 つずつ結合したデータを取得することができました。

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

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

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

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

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

-- --

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

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。