cross join を利用しても同様の結果を取得できます。cross joinについてはこちらの記事を参照してください。
複数のテーブルの列を掛け合わせるSQL文を紹介します。
複数のテーブルがある場合に、列同士を掛け合わせて出力したい場合があります。
[テーブル名1]と[テーブル名2]を掛け合わせる場合の書式は以下です。
select * from [テーブル名1], [テーブル名2]
2つ以上の複数のテーブルを掛け合わせる場合は以下の書式となります。
select * from [テーブル名1], [テーブル名2], [テーブル名3], ... , [テーブル名n]
テーブル1、テーブル2の列名に同じ名称がある場合は列名の衝突が起きるため、以下の書式でそれぞれのテーブルを識別できます。
select [列名1],[列名2], ... [列名n] from [テーブル名1] [テーブルの別名1], [テーブル名2] [テーブルの別名2]
[列名]には[テーブルの別名].[列名]
の形式で指定できます。
以下のテーブルを用意します。
id | Name | Category | Code | Price |
---|---|---|---|---|
1 | ぺんぎんクッキー改 | 焼き菓子 | PRD-A-001 | 240 |
2 | らくだキャラメル | 生菓子 | PRD-C-016 | 85 |
3 | しろくまアイス | 氷菓 | PRD-A-201 | 320 |
id | place | capacity |
---|---|---|
1 | 東京 | 4500 |
2 | 大阪 | 3000 |
3 | 福岡 | 1600 |
4 | 札幌 | 2200 |
次のクエリを実行します。
select * from Product,Warehouse
結果は以下になります。2つのテーブルのそれぞれの行を掛け合わせた結果が返されます。
id | Name | Category | Code | Price | id | place | capacity |
---|---|---|---|---|---|---|---|
1 | ぺんぎんクッキー改 | 焼き菓子 | PRD-A-001 | 240 | 1 | 東京 | 4500 |
1 | ぺんぎんクッキー改 | 焼き菓子 | PRD-A-001 | 240 | 2 | 大阪 | 3000 |
1 | ぺんぎんクッキー改 | 焼き菓子 | PRD-A-001 | 240 | 3 | 福岡 | 1600 |
1 | ぺんぎんクッキー改 | 焼き菓子 | PRD-A-001 | 240 | 4 | 札幌 | 2200 |
2 | らくだキャラメル | 生菓子 | PRD-C-016 | 85 | 1 | 東京 | 4500 |
2 | らくだキャラメル | 生菓子 | PRD-C-016 | 85 | 2 | 大阪 | 3000 |
2 | らくだキャラメル | 生菓子 | PRD-C-016 | 85 | 3 | 福岡 | 1600 |
2 | らくだキャラメル | 生菓子 | PRD-C-016 | 85 | 4 | 札幌 | 2200 |
3 | しろくまアイス | 氷菓 | PRD-A-201 | 320 | 1 | 東京 | 4500 |
3 | しろくまアイス | 氷菓 | PRD-A-201 | 320 | 2 | 大阪 | 3000 |
3 | しろくまアイス | 氷菓 | PRD-A-201 | 320 | 3 | 福岡 | 1600 |
3 | しろくまアイス | 氷菓 | PRD-A-201 | 320 | 4 | 札幌 | 2200 |
上記の結果では、id列が同名になっているため、それぞれの列名を別名にするためには、以下のクエリとします。
select T1.id, T1.Name, T1.Category, T1.Code, T2.id as wid, T2.place, T2.Capacity from Product T1,Warehouse T2
以下の結果となります。
id | Name | Category | Code | Price | wid | place | capacity |
---|---|---|---|---|---|---|---|
(行のレコードは先のクエリと同様) |
select * from Product cross join Warehouse