交差結合を行う(CROSS JOIN句)

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

(Last modified: )

交差結合とは

交差結合は 2 つのテーブルのデータをすべて組み合わせたデータです。結合する 2 つのテーブルにそれぞれ 10 件と 20 件のデータが格納されていたとすると、交差結合で得られるデータは 10 × 20 = 200 のデータとなります。

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

交差部結合とは(1)

全てのデータの組み合わせとなるため、場合によっては非常に巨大なデータとなりますので注意してください。

CROSS JOIN句の使い方

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

SELECT table_name.col_name1 [, table_name.col_name2 ...]
  FROM table_name1
  CROSS JOIN tbl_name2

交差結合の場合、 2 つのテーブルの全てのデータの組み合わせを取得しますので結合条件はありません。(ON 句を使って結合条件を記述することはできますが、 CROSS JOIN 句で結合条件を指定した場合、内部結合と同じことになります)。

-- --

それでは実際に試してみます。 2 つのテーブルを作成します。 1 つ目のテーブルは次のように作成しました。製品名に関するテーブルです。

create table product (id int, name varchar(10));

CROSS JOIN句の使い方(1)

テーブルには次のようなデータを格納してあります。

insert into product values (1, 'Tablet');
insert into product values (2, 'Mouse');
insert into product values (3, 'Keyboard');
insert into product values (4, 'Display');

CROSS JOIN句の使い方(2)

2 つ目のテーブルは次のように作成しました。色に関するテーブルです。

create table color (id int, name varchar(10));

CROSS JOIN句の使い方(3)

テーブルには次のようなデータを格納してあります。

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

CROSS JOIN句の使い方(4)

-- --

それでは交差結合を行いデータを取得します。次のように実行してください。

select * from product cross join color;

CROSS JOIN句の使い方(5)

product テーブルのデータと color テーブルのデータのすべての組み合わせが含まれるデータを取得しました。

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

交差結合を行って SELECT 文でデータを取得する場合、複数のテーブルのカラムが存在するのでどのカラムの値を取得するか指定するときに「カラム名」ではなく「テーブル名.カラム名」のように指定します。

先ほどのサンプルでカラム名を指定せずにデータを取得した場合は次のようになります。

select * from product cross join color;

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

取得したデータのカラムには id カラムが 2 つ、 name カラムも 2 つ含まれています。このように複数のテーブルに同じ名前のカラムがある場合にこのカラムをを指定して取得したい場合には次のように「テーブル名.カラム名」の形で指定します。

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

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

2つのテーブルに同じカラム名があるのにテーブル名を指定せずにカラム名だけを記述した場合は次のような Error: Column 'カラム名' in field list is ambiguous というエラーとなります。

select name from product cross join color;

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

-- --

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

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

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