第4章 关系数据库的结构化查询语言习题解答

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

第4章关系数据库的结构化查询语言

习题解答

一. 简答题

1.SQL的特点是什么?

(1)一体化特点。SQL提供了一系列完整的数据定义和操纵功能,用SQL可以实现数据库生命周期中的全部活动,包括定义关系模式,录入数据以建立数据库、查询、更新、维护、数据库重构、数据库安全性控制等一系列操作要求。

(2)高度非过程化。SQL和其它数据操作语言不同的关键是SQL为非过程语言,它允许用户依据做什么来说明操作,而不用说明怎样做,存取路径的选择和SQL语句操作的过程由系统自动完成。

(3)语言简洁,易学易用。SQL的语法很简单,语言十分简洁,完成核心功能只用了9个动词。初学者经过短期的学习就可以使用SQL进行数据库的存取等操作,易学易用是它的最大特点。

(4)统一的语法结构对待不同的工作方式。无论是联机交互使用方式,还是嵌入到高级语言中使用,其语法结构是基本一致的,这就大大改善了最终用户和程序设计人员之间的通信。

(5)面向集合的操作方式。SQL采用集合操作方式,无论是操作对象还是查询更新的结果均是元组的集合。

(6) SQL语言可以对两种基本数据结构进行操作,一种是“表”,另一种是“视图(View)”。

2.什么是基本表? 什么是视图? 两者的区别和联系是什么?

基本表是本身独立存在的表,一个(或多个)基本表对应一个存储文件,一个表可以带若干索引,索引也存放在存储文件中。存储文件的逻辑结构组成了关系数据库的内模式。

视图是从一个或几个基本表导出的表,它本身不独立存储在数据库中,即数据库中只存储视图的定义而不存储对应的数据,因此视图是一个虚表。用户可在视图和/或基本表上定义新的视图。

基本表是实表,而视图则是虚表。用户可以用SQL语言对视图(View)和基本表(Base table)进行查询等操作,在用户观点里,视图和基本表一样都是关系。

3.视图是否都可以更新?试举例说明。

在一般情况下,只有行列子集视图才能更新,而由以下例子建立的视图不仅用到分组,而且还有avg函数,所以不能更新。

已知关系模式:学生(学号,姓名,年级,专业)、选课(学号,课号,成绩),将学生的学号、姓名及他的平均成绩定义为如下一个视图:

Create view PJCJ(学号,姓名,平均成绩)

As Select 学号,姓名,avg(成绩)

From 学生,选课

Where 学生.学号=选课.学号

Group by 学生.学号,姓名;

4.建索引的目的是什么? 是否索引建得越多越好?

建立索引的目的是为了加快检索速度,但并不意味着表的索引建得越多越好,因为维护索引结构也需要花费系统的一定开销,尤其是对那些经常有更新操作的表,其索引结构维护的代价是很大的。通常是根据需要建立索引,如果需要经常使用某列数据进行查询,则使用该列建立索引效果会很好。另外,一般数据库管理系统中,所有的索引都是自动维护的,无须用户介入;如果建太多的索引,则会增加维护索引的代价,影响系统性能。

二.问答题

1.设两个关系模型为: S(sno,name, sex,age)、SC(sno,cno,grade),请用 SQL语言实现下列操作(假设每门课都有人选):

(l) 求“01”号课成绩大于80分的所有男生的姓名;

Select name

From S,SC

Where S.sno=SC.sno and cno=’01’ and grade>80 and sex=’男’;

(2) 求至少选修“01”和“03”两门课的学生信息;

Select S.* from S

Where sno in

( select sno from SC

Where cno=’01’ and sno in

( select sno from SC

Where cno=’03’));

(3) 建立一个新关系模型 TSCC(sno, name, avggrade),并将学生的平均成绩存入该关系中;

Select sno,name,avg(grade) as avggrade

Into TSCC

From S,SC

Where S.sno=SC.sno

Group by S.sno,name

(4) 求学习全部课程的所有学生姓名。

Select sno,name

From S,SC

Where S.sno=SC.sno

Group by S.sno,name having count(*)=( select count(distinct cno)

From SC);

(5) 求各课不及格学生的课号、姓名及成绩。

Select cno,name,grade

From S,SC

Where S.sno=SC.sno and grade<60;

2.已知四个关系模式:学生(学号,姓名,年级,专业)、选课(学号,课号,成绩)、课程(课号,课名,学时数)、必修课(课号,必修专业),请用SQL语言完成下列操作:

(1) 列出选修“数据库原理”的学生名单;

Select姓名From学生,选课,课程

Where 学生.学号=选课.学号 and 选课.课号=课程.课号

and 课名=’数据库原理’;

(2) 将学生的学号、姓名及他的平均成绩定义为一个视图;

Create view PJCJ(学号,姓名,平均成绩)

As Select 学号,姓名,avg(成绩)

From 学生,选课

Where 学生.学号=选课.学号

Group by 学生.学号,姓名;

(3) 由(2)建立的视图是否可更新?请说明理由。

由(2)建立的视图不可更新。因为在一般情况下,只有行列子集视图才能更新,而由(2)建立的视图不仅用到分组,而且还有avg函数,所以不能更新。

3.今有两个关系模式:学生(学号,姓名,性别,出生日期)、选修课程(学号,课号,成绩),请用 SQL中的 GRANT和 REVOKE语句,完成以下授权定义或存取控制功能:

(1)用户王明对两个表有 SELECT权力;

Grant SELECT on学生,选修课程 to 王明;

(2)用户刘刚对两个表有 INSERT和 DELETE权力;

Grant INSERT,DELETE on学生,选修课程 to 刘刚;

(3)用户金星对选修课表有 SELECT权力,对学生表有更新姓名字段的权力;

Grant SELECT on 选修课程,UPDATE on 学生(姓名) to 金星;

(4)用户周平具有对两个表的所有权力,并具有给其他用户授权的权力;

Grant ALL on 学生,选修课程 to 周平 with grant option;

相关文档
最新文档