複数のテーブルの列を掛け合わせるSQL文を紹介します。
概要
複数のテーブルがある場合に、列同士を掛け合わせて出力したい場合があります。
メモ
cross join を利用しても同様の結果を取得できます。cross joinについては
こちらの記事を参照してください。
書式
[テーブル名1]と[テーブル名2]を掛け合わせる場合の書式は以下です。
select * from [テーブル名1], [テーブル名2]
2つ以上の複数のテーブルを掛け合わせる場合は以下の書式となります。
select * from [テーブル名1], [テーブル名2], [テーブル名3], ... , [テーブル名n]
テーブル1、テーブル2の列名に同じ名称がある場合は列名の衝突が起きるため、以下の書式でそれぞれのテーブルを識別できます。
select [列名1],[列名2], ... [列名n] from [テーブル名1] [テーブルの別名1], [テーブル名2] [テーブルの別名2]
[列名]には
[テーブルの別名].[列名]
の形式で指定できます。
例
以下のテーブルを用意します。
Productsid | Name | Category | Code | Price |
1 | ぺんぎんクッキー改 | 焼き菓子 | PRD-A-001 | 240 |
2 | らくだキャラメル | 生菓子 | PRD-C-016 | 85 |
3 | しろくまアイス | 氷菓 | PRD-A-201 | 320 |
Warehouseid | 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 |
| (行のレコードは先のクエリと同様) | | | | | |
補足
同じ結果を得る cross join を利用したSQL文は以下です。
select * from Product cross join Warehouse
著者
iPentec.com の代表。ハードウェア、サーバー投資、管理などを担当。
Office 365やデータベースの記事なども担当。
最終更新日: 2023-05-06
作成日: 2023-03-26