SQLite | データの結合 | クロス結合(CROSS JOIN)
クロス結合は、2つのテーブルにある行のすべての組み合わせを取得します。ここでは、CROSS JOIN句の使い方を説明します。
クロス結合
クロス結合は、2つのテーブルにある行のすべての組み合わせを返します。
左側の各行に対して右側のすべての行を順番に組み合わせ、左側の全行について繰り返します。

左側に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テーブルを作成し、サンプルデータを追加します。
create table product (id integer, name text);
insert into product values (1, 'Desk');
insert into product values (2, 'Cabinet');
insert into product values (3, 'Chair');
sqlite> create table product (id integer, name text);
sqlite>
sqlite> insert into product values (1, 'Desk');
sqlite> insert into product values (2, 'Cabinet');
sqlite> insert into product values (3, 'Chair');
sqlite>
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');
sqlite> create table color (id integer, name text);
sqlite>
sqlite> insert into color values (1, 'Red');
sqlite> insert into color values (2, 'Blue');
sqlite> insert into color values (3, 'White');
sqlite>
次のクロス結合を実行します。
select * from product cross join color;
sqlite> select * from product cross join color;
id name id name
---------- ---------- ---------- ----------
1 Desk 1 Red
1 Desk 2 Blue
1 Desk 3 White
2 Cabinet 1 Red
2 Cabinet 2 Blue
2 Cabinet 3 White
3 Chair 1 Red
3 Chair 2 Blue
3 Chair 3 White
sqlite>
productの各行とcolorのすべての行が組み合わされていることを確認できます。
取得するカラムを指定する
カラムの指定方法は内部結合と同じです。両方のテーブルに同名カラムがある場合はテーブル名.カラム名と記述し、一方だけにある名前はテーブル名を省略できます。
クロス結合でも実際にカラムを指定してみます。
select product.id, product.name, color.name from product cross join color;
sqlite> select product.id, product.name, color.name from product cross join color;
id name name
---------- ---------- ----------
1 Desk Red
1 Desk Blue
1 Desk White
2 Cabinet Red
2 Cabinet Blue
2 Cabinet White
3 Chair Red
3 Chair Blue
3 Chair White
sqlite>