1月15日(金)2コマ目
今日、やったこと
ビューのおさらい課題 その1、その2
今日の課題
解答例をあげておきます。
ビューのおさらい課題 その1
テーブル作成
商品マスタ
create table 商品マスタ(
ID number(2),
商品名 nvarchar2(64) not null,
定価 number(5),
constraint pk_商品 primary key(ID),
constraint chk_商品定価 check(定価>=0)
);
顧客マスタ
create table 顧客マスタ(
ID number(2),
氏名 nvarchar2(64) not null,
constraint pk_顧客 primary key(ID)
);
売上データ
create table 売上データ(
ID number(4),
商品ID number(2),
顧客ID number(2),
数量 number(4),
売上日 date,
constraint pk_売上データ primary key(ID, 商品ID),
constraint fk_売上_商品 foreign key(商品ID) references 商品マスタ(ID),
constraint fk_売上_顧客 foreign key(顧客ID) references 顧客マスタ(ID),
constraint chk_売上数量 check(数量 >= 0)
);
ビュー作成
商品別販売回数
create or replace view 商品別販売回数(商品名, 販売回数) as
select 商品名, count(*)
from 商品マスタ, 売上データ
where 商品マスタ.ID=売上データ.商品ID
group by 商品名;
顧客別商品購入回数
create or replace view 顧客別商品購入回数(顧客名, 商品名, 購入回数) as
select 氏名, 商品名, count(*)
from 商品マスタ, 顧客マスタ, 売上データ
where 商品マスタ.ID=売上データ.商品ID and 顧客マスタ.ID=売上データ.顧客ID
group by 氏名, 商品名
order by 氏名, 商品名;
商品別販売数量
create or replace view 商品別販売数量(商品名, 販売数量) as
select 商品名, sum(数量)
from 商品マスタ, 売上データ
where 商品マスタ.ID=売上データ.商品ID
group by 商品名;
商品別売上金額
create or replace view 商品別売上金額(商品名, 売上金額) as
select 商品名, sum(定価*数量)
from 商品マスタ, 売上データ
where 商品マスタ.ID=売上データ.商品ID
group by 商品名;
顧客商品別売上金額
create or replace view 顧客商品別売上金額(顧客名, 商品名, 売上金額) as
select 氏名, 商品名, sum(定価*数量)
from 商品マスタ, 顧客マスタ, 売上データ
where 商品マスタ.ID=売上データ.商品ID and 顧客マスタ.ID=売上データ.顧客ID
group by 氏名, 商品名;
売上一覧
create or replace view 売上一覧(顧客名, 売上日, 売上金額) as
select 氏名, 売上日, sum(定価*数量)
from 商品マスタ, 顧客マスタ, 売上データ
where 商品マスタ.ID=売上データ.商品ID and 顧客マスタ.ID=売上データ.顧客ID
group by 売上データ.ID, 氏名, 売上日
order by 売上日, sum(定価*数量);
ようかん最中売上データ
create or replace view ようかん最中売上データ(商品名, 販売回数, 売上数量, 売上金額) as
select 商品名,count(*), sum(数量), sum(定価*数量)
from 商品マスタ, 売上データ
where 商品マスタ.ID=売上データ.商品ID and (商品名='小形ようかん' or 商品名='最中')
group by 商品名;
高額売上データ
create or replace view 高額売上データ(顧客名, 売上日, 販売商品数, 売上金額) as
select 氏名, 売上日, sum(数量), sum(定価*数量)
from 商品マスタ, 顧客マスタ, 売上データ
where 商品マスタ.ID=売上データ.商品ID and 顧客マスタ.ID=売上データ.顧客ID
group by 売上データ.ID, 氏名, 売上日
having sum(定価*数量) >= 5000
order by 売上日,sum(定価*数量);
ビュー作成のおさらい課題 その2
テーブル作成
ジャンルマスタ
create table ジャンルマスタ(
ID number(2),
ジャンル名 nvarchar2(64) not null,
constraint pk_ジャンル primary key(ID)
);
商品マスタ
create table 商品マスタ(
ID number(2),
商品名 nvarchar2(64) not null,
ジャンルID number(2),
定価 number(5),
constraint pk_商品 primary key(ID),
constraint pk_商品_ジャンル foreign key(ジャンルID) references ジャンルマスタ(ID),
constraint chk_商品定価 check(定価>=0)
);
顧客マスタ
create table 顧客マスタ(
ID number(2),
氏名 nvarchar2(64) not null,
constraint pk_顧客 primary key(ID)
);
売上データ
create table 売上データ(
ID number(4),
商品ID number(2),
顧客ID number(2),
数量 number(4),
売上日 date,
constraint pk_売上データ primary key(ID, 商品ID),
constraint fk_売上_商品 foreign key(商品ID) references 商品マスタ(ID),
constraint fk_売上_顧客 foreign key(顧客ID) references 顧客マスタ(ID),
constraint chk_売上数量 check(数量 >= 0)
);
ビュー作成
ジャンル別売上金額
売上一覧
最高売上数商品データ
最高売上金額商品データ
最高売上金額データ
次回は紙のテストをします。
コメント