现有学生表(学号,姓名,性别,年龄,入学年份,籍贯,手机号码,系号,班长学号),学号是主码,系号和班长学号是外部码,手机号码必须唯一,学生的年龄不得小于10岁和大于50岁,性别必须是'男'或者'女'。
系表(系号,系名,系主任),其中系号是主码,系名不能有重复的。选课表(学号,课程号,成绩),(学号,课程号)是主码,学号和课程号是外部码,成绩不能小于0分和大于100分。
课程表(课程号,课程名,先修课,学分),课程号是主码,课程名必须唯一,学分必须大于0小于5。
学分计算表(最低成绩,最高成绩,计算比率)。最低成绩和最高成绩都必须大于0小于100,同时最低成绩不能大于最高成绩。
试完成以下工作:
createtable系表。
系号char(4)primarykey,系名varchar(50)unique,系主任varchar(10))
createtable学生表。
学号char(10)primarykey,姓名nvarchar(10),性别char(2)check(性别in ('男','女'))年龄intcheck(年龄between10and50),入学年份datetime,籍贯nvarchar(100),手机号码varchar(20)unique,系号char(4),班长学号char(10),foreignkey(班长学号)references学生表(学号),foreignkey(系号)references系表(系号))
createtable课程表。
课程号char(10)primarykey,课程名nvarchar(100)unique,先修课char(10)foreignkey references课程表(课程号),学分int constraintck_课程表_学分check(学分between0and5))
createtable选课表(学号char(10),课程号char(10),成绩intcheck(成绩between0and100)default0,primarykey(学号,课程号),foreignkey(学号)references学生表(学号),foreignkey(课程号)references课程表(课程号))
createtable学分计算表。
最低成绩realcheck(最低成绩between0and100),最高成绩realcheck(最高成绩between0and100),计算比率real,check(最高成绩》=最低成绩))
2.在学生表中插入学号为26,姓名为'李四',性别为'女',年龄为20,入学年份为2008,籍贯为'广东',手机号码为10010001000,班长学号为10的一条记录。
insertinto学生表。
values('26','李四','女',20,'2008','广东','10010001000', null,'10')
或者。insertinto学生表(学号,姓名,性别,年龄,入学年份,籍贯,手机号码,班长学号)values('26','李四','女',20,'2008','广东','10010001000','10')
3.删除上述记录。
deletefrom学生表where学号='26'
4.将学生表中的姓名字段的长度改为6个汉字。
altertable学生表altercolumn姓名nvarchar(6)
5.为学生表增加一个字段电子邮件,20个字符。
altertable学生表。
add电子邮件varchar(200)null
6.对课程表的学分字段上的完整性约束进行修改,使其在0到6之间取值。
altertable课程表。
dropconstraintck_课程表_学分。
altertable课程表add
constraintck_课程表_学分check(学分between0and6)
7.为学生表在学号列上创建cluster索引。
createclustered
indexix_学号on学生表(学号)
8.创建一个视图,计算每门课的最高分。
createviewv_每门课的最高分(课程号,每门课的最高分)as
select课程号,max(成绩)from选课表groupby课程号。
或者。createviewv_每门课的最高分as
select课程号,max(成绩)as每门课的最高分from选课表groupby课程号。
9.将6系所有学生的年龄,改为7系学生的平均年龄。
update学生表。
set年龄=(select**g(年龄)from学生表where系号='7系')where系号='6系'
10.查找所有学生的姓名、入学年份和籍贯。
select姓名,入学年份,籍贯from学生表。
11.列出籍贯为'山东'的同学的所有属性。
select*from学生表。
where籍贯like'%山东%'
12.查找年龄最小的学生的学号和姓名。
select学号,姓名from学生表。
where年龄=(selectmin(年龄)from学生表)
13.查找选修了'数据库'的学生的学号。
select学号from选课表。
where课程号=(select课程号from课程表。
where课程名='数据库')
或者。select学号from选课表join课程表。
on选课表。课程号=课程表。课程号where课程名='数据库'
14.查找选修了'编译技术'的女学生的学号和姓名。
select学号,姓名from学生表。
where性别='女'and学号in(select学号from选课表。
where课程号in(select课程号from课程表。
where课程名='编译技术'))
或者。select学生表。学号,姓名from学生表join选课表。
on学生表。学号=选课表。学号join课程表。
on选课表。课程号=课程表。课程号。
where课程名='编译技术'and性别='女'
15.查找'李明'同学的班长所选修的课程的课程号。
select课程号from选课表。
where学号in(select班长学号from学生表。
where姓名='李明')
或者。select课程号from选课表join学生表。
on学生表。班长学号=选课表。学号where姓名='李明'
16.查找名字中倒数第二字为'浩'的学生的学号、姓名和所在系的系名。
select学号,姓名,系号from学生表。
where姓名like'%浩_'
17.计算选修了'数据库'课程的学生的学号和获得的学分。
select学号,学分*计算比率as所获学分from选课表join课程表。
on选课表。课程号=课程表。课程号join学分计算表。
on选课表。成绩between学分计算表。最低成绩and学分计算表。最高成绩where课程名='数据库'
18.查找'李明'同学所有选修课程的总分。
selectsum(成绩)as总分from选课表join学生表。
on选课表。学号=学生表。学号where姓名='李明'
或者。selectsum(成绩)as总分from选课表。
where学号in(select学号from学生表。
where姓名='李明')
19.查找既选修了'数据库',也选修了'操作系统'的同学。
selectdistinct学号from选课表。
where学号in(select学号from选课表join课程表。
on选课表。课程号=课程表。课程号where课程名='数据库')and学号in(select学号from选课表join课程表。
on选课表。课程号=课程表。课程号where课程名='编译技术')
或者。selecta.学号from选课表ajoin选课表bona.
学号=b.学号join课程表cona.课程号=c.
课程号join课程表donb.课程号=d.课程号。
wherec.课程名='数据库'andd.课程名='编译技术'
20.查找没有选修'数据库'课程的学生的学号和姓名。
select学号,姓名from学生表。
where学号notin(select学号from选课表。
where课程号in(select课程号from课程表。
where课程名='数据库'))
21.查找'数据库'课程及格了,但'编译技术'没有及格的学生的学号和姓名。
select学号,姓名from学生表。
where学号in(select学号from选课表。
where课程号in(select课程号from课程表。
where课程名='数据库')and成绩》=60)and
学号in(select学号from选课表。
where课程号in(select课程号from课程表。
where课程名='编译技术')and成绩<60)
或者。select学生表。学号,姓名from选课表ajoin选课表bona.
学号=b.学号join课程表cona.课程号=c.
课程号join课程表donb.课程号=d.课程号join学生表。
ona.学号=学生表。学号。
wherec.课程名='数据库'andd.课程名='编译技术'anda.成绩》=60andb.成绩<60
22.查找数据库成绩低于数据库课平均成绩的同学的学号和姓名。
select学号,姓名from学生表。
where学号in(select学号from选课表。
join课程表。
on选课表。课程号=课程表。课程号。
where课程名='数据库'and成绩<(select**g(成绩)from选课表join课程表。
on选课表。课程号=课程表。课程号。
where课程名='数据库'))
23.查找与'李明'同学选修课程完全相同的学生的学号和姓名(不能多选也不能少选)。
select学号,姓名。
from学生表a
wherenotexists(select*from选课表cjoin学生表bonb.学号=c.学号。
where姓名='李明'
andnotexists(select*from选课表d
whered.学号=a.学号andd.课程号=c.课程号))and学号notin(select学号from选课表。
where课程号notin(select课程号from选课表。
where学号in(select学号from学生表。
where姓名='李明'))或者。
select学号,姓名。
from学生表。
wherenotexists(select*from课程表。
where课程号in(select课程号from选课表。
where学号=(select学号from学生表。
where姓名='李明'))andnotexists(select*from选课表。
where学号=学生表。学号and课程号=课程表。课程号))and(selectcount(*)from选课表。
where学号=学生表。学号)=(selectcount(*)from选课表。
where学号=(select学号from学生表where姓名='李明'))
24.查找不仅选修了'李明'同学选修的课程,而且还选修了其他课程的同学。
select学号,姓名。
from学生表a
wherenotexists(select*from选课表cjoin学生表bonb.学号=c.学号。
where姓名='李明'
andnotexists(select*from选课表d
whered.学号=a.学号andd.课程号=c.课程号))and学号in(select学号from选课表。
where课程号notin(select课程号from选课表。
where学号in(select学号from学生表。
where姓名='李明'))
select学号,姓名。
from学生表。
wherenotexists(select*from课程表。
where课程号in(select课程号from选课表。
where学号=(select学号from学生表。
where姓名='李明'))andnotexists(select*from选课表。
where学号=学生表。学号and课程号=课程表。课程号))and(selectcount(*)from选课表。
where学号=学生表。学号)>(selectcount(*)from选课表。
where学号=(select学号from学生表where姓名='李明'))
25.查找'高等数学'平均成绩最高的系的系名。
select系名,**g(成绩)from选课表join学生表。
on学生表。学号=选课表。学号join课程表。
on选课表。课程号=课程表。课程号join系表。
on系表。系号=学生表。系号where课程名='数据库'groupby系表。系名。
h**ing**g(成绩)>=all(select**g(成绩)from选课表join学生表。
on学生表。学号=选课表。学号join课程表。
on选课表。课程号=课程表。课程号join系表。
on系表。系号=学生表。系号where课程名='数据库'groupby系表。系名)
或者。selecttop1*
from(select系名,**g(成绩)as平均成绩from选课表join学生表。
on学生表。学号=选课表。学号join课程表。
on选课表。课程号=课程表。课程号join系表。
on系表。系号=学生表。系号where课程名='数据库'groupby系名)a
26.查找至少有一个籍贯为'四川'同学所选修的课程的课程名。
select课程名from课程表。
where课程号in(select课程号from选课表。
where学号in(select学号from学生表。
where籍贯like'%四川%')或者。
selectdistinct课程名from课程表join选课表。
on课程表。课程号=选课表。课程号join学生表。
on学生表。学号=选课表。学号where籍贯like'%四川%'
27.删除学分计算表。drop table学分计算表。
select学号,姓名from学生表。
where学号in(select学号from选课表。
where课程号in(select课程号from选课表。
where学号in(select学号--考虑重名,用in
from学生表。
where姓名='李明'))and
学号notin(select学号from选课表。
where课程号notin(select课程号from选课表。
where学号in(select学号from学生表。
where姓名='李明'))
SQL作业答案
1.检索在北京的 商的名称。2.检索出向 商s3发过订购单的职工的职工号和仓库号。命令 select 职工号,仓库号 from 职工 where 职工号 in sele 职工号 from 订购单 where 商号 s3 3.检索出和职工e1,e3都有联系的北京的 商信息。命令 sele from 商...
SQL作业答案
sql语言课后作业。设有两张表,一张为职工表 zgb 字段如下 职工号 文本,6 部门号 文本,3 职务等级 文本,10 姓名 文本,10 性别 文本,2 籍贯 文本,20 基本工资 数字,双精度型 岗位补贴 数字,双精度型 加班补贴 数字,双精度型 工资总额 数字,双精度型 个人所得税 数字,双精...
SQL作业1 答案
练习一 1.创建名为test的数据库,要求使用三个 10 mb 的数据文件 test1 test2 test3 最大20mb,增长量为10 和两个 5mb 的事务日志文件 test log1 test log2 最大10mb。注意 事务日志文件在 log on 关键字后指定,filename 选项中...