数据库原理答案.docx
《数据库原理答案.docx》由会员分享,可在线阅读,更多相关《数据库原理答案.docx(11页珍藏版)》请在冰豆网上搜索。
数据库原理答案
习题一
选择题.
1.D2.B3.B4.A5.B6.A7.C
简答题.
1.数据库系统的组成部分。
答:
主要由四个部分组成:
即数据库(DB)、数据库管理系统(DBMS)、数据库应用和数据库管理员(DBA)
2.DBA的主要职责。
答:
DBA全面负责对数据库管理的计划、组织、测试、监控和服务,主要有以下几个方面:
1).向终端用户提供数据和信息2).指定数据库的管理的政策、标准和规程3).确保数据库的全面性,防止非法操作4).数据库的备份和恢复5).培训中端用户
3.
文件系统的数据管理方法。
(1)在文件系统中,即使是最简单的数据查询任务也必须用某种第三代语言编写程序,这不仅耗时而且要求程序员具备较高的编程技能,而且这种复程序很难调试,且常引起错误。
(2)在文件系统中,即使最简单的报表,也必须编程序才能实现,所以很难做到“及时处理”,若要产生一个新报表。
就必须话费一定时间编写和调试程序,然而,也许得出所要信息时,性和谐信息也失效了。
(3)若一个文件中系统中的文件数目不断膨胀,程序员的负担就要更加重了,每个文件需要编写五个独立程序结构,使用户能够建立文件的结构、向文件里添加数据、从文件中删除数据、修改文件的数据、显示文件的内容。
(4)程序设计员必须话费很大精力设计和维护文件的结构,在文件环境中,要改变一个已存在文件的结构是相当麻烦的,当文件结构和数据发生任何微笑的变化时,都必须修改或重新编写文件存取程序,文件系统的文件只能存储数据,不存储文件的结构信息,文件的建立、存取、查询、插入、删除、修改等所有操作,都需要用户用程序来实现,所设计的文件结构问题都必须由用户在程序中说明
(5)文件系统中设置口令,封锁文件中的部分数据,或者实施其他安全性的措施,很难用程序来实现,即使能改善一下系统数据的安全性,改善的范围和效果也是十分有限的,由于文件结果取决于数据所属部门的需求,所以很难实现数据共享和安全性保证,当系统规模扩大后,整个系统非常难以控制。
(6)因此,文件系统无法适应现代化的信息处理需求。
4文件系统的主要缺陷。
1)数据很难共享2)数据亢余3)数据独立性差4)数据控制困难
5.数据库系统的主要优点。
1)在数据字典中存储的数据结构(元数据)和数据之间的额联系,所在应用程序的、都通过DBMS访问数据库,DBMS能根据数据库的任何变动自动的修改数据字典,不需要用户修改存储程序,所以,DBMS可以消除文件系统中数据依赖于程序的弱点,提供较好的数据独立性。
2)在建立数据库时,只需要简单的定义数据的逻辑结构,不惜花费大量的精力定义数据的物理结构和编写程序
3)可以自动的将用户输入的逻辑数据转换成物理数据,逻辑数据与物理数据之间的变换有DBMS来完成,同时DBMS还能够把用户的逻辑请求转换成内部命令,由DBMS确定数据的物理地址,然后DBMS再将查询的结果按照用户要求的格式输出
4)DBMS中通过封锁和授权机制,确保数据库的安全性和保密性
5)能够实现数据共享,支持多个用户的数据存取
6)具有数据备份和数据恢复的能力,保证数据的可靠性
7)提供完整性约束功能,可以控制数据亢余和消除潜在的数据不一致问题
8)提供功能强大结构化查询语言(SQL),SQL属于一种非过程性语言,只需用户指出做什么,不必要说明怎么做,同时DBMS还提供了第三代语言存取数据的接口
6.什么是数据模型?
能表示试题类型及实体间联系的模型称为“数据模型”,数据模型可分为概念模型和实现模型两种形式
7.层次结构的特点。
1)把系统划分成若干小部分再按照层次结构逐级组合成一个整体,使用了分层结构的构造方法,起结构类似于“倒置树”,每一个父可以有多个子,每个子只能有一个父,层次数据库的父片段与子片段之间是一对的关系,层次结构按照一对多的原则构造层次树
2)记录之间的联系通过指针来实现查询效率高,用户和设计者面对的是逻辑数据而不是物理数据,用户无需花费大量经历考虑数据间的物理细节,逻辑数据与物理数据之间的转换由DBMS完成
8.DBMS提出关于数据库的三个重要规范。
1)模式是对整个数据库的概念描述,通常称为DBA视图,即数据管理员看到的数据库
2)子模式是应用程序所’看到”和使用的数据库,子模式是模式的一部分,只要按照子模式定义编写应用程序,就可以简便的调用子模式,访问数据库中相应的数据
3)数据管理语言(DML)定义数据的各种特性和数据结构,以及对数据进行的各种操作,DML由模式定义语言,子模式定义语言数据操作语言三部分组成
9.关系数据模型的基本结构。
关于数据模型的基本结构是表,又称为关系。
10.关系数据模型实现数据联系的方法
在关系数据模型中,基本结构是表,表是由行、列组成的矩阵,表与表之间的额联系是通过实体之间的公共属性实现的,也即用“在一个关系中包含另一个属性”的方法来实现数据之间的联系。
习题二
选择题.
1.D2.D3.D4.B5.C6.B7.C8.B9.B10.B11.D12.B13.C14.A15.C16.D17.B18.A19.A
解答题.
1.
(1)
(2)
(3)
(4)
或者
第二种方法要好些,先选择再连接,这样能提高效率。
(5)
2.
(1)
(2)
(3)
或者
(4)
(5)
(6)
(7)
3.
(1)
(2)
(3)
(4)
(5)
习题三
选择题
1.D2.A3.B4.D5.A6.C7.D8.C9.B10.D11.B
解答题
1.
(1)显示所有50岁以上女业务员的姓名和年龄;
SELECT业务员姓名年龄
FROM业务员
WHERE年龄>=50AND性别=’女’;
(2)检索年龄最大的业务员姓名和年龄;
SELECTa.业务员姓名a.年龄
FROM业务员ASa
WHEREa.年龄=
(SELECTMAX(b.年龄)
FROM业务员b);
(3)显示左右业务员的姓名和月薪,要求按照月薪降序排列
SELECT业务员姓名月薪
FROM业务员
ORDERBY月薪DESC
(4)检索月薪在2000元到3000元之间的业务员姓名,用BETWEEN关键词
SELECT业务员姓名
FROM业务员
WHERE月薪BETWEEN2000AND3000;
(5)统计每个客户签订单的数目和总金额
SELECT客户编号,count(客户编号)AS客户订单总数,SUM(金额)AS客户订单金额
FROM订单
GROUPBY客户编号;
(6)检索所有经办客户王明订单的业务员兴民(分别用连接和子查询实现)
连接:
SELECT业务员、业务员姓名
FROM(订单INNERJOIN客户ON客户、客户编号=订单、客户编号)INNERJOIN业务员ON
业务员、业务员编号=订单、业务员编号
WHERE客户姓名=’王明’
:
连接2:
SELECT业务员.业务员姓名
FROM业务员客户订单
WHERE客户客户编号=订单客户编号AND业务员业务员编号=订单.业务员编号AND客户客户姓名=’王明’;
用子查询:
SELECT业务员姓名
FROM业务员
WHERE业务员编号IN
(SELECT业务员编号
FROM订单
WHERE客户编号IN
(SELECT客户编号
FROM客户
WHERE客户姓名=’王明’));
(7)统计每个业务员签订500元以上订单的数目
SELECT业务员、业务员编号,COUNT(订单.业务员编号)AS500元以上订单数
FROM业务员订单
WHERE订单.金额>=500AND业务员.业务员编号=订单业务员编号
GROUPBY业务员业务员编号
(8)检索签订2个以上订单的业务员姓名
SELECT业务员姓名
FROM业务员
WHERE业务员编号IN
(SELECT业务员编号
FROM订单
GROUPBY业务员编号
HAVINGCOUNT(业务员编号)>=2);
(9)讲所有业务员的月薪增加10%
查询→新建→设计视图→确定
在“显示表”中选择“业务员”表
将“显示表”对话框关闭
在“查询类型”中选择“更新查询”
法一:
输入SQL语句UPDATE业务员SET业务员.月薪=月薪*1.1;
法二:
将“月薪”属性拖入“字段”栏,再将准则设为“月薪*1.1”
(10)同(9)
法一:
输入SQL语句UPDATE业务员SET业务员.月薪=3500
WHERE业务员姓名=“关悦”
法二:
月薪
业务员姓名
业务员
业务员
3500
关悦
(11)检索超过平均月薪的业务员姓名和年龄
SELECTA.业务员姓名A.年龄
FROM业务员ASA
WHEREA.月薪>=(SELECTAVG(B.月薪)
FROM业务员B)
(12)将签订订单总金额超过2万元的月薪增加5%
UPDATE业务员SET业务员.月薪=月薪*1.05
WHERE业务员编号IN
(SELECT业务员编号
FROM订单
GROUPBY业务员编号
HAVINGSUM(订单.金额>=20000);
2.
(1)检索所有女同学的姓名,试写出实现该查询的关系代数表达式
SELECT姓名
FROM学生
WHERE性别=’女’
(2)检索选修“数据库”的学生姓名,要求写出关系代数表达式和SQL语句实现这个查询
SQL语句:
SELECT姓名
FROM学生
WHERE学号IN
(SELECT学号
FROM成绩
WHERE课程号IN
(SELECT课程号
FROM课程
WHERE课程名=’数据库’));
(3)检索课程号等于“C101”且分数90分以上(含90分)学生的姓名
SELECT姓名
FROM学生
WHERE学号IN
(SELECT学号
FROM成绩
WHERE课程号=‘C101’AND分数>=90);
(4)写出SQL语句,检索学习“C101”中且分数最高的学生姓名
SQL语句:
SELECT姓名
FROM学生
WHERE学号IN
(SELECT学号
FROM成绩
WHERE分数=(SELECTMAX(分数)
FROM成绩
WHERE课程号=’C101’));
(5)检索所有为选修“C101”课程的学生姓名
SELECT姓名
FROM学生
WHERE学号NOTIN
(SELECT学号
FROM成绩
WHERE课程号=’C101’);
(6)在成绩表中增加学分列,并根据学分=学时/18的算法,填上每门课程的学分
法一:
①选择“查询”→“SQL特定查询”→“数据定义”(使用数据定义查询)
用语句ALTERTABLE成绩ADD学分Smallint(学分为整数)
②“新建”→“设计视图”→“查询”→“SQL特定查询”→“数据定义”
用语句ALTERTABLE课程ADD学分Smallint(学分为整数)
③选择“新建”→“设计视图”→“查询”→“更新查询”
用语句UPDATE课程SET学分=【学分】/18;
④选择“新建”→“设计视图”→“查询”→“更新查询”
用语句UPDATE成绩INNERJOIN课程ON成绩.课程号=课程.课程号SET成绩.学分=课程.学分
法二:
第一步同法一①
第二步“新建”→“设计视图”→“查询”→“更新查询”
用语句UPDATE成绩INNERJOIN课程ON成绩.课程号=课程.课程号SET成绩.学分=(课程.学时/18)
(7)实现关系代数表达式:
SQL语句:
SELECT*
FROM成绩
WHERE分数<60;
或者
SELECT*
FROM成绩
WHERE分数NOTIN
(SELECT分数
FROM成绩
WHERE分数>=60);
(8)检索选修5门以上课程的学生姓名
SELECT姓名
FROM学生
WHERE学号IN
(SELECT学号
FROM成绩
GROUPBY学号
HAVINGCOUNT(学号)>=5);
(9)创建一个查询成绩的师徒VSK,其属性有姓名、课程名和分数
CREATEVIEWVSKAS
SELECT姓名、课程名、分数
FROM学生INNERJOIN成绩ON学生.学号=成绩.学号
在ACCESS中似乎不能实现,创建视图
(10)检索学生中选修课情况,显示姓名、课程名和分数,其中包括没有选修的学生
1选择“新建”→“设计视图”
SELECT成绩.课程号AS课程号.课程名.学时.性质.学号.分数.学分
FROM课程INNERJOIN成绩ON(课程.课程号=成绩.课程号)
并将此查询命名为建立课程.成绩两表的内连接
2选择“新建”→“设计视图”→“查询”→“SQL待定查询”→“联合”
SELECT姓名.课程名.分数
FROM学生LEFTJOIN建立课程成绩两表的内连接ON学生.学号=建立课程成绩两表的内连接.学号
分析:
这里需要用到左外连接,但是又不能三个表同时进行左外连接,因此要先将成绩课程两表进行了内连接之后再用学生表与它们内连接的结果进行左外连接。
习题四