6.複数テーブルの結合
以下のテーブルをもとに、演習を進める。(ここではもう、正規化していない saleテーブル は使わない。)
saleテーブルを正規化したproductテーブル、sale2テーブルを trysql に追加する場合は以下手順を確認の上、実施してください。
※「5.正規化とテーブル作成」のサンプル5-1~5-4を実行して、テーブルの作成とレコードの追加を実施している場合は必要ありません。
ただし、サンプル5-5を実行して、テーブルを削除した場合は削除したテーブルの作成とレコードを追加を行ってください。
まず、データ追加用SQLを以下保存先フォルダにダウンロードしてください。
【保存先フォルダ】 c:\mysql
次に、ダウンロードしたファイルをサクラエディタで開き、
ファイル内のSQLをHeidiSQLで実行してください。
最後に、HeidiSQLの更新ボタンをクリックし、product と sale2 が trysql の下にできていれば成功です。
[ product ]
product_code | product_name | product_price |
---|---|---|
N01 | いちご | 400 |
N02 | いちじく | 600 |
N03 | りんご | 140 |
N04 | メロン | 3500 |
N05 | マンゴー | 260 |
N06 | バナナ | 100 |
S01 | 七夕セット | 1780 |
S02 | 常夏セット | 2300 |
S03 | 秋の先取りセット | 2500 |
[ sale2 ]
sale_id | sale_date | product_code | product_count | customer | is_delivery | note |
---|---|---|---|---|---|---|
101 | 2007/4/1 | N03 | 20 | A商店 | false | (NULL) |
102 | 2007/4/2 | N01 | 15 | B商店 | true | (NULL) |
103 | 2007/5/4 | N01 | 2 | A商店 | false | (NULL) |
104 | 2007/5/12 | N02 | 32 | A商店パリ支店 | true | 空輸 |
105 | 2007/5/20 | N05 | 18 | C商店 | false | (NULL) |
106 | 2007/6/7 | N03 | 3 | A商店 | false | (NULL) |
107 | 2007/7/1 | N04 | 12 | W商店 | true | のしをつける |
108 | 2007/7/7 | S01 | 3 | C商店 | false | (NULL) |
109 | 2007/7/10 | N05 | 10 | B商店 | false | (NULL) |
110 | 2007/8/1 | S02 | 6 | 海の家 | false | (NULL) |
6-1
販売データを確認 − 結合
分割されている複数テーブルを結合して表示する。
sale_id | sale_date | product_name | product_price | product_count | total |
---|---|---|---|---|---|
101 | 2007/4/1 | りんご | 140 | 20 | 2800 |
102 | 2007/4/2 | いちご | 400 | 15 | 6000 |
103 | 2007/5/4 | いちご | 400 | 2 | 800 |
104 | 2007/5/12 | いちじく | 600 | 32 | 19200 |
105 | 2007/5/20 | マンゴー | 260 | 18 | 4680 |
106 | 2007/6/7 | りんご | 140 | 3 | 420 |
107 | 2007/7/1 | メロン | 3500 | 12 | 42000 |
108 | 2007/7/7 | 七夕セット | 1780 | 3 | 5340 |
109 | 2007/7/10 | マンゴー | 260 | 10 | 2600 |
110 | 2007/8/1 | 常夏セット | 2300 | 6 | 13800 |
キーワード:join 〜 on
【サンプルソースコード】
6-2
販売データを確認2 − 結合2
分割されている複数テーブルを結合して表示する。
※SQL文が煩雑になるのを避けるために、表に別名を定義する。
sale_id | sale_date | product_name | product_price | product_count | total |
---|---|---|---|---|---|
101 | 2007/4/1 | りんご | 140 | 20 | 2800 |
102 | 2007/4/2 | いちご | 400 | 15 | 6000 |
103 | 2007/5/4 | いちご | 400 | 2 | 800 |
104 | 2007/5/12 | いちじく | 600 | 32 | 19200 |
105 | 2007/5/20 | マンゴー | 260 | 18 | 4680 |
106 | 2007/6/7 | りんご | 140 | 3 | 420 |
107 | 2007/7/1 | メロン | 3500 | 12 | 42000 |
108 | 2007/7/7 | 七夕セット | 1780 | 3 | 5340 |
109 | 2007/7/10 | マンゴー | 260 | 10 | 2600 |
110 | 2007/8/1 | 常夏セット | 2300 | 6 | 13800 |
キーワード:join 〜 on、as
【サンプルソースコード】
6-3
販売データを確認3 − 結合3
分割されている複数テーブルを結合して表示する。
※joinを使わないやり方をしてみる。
sale_id | sale_date | product_name | product_price | product_count | total |
---|---|---|---|---|---|
101 | 2007/4/1 | りんご | 140 | 20 | 2800 |
102 | 2007/4/2 | いちご | 400 | 15 | 6000 |
103 | 2007/5/4 | いちご | 400 | 2 | 800 |
104 | 2007/5/12 | いちじく | 600 | 32 | 19200 |
105 | 2007/5/20 | マンゴー | 260 | 18 | 4680 |
106 | 2007/6/7 | りんご | 140 | 3 | 420 |
107 | 2007/7/1 | メロン | 3500 | 12 | 42000 |
108 | 2007/7/7 | 七夕セット | 1780 | 3 | 5340 |
109 | 2007/7/10 | マンゴー | 260 | 10 | 2600 |
110 | 2007/8/1 | 常夏セット | 2300 | 6 | 13800 |
キーワード:where、as
【サンプルソースコード】
6-4
配送履歴を確認 − 結合と条件
いつ、何を、いくつ、どこに配送したかを表示する。
配送していない販売データは、表示する必要がない。
sale_date | product_name | product_count | customer |
---|---|---|---|
2007/4/2 | いちご | 15 | B商店 |
2007/5/12 | いちじく | 32 | A商店パリ支店 |
2007/7/1 | メロン | 12 | W商店 |
キーワード:join 〜 on、as、where
【サンプルソースコード】
6-5
商品毎の売上総数を計算 − 結合とグループ化、集計
商品毎の販売総数を表示する。
ここでは、販売履歴がない商品は表示されなくてよい。
product_code | product_name | allcount |
---|---|---|
N01 | いちご | 17 |
N02 | いちじく | 32 |
N03 | りんご | 23 |
N04 | メロン | 12 |
N05 | マンゴー | 28 |
S01 | 七夕セット | 3 |
S02 | 常夏セット | 6 |
キーワード:join 〜 on、as、group by、集計関数
【サンプルソースコード】
6-6
商品毎の売上総数(販売履歴がない商品も含む) − 外部結合
商品毎の販売総数を表示する。
ここでは、販売履歴がない商品もあわせて表示する。
product_code | product_name | allcount |
---|---|---|
N01 | いちご | 17 |
N02 | いちじく | 32 |
N03 | りんご | 23 |
N04 | メロン | 12 |
N05 | マンゴー | 28 |
N06 | バナナ | |
S01 | 七夕セット | 3 |
S02 | 常夏セット | 6 |
S03 | 秋の先取りセット |
キーワード:left(またはright)join 〜 on、as、group by、集計関数
【サンプルソースコード】
6-7
単価1000円以上の商品の販売履歴を確認
単価が1000円以上の商品の販売履歴を表示する。
sale_id | sale_date | customer | is_delivery | note |
---|---|---|---|---|
107 | 2007/7/1 | W商店 | true | のしをつける |
108 | 2007/7/7 | C商店 | false | (NULL) |
110 | 2007/8/1 | 海の家 | false | (NULL) |
キーワード:join 〜 on、as、where
【サンプルソースコード】
6-8
商品毎の販売総数の上位を確認
販売総数が20個以上の商品を、上位から並べて表示する。
product_code | product_name | allcount |
---|---|---|
N02 | いちじく | 32 |
N05 | マンゴー | 28 |
N03 | りんご | 23 |
キーワード:join 〜 on、as、group by、集計関数、having、order by
【サンプルソースコード】
6-9
売れない商品を確認
1個も売れたことがない商品を表示する。
product_code | product_name |
---|---|
N06 | バナナ |
S03 | 秋の先取りセット |
キーワード:left(またはright)join 〜 on、as、group by、集計関数、having
【サンプルソースコード】
課題
課題5-1で正規化したテーブルを使って、仕様を満たすようなSQL文を作成する。
既存データはINSERTしておくこと。
課題6-1.男性で、何かレッスンを受けている人を表示する。
※member_id, member_name, member_gender, レッスン名 を表示すること
※カラム名は各自のテーブル構成に置き換えて考えてください
[結果表示]
member_id | member_name | member_gender | lesson |
---|---|---|---|
H028 | 長崎らっこ | 男性 | スイミング |
H335 | 宮崎まんぼう | 男性 | ホットヨガ |
M101 | 秋田きりん | 男性 | スカッシュ |
M101 | 秋田きりん | 男性 | ジャズダンス |
M211 | 福岡かまきり | 男性 | ジャズダンス |
N113 | 岡山ふくろう | 男性 | スカッシュ |
N280 | 香川ひらめ | 男性 | ジャズダンス |
N511 | 長野となかい | 男性 | スイミング |
課題6-2.何かレッスンを受けているマスター会員を、年齢の若い順に表示する。
※複数のレッスンを受けている会員でも1行のみ表示されること
※member_id, member_name, class, birthday を表示すること
※カラム名は各自のテーブル構成に置き換えて考えてください
[結果表示]
member_id | member_name | class | birthday |
---|---|---|---|
M211 | 福岡かまきり | マスター | 1980-10-08 |
M101 | 秋田きりん | マスター | 1978-05-04 |
M502 | 石川うさぎ | マスター | 1976-05-21 |
M340 | 山口ぱんだ | マスター | 1976-04-28 |
課題6-3.各店舗での、レッスン受講者数を表示する。
※店舗名と店舗毎のレッスン受講者数を表示すること
※カラム名は適切な名前に変えること
[結果表示(最低限)]
上野店舗所属の秋田きりんが2つのレッスンを受けているため、2名分にカウントされる。
従って、本来は4人であるはずの上野店舗が5人に表示される。
店舗 | 人数 |
---|---|
上野 | 5 |
千葉 | 3 |
品川 | 3 |
[結果表示(できれば)]
店舗 | 人数 |
---|---|
上野 | 4 |
千葉 | 3 |
品川 | 3 |
課題6-4.2つ以上のレッスンを受けている人を表示する。
2つ以上のレッスンを受講している会員を表示する。
※member_id, member_name を表示すること
※カラム名は各自のテーブル構成に置き換えて考えてください
[結果表示]
member_id | member_name |
---|---|
M101 | 秋田きりん |
課題6-5.レッスン宣伝のため、レッスンをひとつも受けていない人を表示する。
レッスンを受講していない新規会員を登録し、その会員のみ表示する。
新規会員データは以下のようにする。
member_id | regist_date | member_name | birthday | member_gender | 所属クラス | 所属エリア |
---|---|---|---|---|---|---|
M999 | 2025-05-30 | 進化太郎 | 1982-11-12 | 男性 | マスター | 品川 |
そのためのINSERT文も提出すること。
※member_id, member_name を表示すること
※カラム名は各自のテーブル構成に置き換えて考えてください
[結果表示]
member_id | member_name |
---|---|
M999 | 進化太郎 |
Copyright © Xincor miXell Co., Ltd. All rights reserved