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

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

目次

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

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

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

サンプル

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

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

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

SQL

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

select * from syain,
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 りんご

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

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

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

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

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

SQL

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

select * from syain 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で条件が絞られてからのsyainテーブルとsaleテーブルの各行の組み合わせで抽出されます。
2*1=2行表示されます。

関連の記事

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

△上に戻る