SQL cross join すべての組み合わせを表示(直積)

SQLのcross joinですべての組み合わせを表示するサンプルです。

目次

説明 すべての組み合わせを表示(cross join)
  すべての組み合わせ+whereの条件をつける

すべての組み合わせを表示(cross join)

書き方1 (cross joinなし)
select 項目
from テーブルA,テーブルB
書き方2 (cross joinあり)
select 項目 from テーブルA
cross join テーブルB
  • from句にテーブルAとテーブルBを指定し、項目で結合しない場合、それぞれのテーブルの行のすべての組み合わせで抽出します。
    →テーブルAに3行あり、テーブルBに2行あった場合は、3*2=6行表示されます。
  • cross joinを指定しても同じ結果になります。
  • テーブルAまたはテーブルBにwhereで条件を指定することもできます。その場合、絞られた条件でのすべての組み合わせで抽出します。
  • 直積またはデカルト積とも呼ばれます。

 

すべての組み合わせを表示するサンプル

以下、2つのテーブルがあるとします。

employeeテーブル
id name romaji
1 鈴木 suzuki
2 田中 tanaka
3 佐藤 sato
salesテーブル
id name
2 みかん
4 りんご

 

上記テーブルに対して項目で結合しないでSQLを実行します。

select * from employee,
sales

1行目と2行目にテーブルがありますが、項目で結合していません。

 

結果は、以下のとおりです。

id name romaji id_1 name_1
1 鈴木 suzuki 2 みかん
2 田中 tanaka 2 みかん
3 佐藤 sato 2 みかん
1 鈴木 suzuki 4 りんご
2 田中 tanaka 4 りんご
3 佐藤 sato 4 りんご

employeeテーブルとsaleテーブルの各行の組み合わせで抽出されます。
3*2=6行表示されます。

 

すべての組み合わせ+whereの条件をつける

すべての組み合わせ+whereの条件をつけるサンプルです。

以下、2つのテーブルがあるとします。

employeeテーブル
id name romaji
1 鈴木 suzuki
2 田中 tanaka
3 佐藤 sato
salesテーブル
id name
2 みかん
4 りんご

 

上記テーブルに対してテーブルを項目で結合しない+whereの条件をつけて実行します。

select * from employee a,
sales b
where a.id in (2,3)
and b.id = 2

3,4行目は、それぞれのテーブルに条件をつけて絞っています。

 

結果は、以下のとおりです。

id name romaji id_1 name_1
2 田中 tanaka 2 みかん
3 佐藤 sato 2 みかん

whereで条件が絞られてからのemployeeテーブルとsaleテーブルの各行の組み合わせで抽出されます。
2*1=2行表示されます。

関連の記事

SQL INNER JOIN 内部結合のサンプル
SQL LEFT JOIN 外部結合のサンプル

△上に戻る