数据库原理与应用习题集11套.docx
《数据库原理与应用习题集11套.docx》由会员分享,可在线阅读,更多相关《数据库原理与应用习题集11套.docx(39页珍藏版)》请在冰豆网上搜索。
数据库原理与应用习题集11套
=============================================1
第1章习题
一、选择题
1.下列四项中,不属于数据库系统优点的是( )。
A.实现数据共享B.确保数据的安全性与**性
C.控制数据冗余D.数据依赖程序
2.数据库系统中,对用户使用的数据视图的描述称为()。
A.概念模式B.内模式
C.存储模式D.外模式
3.下列四项中,不属于数据库特点的是()。
A.数据共享B.数据完整性
C.数据冗余很高D.数据独立性高
4.数据库的三级模式之间存在着两级映像,使数据库系统具有较高的数据()。
A.相容性B.独立性
C.共享性D.一致性
5.数据库系统的三级模式结构中,定义索引的组织方式属于( )。
A.概念模式B.外模式
C.逻辑模式D.内模式
6.E-R模型属于( )。
A.概念模型B.层次模型
C.网状模型D.关系模型
7.学生社团可以接纳多名学生参加,但每个学生只能参加一个社团,从社团到学生之间的联系类型是()。
A.多对多B.一对一
C.多对一D.一对多
8.反映现实世界中实体及实体间联系的信息模型是()。
A.关系模型B.层次模型
C.网状模型D.E-R模型
二、设计题
1.*医院病房计算机管理中需要如下信息:
科室:
科名,科地址,科,医生**
病房:
病房号,床位号,所属科室名
医生:
**,职称,所属科室名,年龄,工作证号
病人:
病历号,**,性别,诊断,主管医生,病房号
其中,一个科室有多个病房、多个医生,一个病房只能属于一个科室,一个医生只属于一个科室,但可负责多个病人的诊治,一个病人的主管医生只有一个。
设计该计算机管理系统的E-R图,并注明属性和联系类型。
2.假设*公司的业务规则如下:
(1)公司下设几个部门,如技术部、财务部、市场部等。
(2)每个部门承担多个工程项目,每个工程项目属于一个部门。
(3)每个部门有多名职工,每一名职工只能属于一个部门。
(4)一个部门可能参与多个工程项目,且每个工程项目有多名职工参与施工。
根据职工在工程项目中完成的情况发放酬金。
(5)工程项目有工程号、工程名两个属性;部门有部门号、部门名称两个属性;职工有职工号、**、性别属性。
请根据上述规则设计E-R模型。
3.*公司的业务规则如下:
(1)每位职工可以参加几个不同的工程,且每个工程有多名职工参与;
(2)每位职工有一个职位,且多名职工可能有相同的职位;
(3)职位决定小时工资率,公司按职工在每一个工程中完成的工时,计算酬金;
(4)职工的属性有职工号、**、职位和小时工资率;
(5)工程的属性有工程号和工程名称。
试根据上述业务规则设计E-R模型。
答案:
一、选择题DDCBDADD
二、设计题
1.
2.
3.
===================================================2
第3章习题
1.学校有若干个系,每个系有若干班级和教研室,每个教研室有若干教师,每名教师只教一门课,每门课可由多个教师教;每个班有若干学生,每个学生选修若干课程,每门课程可由若干学生选修。
请用E-R图画出该学校的概念模型,注明联系类型,再将E-R模型转换为关系模型。
2.工厂生产的每种产品由不同的零件组成,有的零件可用于不同的产品。
这些零件由不同的原材料制成,不同的零件所用的材料可以相同。
一个仓库存放多种产品,一种产品存放在一个仓库中。
零件按所属的不同产品分别放在仓库中,原材料按照类别放在若干仓库中(不跨仓库存放)。
请用E-R图画出此关于产品,零件,材料,仓库的概念模型,注明联系类型,再将E-R模型转换为关系模型。
3.一个图书馆管理系统中有如下信息:
图书:
书号、书名、数量、位置
借书人:
借书证号、**、单位
:
名、邮编、地址、、
其中约定:
任何人可以借多种书,任何一种书可以被多个人借,借书和还书时,要登记相应的借书日期和还书日期;一个可以出版多种书籍,同一本书仅为一个所出版,名具有唯一性。
根据以上情况,完成如下设计:
(1)设计系统的E-R图;
(2)将E-R图转换为关系模式;
(3)指出转换后的每个关系模式的关系键。
答案
假定:
主码用____表示
外码用表示
该E-R图可以转换为以下关系模式:
学院(院名,地址,成立日期,教师人数,学生人数)
系(系名,系址,系主任,院名)
班级(班号,专业名,入学年份,学生数,班级导师,系名)
学生(**,**,性别,出生日期,联系,籍贯,班号)
教研室(教研室名称,教师人数,,办公室编号,系名)
教师(教工号,**,性别,出生日期,联系,教研室名称,课号)
课程(课号,课名,学时,学分,开课学期,必修课否)
选修(**,课号,成绩)
2.
该E-R图可以转换为以下关系模式:
产品(产品名,型号,重量,仓库号,数量c)
零件(零件名,规格)
材料(材料编号,名称,仓库号,数量a)
仓库(仓库号,地点,面积,保管员)
产品-零件(产品名,零件名,组装日期b)
零件-材料(材料编号,零件名,生产日期a)
零件-仓库(零件名,仓库号,数量b)
3.
该E-R图可以转换为以下关系模式:
图书(书号,书名,数量,位置,名)
借书人(借书证号,**,单位)
(名,邮编,地址,,)
借阅(借书证号,书号,借书日期,还书日期)
===================================================3
第5章习题
1.试用T-SQL语言创建ZYGL(职员管理)数据库,要求数据文件的初始大小为1MB,最大大小为50MB,增长方式按10%增长;日志文件的初始大小为3MB,按1MB增长。
2.试用T-SQL语言修改ZYGL数据库的主数据文件,将增长方式修改为按5MB增长。
3.试用T-SQL语言修改ZYGL数据库,为ZYGL增加一个数据文件ZYGLBAK。
4.试用T-SQL语言删除ZYGL数据库。
--1.
CREATEDATABASEzygl
ON
(NAME='zygl_Data',
FILENAME='E:
\sql\zygl_Data.MDF',
SIZE=1,MA*SIZE=30,FILEGROWTH=10%
)
LOGON
(NAME='zygl_Log',
FILENAME='E:
\sql\zygl_Log.LDF',
SIZE=3,FILEGROWTH=1
)
GO
--2
ATLERDATABASEZYGL
MODIFYFILE
(NAME=ZYGL_DATA,FILEGROWTH=5)
--3
ATLERDATABASEZYGL
ADDFILE
(NAME=ZYGLBAK,
FILENAME='E:
\sql\zygl_Data1.NDF',
SIZE=1,MA*SIZE=50,FILEGROWTH=10%)
--4
DROPDATABASEZYGL
===================================================4
第6章习题
设计题
现有一个数据库scd,库中包含以下系、学生、班级各表:
student(**,**,年龄,班号)
class(班号,专业名,系名,入学年份)
department(系号,系名)
假设表中将有如下数据:
student(
2008101,*山,18,101;
2008102,李斯,16,102;
2008103,王玲,17,111;
2008105,李飞,19,112
)
class(
101,软件,计算机,2005;
102,微电子,计算机,2006;
111,无机化学,化学,2004;
112,高分子化学,化学,2006
)
department(
001,数学;
002,计算机;
003,化学
)
1.用SQL语言创建以上各数据表,在定义中要求为每一字段(列)选择合适的数据类型和长度,并设置适当的约束,即声明:
(1)每个表的主键和所有可能的外键。
(2)学生**不能为空。
(3)系部系名不能为空,且唯一。
(4)学生的年龄介于15到40岁之间,默认为18。
2.试用SQL语言完成下列功能:
(1)学校又新增加了两个系部:
一个物理系,编号为006,一个经济系,编号为008。
(2)将入学年份在2004年以前的班级删除。
(3)学生*山转到111班,请更新相关的表。
(4)为每个学生的年龄增加1岁,请更新相关的表。
3.试用SQL语言修改表结构:
由于年龄可以通过出生日期计算而来,对student表删除“年龄”字段,增加一个“出生日期”字段。
(提示:
必须先删除对年龄的检查约束,才能删除年龄列)
答案
--1.
createdatabasescd
go
Usescd
Go
CREATETABLEdepartment
(系号char(3)PRIMARYKEY,
系名char(20)notnullunique
)
Go
CREATETABLEclass
(班号char(3)PRIMARYKEY,
专业名char(20),
系名char(20)referencesdepartment(系名),
入学年份int
)
Go
CREATETABLEstudent
(**char(7)PRIMARYKEY,
**char(8)NOTNULL,
年龄intconstraintck_nlCHECK(年龄>=15and年龄<=40)
constraintdf_nlDEFAULT18,--指定约束名ck_nl和df_nl,以便以后好删除
班号char(3)referencesclass(班号)
)
Insertintodepartmentvalues('001','数学');
Insertintodepartmentvalues('002','计算机');
Insertintodepartmentvalues('003','化学')
Insertintoclassvalues('101','软件','计算机',2005);
Insertintoclassvalues('102','微电子','计算机',2006);
Insertintoclassvalues('111','无机化学','化学',2004);
Insertintoclassvalues('112','高分子化学','化学',2006)
Insertintostudentvalues('2008101','*山',18,'101');
Insertintostudentvalues('2008102','李斯',16,'102');
Insertintostudentvalues('2008103','王玲',17,'111')
Insertintostudentvalues('2008104','李飞',19,'112')
--2.
--1)
Insertintodepartmentvalues(‘006’,’物理系‘)
Insertintodepartmentvalues(‘008’,’经济系‘)
--2)
Deleteclasswhere入学年份<2004
--3)
Updatestudentset班号='111'where**='*山'
--4)
Updatestudentset年龄=年龄+1
--3.
--1)
--要删除年龄列,应先删除该列上的约束,再删除
Altertablestudentdropconstraintck_nl,df_nl
--删除年龄列
Altertablestudentdropcolumn年龄
Altertablestudentadd出生日期datetime
--2)
Altertableclass
Add班长**char(7)referencesstudent(**)
===================================================5
第7章习题
设计题
以下各题在CJGL数据库中实现:
1.查询“数据库原理”这门课程的学分和开课学期。
2.查询身高在175cm以上的男生信息。
3.查询所有姓“李”同学的基本情况。
4.查询至少选修了两门课程的学生**。
5.将所有学生信息按身高逆序输出。
6.查询平均成绩在75分以上的学生**、性别和专业。
7.查询“李林”同学没学过的课程号。
8.查询有两门课以上不及格的学生**。
9.检索选修课程包含“程明”同学所选课程之一的学生**。
10.检索同时选修了课程号为101和102这两门课程的学生**。
11.检索选修课程名为“数据库原理”的学生**和**。
12*.查询每门课得最高分的学生**。
13*.检索选修课程包含**为081103的学生所修全部课程的学生**。
14.创建一个名为avg75的视图,包含所有平均成绩在75分以上的学生信息。
答案
1.查询“数据库原理”这门课程的学分和开课学期。
Select课程号,开课学期
Fromkc
Where课程名=’数据库原理’
2.查询身高在175cm以上的男生信息。
Select*
From*s
Where性别=’男’and身高>175
3.查询所有姓“李”同学的基本情况。
Select*
From*s
Where**like‘李%’
4.查询至少选修了两门课程的学生**。
Select**
From*s_kc
Groupby**
Havingcount(课程号)>=2
5.将所有学生信息按身高逆序输出。
Select*
From*s
Orderby身高desc
6检索平均成绩在75分以上的学生**、性别和专业。
方法一:
Select**,性别,专业名
From*s
Where**in(
Select**
From*s_kc
Groupby**
Havingavg(成绩)>75)
方法二:
Select**,性别,专业名
From*s_kcJOIN*sON*s.**=*s_kc.**
Groupby*s.**,**,性别,专业名
Havingavg(成绩)>75
7.检索“李林”同学不学的课程号。
Select课程号
Fromkc
Where课程号notin(
Select课程号from*s,*s_kc
Where*s.**=*s_kc.**and*s.**=’李林’)
8.查询只有两门课不及格的学生**。
Select**
From*s
Where**in(Select**
From*s_kc
Where成绩<60
Groupby**
Havingcount(课程号)=2)
9.检索选修课程包含“程明”同学所选课程之一的学生**。
Selectdistinct**
From*s_kc
Where课程号in(
Select课程号from*s,*s_kc
Where*s.**=*s_kc.**and*s.**=’程明’)
10.检索同时选修了课程号为101和102这两门课程的学生**。
select*from*s_kc
------------------
错误写法:
Select**
From*s_kc
Where课程号='101'or课程号='102'
Select**
From*s_kc
Where课程号='101'and课程号='102'
-------------------------------------------方法一,使用自连接:
方法一,使用自连接:
Selecta.**
From*s_kca,*s_kcb
Wherea.**=b.**anda.课程号='101'andb.课程号='102'
方法二,使用子查询:
Select**
From*s
Where**in(select**From*s_kcwhere课程号='101')
And**in(select**From*s_kcwhere课程号='102')
方法三、
Select**
From*s_kc
Where课程号='101'or课程号='102'
groupby**havingcount(**)=2
11.检索选修课程名为“数据库原理”的学生**和**。
Selecta.**,**
From*sa,*s_kcb,kcc
Wherea.**=b.**andb.课程号=c.课程号and课程名=’数据库原理’
12.查询每门课的最高分的学生**。
相关查询法
SELECTA.**,**,B.课程号,成绩
FROM*SA,*S_KCB
WHEREA.**=B.**AND成绩=
(SELECTMA*(成绩)FROM*S_KCC
WHEREB.课程号=C.课程号)
或派生表法
SELECTA.**,B.课程号,B.成绩,C.最高成绩
FROM*SA,*S_KCB,(SELECT课程号,MA*(成绩)最高成绩FROM*S_KCgroupby课程号)C
WHEREA.**=B.**ANDB.课程号=C.课程号andB.成绩=C.最高成绩
13.检索选修课程包含**为081101的学生所修课程的学生**。
方法一,
selectdistinct**
from*s_kc
where课程号in(select课程号
from*s_kc
where**='081101')
groupby**
havingcount(课程号)=
(selectcount(课程号)
from*s_kc
where**='081101')
方法二,
SELECT**,**
FROM*s
WHERENOTE*ISTS(
SELECT*
FROMkc,*s_kca
WHEREkc.课程号=a.课程号and**=’081103’
andNOTE*ISTS(
SELECT*
FROM*s_kcb
WHEREb.**=*s.**AND课程号=kc.课程号))
14.创建一个名为avg75的视图,包含所有平均成绩在75分以上的学生信息。
Createviewavg75
As
Select*
From*s
Where**in(
Select**
From*s_kc
Groupby**
Havingavg(成绩)>75)
Createviewavg75
As
Select**,性别,专业名,avg(成绩)
From*s_kcJOIN*sON*s.**=*s_kc.**
Groupby**,性别,专业名
Havingavg(成绩)>75
===================================================6
第8章习题
对于数据库scd,库中包含以下系、学生、班级各表:
student(**,**,年龄,班号)
class(班号,专业名,系名,入学年份)
department(系号,系名)
请使用T-SQL语言完成以下各题。
1.将student表的班号与**这两列组合创建一个升序的非聚集索引。
2.为department表的系名建立一个唯一索引,如果输入了重复的键,将忽略该INSERT或UPDATE语句,并使用填充因子FILLFACTOR为50%。
3.为数据库scd建立一个默认对象,使其对应于年龄为18,将其绑定到student表的年龄列上。
4.为数据库scd建立一个规则对象,并将其绑定到学生表的专业名列上,规定专业名的取值只能为‘护理学’、‘地质勘探’和‘考古学’之一。
5.修改class表为其建立一个CHECK约束,检查入学年份是否小于2009。
答案
1.将student表的班号与**这两列组合创建一个升序的非聚集索引。
Createnonclusteredinde*i*_bj_*monstudent(班号asc,**asc)
2.为department表的系名建立一个唯一索引,如果输入了重复的键,将忽略该INSERT或UPDATE语句,并使用填充因子FILLFACTOR为50%。
Createuniqueinde*uqi*_*mondepartment(系名asc)
WITHIGNORE_DUP_KEY,FILLFACTOR=50
3.为数据库scd建立一个默认对象,使其对应于年龄为18,将其绑定到student表的年龄列上。
Createdefaultd_ageas18
Go
E*ecsp_bindefault‘d_age’,‘student.年龄’
4.为数据库scd建立一个规则对象,并将其绑定到学生表的专业名列上,规定专业名的取值只能为‘护理学’、‘地质勘探’和‘考古学’之一。
Createruler_zymaszymin(‘护理学’,‘地质勘探’,’考古学’)
Go
E*ecsp_bindrule‘r_zym’,‘student.专业名’
5.修改class表为其建立一个CHECK约束,检查入学年份是否小于2008。
Altertableclass
Addconstraintck_r*nfcheck(入学年份<2008)
==================================================7
第9章习题1
习题九
三、设计题:
1.使用流程控制语句编写程序:
(1)在CJGL数据库中,使用case函数处理:
如果课程的学时在80以上显示学习时间长,学时在54~80显示学习时间一般,否则显示学习时间短。
(2)在CJGL数据库中,使用case函数处理:
如果学生的专业是“计算机”,显示热门,是“通信工程”显示一般,否则显示冷门。
(3)计算18!
=18*17*16…*2*1。
(4)计算S=1!
+2!
+3!
+……+10!
2.以下各题在CJGL数据库中实现:
(1)创建一个自定义函数,可以求解任意数n的阶乘,即n!
。
并用n=10调用该函数。
(2)分别用函数或存储过程实现以下功能:
给定输入参数课程名,统计该课程成绩介于58~59分的学生人数。
使用输入参数“数据库原理”调用该函数或该存储过程。
(3)创建存储过