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つのテーブルがあるとします。
id | name | romaji |
---|---|---|
1 | 鈴木 | suzuki |
2 | 田中 | tanaka |
3 | 佐藤 | sato |
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つのテーブルがあるとします。
id | name | romaji |
---|---|---|
1 | 鈴木 | suzuki |
2 | 田中 | tanaka |
3 | 佐藤 | sato |
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行表示されます。
関連の記事