1,写出创建如下三张表的SQL语句。
“项目”表结构:
项目号:普通编码定长字符类型,长度为10,主键。
项目名:统一编码可变长字符类型,长度为10,非空。
费用:整型,默认值100.
///项目表建表语句
create table ProgramTable
(
pID char(10) primary key,
pName nchar(10) not null,
price int default 100
)
“会员”表结构:
会员号:普通编码定长字符类型,长度为18,主键。
会员号:统一编码可变长字符类型,长度为10,非空。
性别:统一编码定长字符类型,长度为1,取值为“男”和“女”。
联系电话:普通编码定长字符类型,长度为11.
///会员表建表语句
create table TableVIP
(
vipID char(18) primary key,
vipName nvarchar(10) not null,
vipSex nchar(1) check vipSex in('男','女'),
vipTel char(11)
)
“健身”表结构:
项目号:普通编码定长字符类型,长度为10,引用“项目”表的外键。
会员号:普通编码定长字符类型,长度为18,引用“会员”表的外键。
健身日期:日期型。
健身时长:整型,取值大于等于1.(注:以小时为单位)
主键:(项目号,会员号,健身日期)
///健身表建表语句
create table TableExercise
(
programID char(10) references TableProgram,
vipID char(18) references TableVip,
exerciseDate datetime,
exerciseTime int ,
check( exerciseTime >= 1)
primary key(programID ,vipID ,exerciseDate)
)
2,根据建立的表,写出操作的SQL语句。
(1)统计每个会员的总健身时长
select vipID,
vipName,
(select SUM(exerciseTime)
from TableExcercise b
inner join ProgramTable c
on b.programID = c.pID
where a.vipID = b.vipID) '会员总时长'
from TableVIP a
(2)查询所有姓“张”的会员的健身情况,列出会员名,健身日期,和健身时长
select vipName,
(select exerciseDate ,exerciseTime
from TableExcercise as b
where a.vipID = b.vipID
)
from TableVIP as a
where vipName in '张%'
(3)将价格超过500元的项目费用减低100
update programTable set price = price-100 where price>500
(4)在项目表中插入一新项目,项目号:X100,项目名:跑步,费用:200
insert into programTable values ('X100','跑步','200')
3,根据创建的表,写出满足下面要求的视图的SQL语句:
查询2019年乒乓球项目的使用情况,列出会员名,健身日期,健身时长。
CREATE VIEW ViewTest
as
SELECT vipName,exerciseDate,exerciseTime FROM TableVIP a,TableExercise b ,ProgramTable c
WHERE b.vipID=a.vipID AND b.pID = c.pID AND c.pName='乒乓球' AND year(b.exerciseTime)=2019