习题参考答案.docx
《习题参考答案.docx》由会员分享,可在线阅读,更多相关《习题参考答案.docx(35页珍藏版)》请在冰豆网上搜索。
![习题参考答案.docx](https://file1.bdocx.com/fileroot1/2023-7/4/1e5f9b54-2804-49e6-b911-70a02eb15694/1e5f9b54-2804-49e6-b911-70a02eb156941.gif)
习题参考答案
习题参考答案
第1章数据库概述
1.文件管理方式在管理数据方面有哪些缺陷
答:
编写应用程序不方便,数据冗余不可避免,应用程序依赖性,不支持对文件的并发访问,数据间联系弱,难以按不同用户的愿望表示数据和无安全控制功能。
2.与
2.文件管理相比,数据库管理有哪些优点
答:
将相互关联的数据集成在一起,具有较少的数据冗余,程序与数据相互独立,保证数据的安全可靠,最大限度地保证数据的正确性,数据可以共享并能保证数据的一致性。
3.比较文件管理和数据库管理数据的主要区别。
答:
数据库系统与文件系统相比实际上是在应用程序和存储数据的数据库之间增加了一个系统软件,即数据库管理系统,使得以前在应用程序中由开发人员实现的很多繁琐的操作和功能,都可以由这个系统软件完成,这样应用程序不再需要关心数据的存储方式,而且数据的存储方式的变化也不再影响应用程序。
而在文件系统中,应用程序和数据的存储是紧密相关的,数据的存储方式的任何变化都会影响到应用程序,因此不利于应用程序的维护。
4.数据库管理方式中,应用程序是否需要关心数据的存储位置和结构为什么
答:
不需要。
因为在数据库系统中,数据的存储位置以及存储结构保存在数据库管理系统中,从数据到物理存储位置的转换是由数据库管理系统自动完成的。
5.在数据库系统中,数据库的作用是什么
答:
在数据库系统中,数据库是存放数据的场所。
6.在数据库系统中,应用程序可以不通过数据库管理系统而直接访问数据库文件吗
答:
不能。
7.数据独立性指的是什么它能带来哪些好处
答:
数据独立性指的是数据的逻辑独立性和物理独立性。
逻辑独立性带来的好处是当表达现实世界信息的逻辑结构发生变化时,可以不影响应用程序;物理独立性带来的好处是当数据的存储结构发生变化时,可以不影响数据的逻辑组织结构,从而也不影响应用程序。
8.数据库系统由哪几部分组成,每一部分在数据库系统中的作用大致是什么
1.
答:
数据库系统由三个主要部分组成,即数据库、数据库管理系统和应用程序。
数据库是数据的汇集,它以一定的组织形式存于存储介质上;数据库管理系统是管理数据库的系统软件,它可以实现数据库系统的各种功能;应用程序指以数据库数据为核心的应用程序。
9.在文件服务器结构和客户/服务器结构中,对数据的处理有什么区别
答:
在文件服务器结构中,对数据的处理主要是在客户端完成的。
而在客户/服务器结构中,对数据的处理主要是在服务器端完成的。
10.应用在客户/服务器结构上的数据库管理系统是否也同样可以应用在互联网应用结构中
答:
可以。
第2章数据库系统结构
1.解释数据模型的概念,为什么要将数据模型分成两个层次
答:
数据模型是对现实世界数据特征的抽象。
数据模型一般要满足三个条件:
第一是数据模型要能够比较真实地模拟现实世界;第二是数据模型要容易被人们理解;第三是数据模型要能够很方便地在计算机上实现。
由于用一种模型同时很好地满足这三方面的要求在目前是比较困难的,因此在数据库系统中就可以针对不同的使用对象和应用目的,采用不同的数据模型。
根据模型应用的不同目的,将这些模型分为概念层数据模型和组织层数据模型两大类,以方便对信息的描述。
2.概念层数据模型和组织层数据模型分别是针对什么进行的抽象
答:
概念层数据模型是对现实世界的抽象,形成信息世界模型,组织层数据模型是对信息世界进行抽象和转换,形成具体的DBMS支持的数据组织模型。
3.实体之间的联系有哪几种请为每一种联系举出一个例子。
答:
实体之间的联系有一对一、一对多和多对多三种。
例如:
系和正系主任是一对一联系(假设一个系只有一名正系主任),系和教师是一对多联系(假设一名教师只在一个系工作),教师和课程是多对多联系(假设一名教师可以讲授多门课程,一门课程可由多名教师讲授)。
4.说明实体-联系模型中的实体、属性和联系的概念。
答:
实体是具有公共性质的并可相互区分的现实世界对象的集合,属性是人们感兴趣的实体或者联系的性质或特征,联系是数据和数据之间的关联关系。
5.指明下列实体间联系的种类:
(1)教研室和教师(假设一个教师只属于一个教研室,一个教研室可有多名教师)。
(2)商店和顾客。
(3)国家和首都。
答:
(1)一对多。
(2)多对多。
(3)一对一。
6.解释关系模型中的主键、外键的概念,并说明主键、外键的作用。
答:
主键是关系表中用于惟一地确定一个元组的属性或最小属性组,其作用是使表中的每一行数据彼此不重复且有意义。
外键是引用另一个表的主键(也可以是候选键)的表中的一个列,其作用是表示两个或多个实体之间的关联关系。
7.指出关系的主键:
教师授课表(教师号,课程号,学年,授课时数)。
假设一个教师可以在同一个学年讲授多门课程,一门课程也可以在同一个学年由多名教师讲授,但一个教师在一个学年对一门课程只讲授一次,每一次讲授有一个唯一的授课时数。
答:
主键:
(教师号,课程号,学年)
8.设有如下两个关系模式,试指出每个关系模式的主键、外键,并说明外键的引用关系。
产品表(产品号,产品名称,产品价格,生产日期),其中产品名称有重复。
销售表(产品号,销售时间,销售数量),假设可同时销售多种产品,但同一产品在同一时间只销售一次。
答:
产品表主键:
产品号。
销售表主键为:
(产品号,销售时间)。
销售表的“产品号”为引用产品表的外键。
9.关系模型的数据完整性包含哪些内容分别说明每一种完整性的作用。
答:
数据完整性约束主要包括三大类,即实体完整性、参照完整性和用户定义的完整性。
实体完整性是保证关系数据库中所有的表都必须有主键,且主键不允许为空。
参照完整性用于描述实体之间的关联关系。
用户定义的完整性实际上是约束关系中属性的取值范围,即保证数据库中的数据符合现实语义。
10.数据库系统包含哪三级模式试分别说明每一级模式的作用
答:
数据库系统包含的三级模式为:
内模式、模式和外模式。
外模式是对现实系统中用户感兴趣的整体数据结构的局部描述,用于满足不同数据库用户需求的数据视图,是数据库用户能够看见和使用的局部数据的逻辑结构和特征的描述,是对数据库整体数据结构的子集或局部重构。
模式是数据库中全体数据的逻辑结构和特征的描述,是所有用户的公共数据视图。
内模式是对整个数据库的底层表示,它描述了数据的存储结构。
11.数据库系统的两级映象的功能是什么它带来了哪些功能
答:
数据库系统的两级映象是模式与内描述间的映象和外模式与模式间的映象。
模式/内模式的映象定义了概念视图和存储的数据库的对应关系,它说明了概念层的记录和字段在内部层次怎样表示。
如果数据库的存储结构改变了,那么,必须对模式/内模式的映象进行必要的调整,使模式能够保持不变。
外模式/概念模式间的映象定义了特定的外部视图和概念视图之间的对应关系,当概念模式的结构可发生改变时,也可以通过调整外模式/模式间的映象关系,使外模式可以保持不变。
12.数据库三级模式划分的优点是什么它能带来哪些数据独立性
答:
数据库的三级模式的划分实际上将用户、逻辑数据库与物理数据库进行了划分,使彼此之间的相互干扰减到最少。
这三个模式的划分实际上带来了两个数据独立性,即物理独立性和逻辑独立性。
这使得底层的修改和变化尽量不影响到上层。
第3章SQL语言基础及数据定义功能
1.T-SQL支持哪几种数据类型
答:
支持数值型、字符型、日期时间型和货币类型四种类型。
2.Tinyint数据类型定义的数据的取值范围是多少
答:
0~255。
3.日期时间类型中的日期和时间的输入格式是什么
答:
一般来说年、月、日中间用“/”或“-”分隔符分隔,时间中的时、分、秒用“:
”分隔,毫秒与秒之间用“.”分隔。
日期和时间中间用空格分隔,且日期和时间均括在单引号中。
4.SmallDatatime类型精确到哪个时间单位
答:
分钟。
5.定点小数类型numeric中的p和q的含义分别是什么
答:
p是数字位个数(包括小数位数和整数位数),q是小数位数。
6.货币数据类型精确到小数点几位
答:
4位。
7.Char(10)、nchar(10)的区别是什么它们各能存放多少个字符占用多少空间
答:
两者使用的编码方式不同,char类型是单字节编码方式,而且不同的字符使用的编码方不同;而nchar是双字节编码方式。
Char(10)可以存放10个字符,占10个字节;nchar(10)也是可以存放10个字符,但它占20个字节空间。
8.Char(n)和varchar(n)的区别是什么其中n的含义是什么各占用多少空间
答:
Char(n)是定长存储的字符串类型,varchar(n)是可变长的字符串类型,它按数据的实际长度来分配空间。
其中n的含义都是能够存储的字符的个数,对于char(n)类型其所占的空间固定为n个字节;对于varchar(n)其所占空间最多为n个字节。
9.数据完整性的含义是什么
答:
数据的完整性是为了防止数据库中存在不符合应用语义的数据,为了维护数据的完整性,数据库管理系统提供了一种机制来检查数据库中的数据,看其是否满足语义规定的条件。
这些加在数据库数据之上的语义约束条件就是数据完整性约束条件。
10.在对数据进行什么操作时,系统检查DEFAULT约束在进行什么操作时,检查CHECK约束
答:
在进行插入操作时检查DEFAULT约束。
在进行插入和更新操作时检查CHECK约束。
11.UNIQUE约束的作用是什么
答:
UNIQUE约束的作用是保证数据的取值不重复。
12.写出创建如下三张表的SQL语句,要求在定义表的同时定义数据的完整性约束:
(1)“图书表”结构如下:
书号:
统一字符编码定长类型,长度为6,主键;
书名:
统一字符编码可变长类型,长度为30,非空;
第一作者:
普通编码定长字符类型,长度为10,非空;
出版日期:
小日期时间型;
价格:
定点小数,小数部分1位,整数部分3位。
(2)“书店表”结构如下:
书店编号:
统一字符编码定长类型,长度为6,主键;
店名:
统一字符编码可变长类型,长度为30,非空;
电话:
普通编码定长字符类型,8位长,每一位的取值均是0~9的数字;
地址:
普通编码可变长字符类型,40位长。
邮政编码:
普通编码定长字符类型,6位长。
(3)“图书销售表”结构如下:
书号:
统一字符编码定长类型,长度为6,非空;
书店编号:
统一字符编码定长类型,长度为6,非空;
销售日期:
小日期时间型,非空;
销售数量:
小整型,大于等于1。
主键为(书号,书店编号,销售日期);
其中“书号”为引用“图书表”的“书号”的外键;
“书店编号”为引用“书店表”的“书店编号”的外键。
答:
CREATETABLE图书表(
书号nchar(6)primarykey,
书名nvarchar(30)notnull,
第一作者char(10)notnull,
出版日期smalldatetime,
价格numeric(4,1))
CREATETABLE书店表(
书店编号nchar(6)primarykey,
店名nvarchar(30)notnull,
电话char(8)check(电话like'[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'),
地址varchar(40),
邮政编码char(6))
CREATETABLE图书销售表(
书号nchar(6)notnull,
书店编号nchar(6)notnull,
销售日期smalldatetimenotnull,
销售数量smallintcheck(销售数量>=1),
primarykey(书号,书店编号,销售日期),
foreignkey(书号)references图书表(书号),
foreignkey(书店编号)references书店表(书店编号))
13.为第12题的图书表添加“印刷数量”列,类型为整数,同时添加约束,要求此列的取值要大于等于1000。
答:
ALTERTABLE图书表
ADD印刷数量intcheck(印刷数量>=1000)
14.删除第12题的“书店表”中的“邮政编码”列。
答:
ALTERTABLE书店表
DROPCOLUMN邮政编码
15.将第12题的“图书销售表”中的“销售数量”列的数据类型改为整型。
答:
ALTERTABLE图书销售表
ALTERCOLUMN销售数量int
16.索引的作用是什么分为哪几种类型
答:
索引的作用是为了加快数据的查询速度。
索引分为聚集索引和非聚集索引两种。
17.在一个表上可以创建几个聚集索引可以创建多个非聚集索引吗
答:
在一个表上只能创建一个聚集索引。
可以创建多个非聚集索引。
18.聚集索引一定是唯一索引,对吗反之呢
答:
不对。
唯一索引可以是聚集的也可以是非聚集的。
19.在建立聚集索引时,系统是真正将数据按聚集索引列进行物理排序,对吗在建立非聚集索引时呢情况又如何
答:
对。
但在建立非聚集索引时,系统并不物理地调整数据的排列顺序。
20.在第12题的图书表的“第一作者”列上建立一个非聚集索引。
答:
CREATEINDEXindAuthorON图书表(第一作者)
21.在第12题的书店表的“电话”列上建立一个聚集的唯一索引。
答:
CREATEUNIQUECLUSTEREDINDEXindPhone
ON书店表(电话)
22.在第12题的图书销售表的“书号”和“销售日期”两个列上建立一个非聚集索引。
答:
CREATEINDEXindSaleON图书销售表(书号,销售日期)
第4章数据操作
1.查询SC表中的全部数据。
答:
select*fromSC
2.查询计算机系学生的姓名和年龄。
答:
selectsname,sagefromstudentwheresdept='计算机系'
3.查询成绩在70~80分的学生的学号、课程号和成绩。
答:
selectsno,cno,gradefromsconwheregradebetween70and80
4.查询计算机系年龄在18~20岁的男学生的姓名和年龄。
答:
selectsname,sagefromstudent
wheresdept='计算机系'andsagebetween18and20andssex='男'
5.查询C001课程的最高分。
答:
selectmax(grade)fromscwherecno='C001'
6.查询计算机系学生的最大年龄和最小年龄。
答:
selectmax(sage)asmax_age,min(sage)asmin_agefromstudent
wheresdept='计算机系'
7.统计每个系的学生人数。
答:
selectsdept,count(*)fromstudentgroupbysdept
8.统计每门课程的选课人数和考试最高分。
答:
selectcno,count(*),max(grade)fromscgroupbycno
9.统计每个学生的选课门数和考试总成绩,并按选课门数升序显示结果。
答:
selectsno,count(*),sum(grade)fromscgroupbysnoorderbycount(*)asc
10.查询总成绩超过200分的学生,要求列出学号和总成绩。
答:
selectsno,sum(grade)fromscgroupbysnohavingsum(grade)>200
11.查询选修C002课程的学生的姓名和所在系。
答:
selectsname,sdeptfromstudentsjoinscon=
wherecno='C002'
12.查询成绩80分以上的学生的姓名、课程号和成绩,并按成绩降序排列结果。
答:
selectsname,cno,gradefromstudentsjoinscon=
wheregrade>80orderbygradedesc
13.查询哪些课程没有学生选修,要求列出课程号和课程名。
答:
select,cnamefromcoursecleftjoinscon=
whereisnull
14.查询计算机系哪些学生没有选课,列出学生姓名。
答:
selectsnamefromstudentsleftjoinscon=
Wheresdept='计算机系'andisnull
15.用子查询实现如下查询:
(1)查询选修C001课程的学生的姓名和所在系。
答:
selectsname,sdeptfromstudentwheresnoin(
selectsnofromscwherecno='C001')
(2)查询通信工程系成绩80分以上的学生的学号和姓名。
答:
selectsno,snamefromstudentwheresnoin(
selectsnofromscwheregrade>80)
andsdept='通信工程系'
(3)查询计算机系考试成绩最高的学生的姓名。
答:
selectsnamefromstudentsjoinscon=
wheresdept='计算机系'
andgrade=(selectmax(grade)fromscjoinstudentson=
wheresdept='计算机系')
(4)查询年龄最大的男学生的姓名和年龄。
答:
selectsname,sagefromstudent
Wheresage=(selectmax(sage)fromstudentandssex='男')
andssex='男'
(5)查询C001课程的考试成绩高于该课程平均成绩的学生的学号和成绩。
答:
selectsno,gradefromscwherecno='C001'
Andgrade>(selectavg(grade)fromscwherecno='C001')
16.创建一个新表,表名为test_t,其结构为(COL1,COL2,COL3),其中,
COL1:
整型,允许空值。
COL2:
字符型,长度为10,不允许空值。
COL3:
字符型,长度为10,允许空值。
试写出按行插入如下数据的语句(空白处表示空值)。
COL1
COL2
COL3
B1
1
B2
C2
2
B3
答:
createtabletest_t(
COL1int,
COL2char(10)notnull,
COL3char(10))
insertintotest_tvalues(NULL,'B1',NULL)
insertintotest_tvalues(1,'B2','C2')
insertintotest_t(COL1,COL2)values(2,'B3')
17.删除修课成绩小于50分的学生的选课记录。
答:
deletefromscwheregrade<50
18.将所有选修C001课程的学生的成绩加10分。
答:
updatescsetgrade=grade+10wherecno='C001'
19.将计算机系所有选修“计算机文化学”课程的学生的成绩加10分。
答:
updatescsetgrade=grade+10
wheresnoin(
selectsnofromstudentwheresdept='计算机系')
andcnoin(
selectcnofromcoursewherecname='计算机文化学')。
20.试说明使用视图的好处。
答:
使用视图能够带来如下好处:
简化数据查询语句:
用户可以将复杂的查询语句封装在视图中,这样以后用户在使用相同的查询时,只需对视图进行查询即可。
使用户能从多角度看到同一数据:
视图机制能使不同的用户以不同的方式看待同一数据,当许多不同种类的用户共享同一个数据库时,这种灵活性是非常重要的。
提高了数据的安全性:
使用视图可以定制允许用户查看哪些数据并屏蔽掉敏感的数据,从而提高数据库数据的安全性。
提供一定程度的逻辑独立性:
视图对应数据库三级模式中的外模式,因此,可以将用户对数据的操作限制在视图上,而不直接对模式进行操作,这样当模式发生变化时,视图可以不变。
21.使用视图可以加快数据的查询速度,这句话对吗为什么
答:
不对。
使用视图不但不会加快对数据的查询速度,而且还会降低数据查询速度。
因为通过视图查询数据时,要先将这个查询转换为对基本表的查询,有时这个转换是比较复杂的。
因此,通过视图查询数据比直接对基本表查询要慢。
22.写出创建满足下述要求的视图的SQL语句。
(1)查询学生的学号、姓名、所在系、课程号、课程名、课程学分。
答:
CREATEVIEWV1
AS
SELECT,Sname,Sdept,,Cname,Ccredit
FROMStudentSJOINSCON=
JOINCourseCON=
(2)查询学生的学号、姓名、选修课程名和考试成绩。
答:
CREATEVIEWV2
AS
SELECT,Sname,Cname,Grade
FROMStudentSJOINSCON=
JOINCourseCON=
(3)统计每个学生的选课门数的视图,要求列出学生学号和选课门数。
答:
CREATEVIEWV3
AS
SELECTSno,Count(*)AStotal
FROMSCGROUPBYSno
(4)统计每个学生的修课总学分的视图,要求列出学生学号和总学分(说明:
考试成绩大于等于60才可获得此门课程的学分)。
答:
CREATEVIEWV4
AS
SELECTSno,SUM(Ccredit)sum_credit
FROMSCJOINCourseCON=
WHEREGrade>=60
GROUPBYSno
23.利用第22题建立的视图,完成如下查询:
(1)查询考试成绩大于等于90分的学生的姓名、课程名和成绩。
答:
SELECTSname,Cname,GradeFROMV2WHEREGrade>=90
(2)查询选课门数超过3门的学生的学号和选课门数。
答:
SELECTSno,totalFROMV3WHEREtotal>3
(3)查询计算机系选课门数超过3门的学生的姓名和选课门数。
答:
SELECTSname,totalFROMV3JOINStudentSon=
WHEREtotal>3andSdept='计算机系'
(4)查询修课总学