第3章 关系数据库标准语言SQL
一、基本概念题
1. SQL语言有什么特点? 答:(1)语言功能的一体化 (2)模式结构的一体化 (3)面向集合的操作方式
(4)自含式语言(交互式语言),又是嵌入式语言两种使用方式、同一语法结构 (5)语言简洁、易学易用 (6)高度非过程化
2. 试指出SQL语言中基本表和视图的区别和联系是什么?
答:一个视图虽然也是一个关系,但是它与基本表有着本质的区别。任何一个视图都是从已有的若干关系导出的关系,它只是逻辑上的定义,实际并不存在。在导出时,给出一个视图的定义,此定义存放在数据字典中,但没有真正执行此定义。当使用某一视图查询时,将实时从数据字典中调出此视图的定义;根据此定义以及现场查询条件,从规定的若干关系中取出数据,组织成查询结果。因此,视图是虚表。
3. 哪些视图是可以更新的?哪些视图是不可以更新的?请各举一例说明。
4. 嵌入式SQL语言需解决的几个问题是什么?怎么解决? 答:使用嵌入式SQL必须解决以下几个问题:
.9.
⑴ 预编译器不能识别和接受 SQL语句,因此,嵌入式程序中,应有区分 SQL语句与 宿主语言语句的标记。如:在C语言中使用EXEC SQL标记。
⑵ DBMS和宿主语言程序(程序工作单元)如何进行信息传递。解决方法:主变量及其指示变量、SQL通信区。
⑶ 一条SQL语句原则上可产生或处理一组记录(集合),而宿主语言一次只能处理一
个记录,必须协调这两种处理方式。解决方法:游标。 5. 什么是游标?使用游标有哪几个步骤?
答:游标是系统为用户的查询结果开辟带指针的数据缓冲区,存放SQL的查询结果,每个游标有一个单独的名字。 游标的操作的主要步骤:
(1)用DECLARE语句声明游标,并定义游标类型和属性; (2)调用OPEN语句打开和填充游标;
(3)执行FETCH函数(或语句)读取游标中的单行数据; (4)如果需要,修改游标基表中的当前行数据; (5)执行CLOSE语句关闭游标;
(6)执行DEALLOCATE语句删除游标,并释放它所占用的所有资源。
6. 嵌入式SQL语言在什么情况下需要使用游标?什么情况下不需要使用游标? 答:不需要使用游标的语句有: .说明性语句;
.数据定义语句; . 数据控制语句; .INSERT语句
.查询结果为单记录的SELECT语句 . 对满足条件的当前记录(或记录集),一次性进行修改或删除的UPDATE和 DELETE语句(有些书上把 UPDATE或 DELETE语句这种使用形式称为非CURRENT形式)。
需要使用游标的SQL语句有:
.查询结果为多条记录的SELECT语句;
.对满足条件的结果集中记录分别进行修改或删除的UPDATE、DELETE语句。也称为CURRENT形式的UPDATE、DELETE语句
7. 什么是Transact-SQL?它在哪些方面增加了标准SQL的功能? 答:Transact-SQL 的缩写为T-SQL,T-SQL是Microsoft 公司的SQL Server的数据库语言,它是对标准SQL语言的扩充。T-SQL以存储过程、函数、数据类型、逻辑运算符及流程控制语句等增加了SQL语言的功能。
8. 什么是触发器?触发器的主要优点是什么?
答:所谓触发器就是一类由事件驱动的特殊过程(特殊类型的存储过程),当一个触发器建立后,它作为一个数据库对象被存储。当某个触发事件发生时,触发器被触发,执行一系列操作。触发器一旦由某个用户建立,任何用户对该触发器指定的数据进行增、删或改操作时,DBMS系统将自动激活相应的触发器,定义在触发器中的功能将被DBMS执行,在核心层进行集中的完整性控制。 触发器的主要优点
⑴ 触发器能够实施比外键约束,检查约束和规则对象等更为复杂的数据完整性检查。 ⑵ 和约束相比,触发器提供了更多的灵活性。约束将系统错误信息返回给用户,而触发器则可以打印错误信息,调用其他存储过程,或根据需要纠正错误。 ⑶ 无论对表中的数据进行何种更新(增、删、改操作),相应的触发器都能被激活,对数据实施完整性检查和处理。
⑷ 触发器能够级联更新数据库中的表内容。
.10.
9. 在SQL SERVER中定义触发器时可使用系统提供的两张特殊的临时表inserted和
deleted,这两个表的结构如何确定?作用是什么? 答:两张表与创建触发器的表有相同的结构。 作用是:
.用户可以使用该表检查某些修改操作的效果。 .但用户不能直接修改该表中的数据。
.用户可以使用该表的内容作为查询操作的判断条件,但要在FROM中写出使用的表名(inserted 或deleted)。
10. 什么是存储过程?存储过程有哪些特点?
答:存储过程是存放在数据库服务器上的预先定义与编译好的SQL语句集合,是一个独立的数据库对象。 存储过程特点如下:
⑴ 存储过程作为一个程序逻辑处理单元,使多个应用程序可以共享应用程序的处理逻辑单元,所有的客户机程序可以使用同一个存储过程进行各种操作,从而确保数据访问和操作的一致性,也提高了应用程序的可维护性。
⑵ 由于存储过程在第一次执行之后,就驻存在高速缓存存储器中,减少了执行SQL语句时的句法分析和查询优化的时间,提高了系统的执行效率。
⑶ 存储过程提供了一种安全机制。如果用户被授予执行存储过程的权限,那么既使该用户没有执行访问在该存储过程中所参考的表或者视图的权限,该用户也可以执行该存储过程。 ⑷ 减少了网络的流量负载。由于存储过程是存放在服务器端的,应用程序(客户端)只需向服务器发出一次请求调用一个存储过程,服务器上就可一次执行一批SQL命令,中间结果不用送回客户端,大大降低了网络流量和服务器的开销。
⑸ 因为存储过程提供该前端应用程序共享的处理逻辑,若要改变业务规则或策略,只需改变存储过程和参数,不用修改应用程序。 二、单项选择题
ACAAD、BDADC 三、填空题
1. SQL语言提供数据库定义、__数据操作______、数据控制等功能。 2.SQL语言特点之一是高度_非过程化_,只要说明要“做什么”,而不必说明“怎么做”。 3.在各类视图中,一般_行列子集_视图是可更新视图。
4.子查询中使用了_存在量词_的嵌套查询一般是相关子查询。 以下5、6、7题使用如下的关系表R、S和T: R(BH,XM,XB,DWH) S(DWH,DWM)
T(BH,XM,XB,DWH)
5. 实现∏XM,DWH(σXB=‘女’(R))的SQL语句是SELECT XM,DWH FROM R WHERE XB=’女’。 6. 实现R×S的SQL语句是 SELECT R.*,S.* FROM S,R 。
7. 实现∏BH,XM,XB,DWM(σXB=‘男’∧R.DWH=S.DWH(R×S))的SQL语句是
SELECT R.BH,R.XM,R.XB,S.DWM FROM R,S WHERE R.DWH=S.DWH and R.XB=’男’ 。
8. 在SQL语言中,把对表S,C进行查询,修改,插入,删除等全部权力授予所有用户的语句是 __ GRANT ALL ON S,C TO PUBLIC__。
9. 触发器一旦由某个用户建立,任何用户对该触发器指定的数据进行增、删或改操作时,DBMS系统将__自动_执行定义在触发器中的功能。
10.存储过程是存放在_数据库_上的_一组SQL_的语句集合,是一个独立的数据库对象。
四、编程题
.11.
已知有三个关系如下,请用SQL语言完成下面各项操作:
图书(总编号,分类号,书名,作者,出版单位,单价)
读者(借书证号,单位,姓名,性别,职称,地址,借阅册数) 借阅(借书证号,总编号, 借书日期) 1. 创建借阅基本表,同时指定主码和外码。(注:借书证号为字符型,宽度为 3 ;总编号为字
符型,宽度为 6 ;借书日期为日期时间型) 2.给读者表增加约束‘性别只能为男或女’。 3. 为图书表按总编号降序创建唯一索引。
4.查找‘清华大学出版社’的所有图书及单价,结果按单价降序排列。 5.查找单价在17元以上已借出的图书。
6.查找藏书中比‘清华大学出版社’的所有图书单价都高的图书总编号。
7.统计藏书中各个出版单位的册数和价值总和,显示册数在5本以上的出版单位、册数和
价值总和。
8 查找借阅了借书证号为‘006’的读者所借所有图书的读者借书证号、姓名和地址。
9.在借阅基本表中插入一条借书证号为‘008’,总编号为‘010206’, 借书日期为2000年12月16日的记录。
10. 将‘高等教育出版社’的图书单价增加5元。 11.删除所有作者为‘张三’的图书借阅记录。
12. 创建‘计算机系’借阅‘清华大学出版社’图书的读者视图。
13. 授予张军对借阅表有SELECT的权力,对其中借书日期有更新的权力。
14. 创建删除触发器,在借阅表中删除借阅记录时,将读者表的对应的借阅册数减1。 15. 创建一个带参数的存储过程,完成对指定借书证号的读者在2000年1月1日以后的借阅情况查询。
.12.