关系数据库与SQL语言_习题答案

  • 格式:doc
  • 大小:65.50 KB
  • 文档页数:5

下载文档原格式

  / 5
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

关系数据库与SQL语言_习题(黄旭明)参考答案

本章习题均基于以下假设:在某校,有关学生有学号、姓名、系别、出生日期等信息,有关课程有课程号、课程

名、选修课程等信息,每个学生只有一个学号、只在一个系、可以选修多门课程;每门课程只有一个课程号、可以

由多个学生选修,学生选修课程产生成绩。

这些数据在名为Student的数据库中进行管理,其中各表逻辑结构设计如下:

表名:学生

属性:学号(定长字符串,12)

如:200210515001,2002年,105系别,15专业代码,001学生编号

姓名(变长字符串,20,非空)

出生日期(日期时间,非空)

是否党员(逻辑型)

班委(定长字符串,8)

主键:学号

表名:课程

属性:课程号(定长字符串,3)

课程名称(变长字符串,20)

先修课号(定长字符串,3)

主键:课程号

外键:先修课号

其值取自本表主键“课程号”的值

表名:成绩表

属性:学号(定长字符串,12)

课程号(定长字符串,3)

成绩(整数,3,取值0~100) .

主键:(学号,课程号)

外键:学号

其值取自表“学生”主键“学号”的值.

课程号

其值取自表“课程”主键“课程号”的值

1.用SQL语言创建一个数据库,命名为Student。

Create dababase student

2.在Student数据库中,用SQL语言建立以上各表。

1)Create table 学生(学号 char(12) primary key,姓名 varchar(20) not null,出生日期datetime not null,是否党员 bit,班委 char(8))

2)Create table 课程(课程号 char(3) primary key,课程名称 varchar(20) ,先修课号char(3) foreign key references 课程(课程号))

3)Create table 成绩表(学号 char(12) foreign key references 学生(学号),课程号char(3) foreign key references 课程(课程号),成绩 smallint check(成绩 between 0 and 100),primary key (学号,课程号))

3.在表“成绩表”中创建关于“课程号”的索引。

Create index kch_cjb on 成绩表(课程号)

4.在各表中输入一些记录数据,并进行一些修改操作。

5.在表“学生”中增加数值类型的“德育分”、“专业分”与“总积分”属性,总积分=德育分+专业分。

1) Alter table 学生 add 德育分 int, 专业分 int,总积分 int

2) Update 学生 set 总积分=德育分+专业分

6.从“课程”表中检索所有课程的“课程号”和“课程名称”。

Select 课程号,课程名称 from 课程

7.从“学生”表中检索记录的所有属性。

Select * from 学生

8.从“学生”表中检索每一记录“总积分”,说明总积分是德育分与专业分之和,并在属性列的清单中用字符串加以说明。

Select 总积分 ,’总积分=德育分+专业分’ as 说明 from 学生

9.从“成绩表”表中检索某个学号的所有选修课程的成绩。

Select * from 成绩表 where 学号=’200110101003’

10.从“成绩表”表中检索所有不及格学生的记录。

Select * from 成绩表 where 成绩<60

11.用两种不同的比较形式,从“课程”表中检索课程名称不是“数据库”的所有记录。 Select * from 课程 where 课程名称<>'数据库'

Select * from 课程 where not 课程名称='数据库'

12.从“学生”表中检索出所有年龄大于20岁的学生的“学号”、“系别”。

Select 学号,系别 from 学生 where year(date())-year(出生日期)>20

13.检索所有尚未填写成绩的学生学号。

Select distinct 学号 from 成绩表 where 成绩 is null

14.从“课程”中检索出所有有“先修课程”的课程号与课程名称。

Select 课程号,课程名称 from 课程 where 先修课程 is not null

15.按学生年龄大小,从“学生”表中检索“学号”,“出生日期”。

Select学号,出生日期 from 学生 order by 出生日期

16.将“成绩表”中的成绩记录,先按“课程号”从小到大排序,然后再按“成绩”从

Select * from 成绩表 order by 课程号 ,成绩

17.从“学生”表中检索“系别”为105

Select 学号 from 学生 where 学号

18.从“成绩表”中检索选修了“课程号”为201或301课程的学生“学号”。

Select 学号 from 成绩表 where 课程号='201' or 课程号='301'

19.从“成绩表”表中检索出哪些人有不及格记录。

Select distinct 学号 from 成绩表 where 成绩<60

20.从“成绩表”表中检索选修“课程号”不为201或301,且“成绩”大于95分的学生“学号”。

Select 学号 from 成绩表 where 课程号not in('201', '301') and 成绩>95

21.查询哪些既是班委又是党员的学生。

Select * from 学生 where 是否党员=1 and 班委 is not null

22.从“学生”表中检索“专业分”介于100到120之间的学生“学号”。

Select 学号 from 学生 where 专业分 between 100 and 120

23.从“学生”中检索在1982年1月1日至9月1日出生的学生的“学号”和“姓名”。 Select 学号,姓名from 学生where 出生日期between '1982/01/01' and '1982/09/01'

24.从“学生”表中检索姓“陈”的学生的“身份证号码”和“姓名”。

Select 身份证号码,姓名 from 学生 where 姓名 like '陈%'

25.查询已被学生选修的课程号,课程号不重复显示。

Select distinct 课程号 from 成绩表

26.计算选修课程号为201的学生人数。

Select count(*) as 选修人数 from 成绩表 where 课程号='201'

27.计算学生总人数。

Select count(*) as 学生总数 from 学生

28.计算系别为105的学生的德育积分总和。

Select sum(德育分) as 105系学生德育积分总和 from 学生 where 学号 like '____105%'