关系数据库标准语言SQL
习题
1.试述SQL语言的特点。 2.试述SQL的定义功能。
3.用SQL语句建立第二章习题5中的4个表。
4.针对上题中建立的4个表试用SQL语言完成第二章习题5中的查询。 5.针对习题3中的4个表试用SQL语言完成下列各项操作:
(1)找出所有供应商的姓名和所在城市。 (2)找出所有零件名称、颜色、重量。
(3)找出使用供应商SI所供应零件的工程号码。
(4)找出工程项目J2使用的各种零件的名称及其数量。 (5)找出上海厂商供应的所有零件号码。 (6)找出使用上海产的零件的工程名称。
(7)找出没有使用天津产的零件的工程号码。 (8)把全部红色零件的颜色改成蓝色。
(9)由S5供给J4的零件P6改为由S3供应,请做必要的修改。
(10)从供应商关系中见风删除S2的记录,并从供应情况关系中删除相应的记录。 6.什么是基本表?什么是视图?两者的区别和联系是什么? 7.试述视图的优点。
8.所有的视图是否都可以更新?为什么?
9.哪类视图是可以更新的?哪类视图是不可以更新的?各举一例说明。 10.试述某个你熟悉的实际系统中对视图更新的规定。
11.请为三建工程项目建立一个供应情况的视图,包括供应商代码(SNO)、零件代码(PNO)、供应数量(QTY)。针对该视图完成下列查询:
(1)找出三建工程项目使用的各种零件代码及其数量。 (2)找出供应商S1的供应情况。
12.针对习题3建立的表,用SQL语言完成以下各项操作:
(1)把对表S的INSERT权限授予用户张勇,并允许他在将此权限授予其他用户。 (2)把查询SPJ表和修改QTY属性的权限授给用户李天明。 13.在嵌入式SQL中是如何区分SQL语句和主语言语句的。
14.在嵌入式SQL中是如何解决数据库工作单元与源程序工作单元之间通信的?
15.在嵌入式SQL中是如何协调SQL语言的集合处理方式和主语言的单记录处理方式的? 参考答案
1.答:(1)综合统一。SQL语言集数据定义语言DDL、数据操纵语言DML、数据控制语言DCL的功能于一体。
(2)高度非过程化。用SQL语言进行数据操作,只要提出”做什么”,而无需指明”怎么做”,因此无需了解存取路径,存取路径的选择以及SQL语句的操作过程由系统自动完成。 (3)面向集合的操作方式。SQL语言采用集合操作方式,不仅操作对象、查找结果可以是元组的集合,而且一次插入、删除、更新操作的对象也可以是元组的集合。
(4)以同一种语法结构提供两种使用方式。SQL语言既是自含式语言,又是嵌入式语言。作为自含式语言,它能独立地用于联机交互的使用方式;作为嵌入式语言,它能够嵌入到高级语言程序中,供程序员设计程序时使用。 (5)语言简捷,易学易用。
2.答:SQL的数据定义为功能包括定义表、定义视图和定义索引。 SQL语言使用CREATE TABLE 语句建立基本表,ALTER TABLE 语句修改基本表定义,DROP TABLE语句删除基本表;使用CREATE INDEX语句建立索引,DROP INDEX语句删除索引;使用CREATE VIEW语句建立视图,DROP VIEW 语句删除视图。 3.答:对于S表:S(SNO,SNAME,STATUS,CITY); 建S表
CREATE TABLE S
,
SNAME CHAR(10), STATUS CHAR(2) CITY CHAR(10);
对于P表:P(PNO,PNAME,COLOR,WEIGHT); 建P表 CREATE TABLE P (PNO CHAR(3)
PNAME CHAR(10), COLOR CHAR(4), WEIGHT INT);
对于J表:J(JNO,JNAME,CITY); 建J表 CREATE TABLE J (JNO CHAR(3), JNAME CHAR(10), CITY CHAR(10));
对于SPJ表:SPJ(SNO,PNO,JNO,QTY); 建SPJ表 CREATE TABLE SPJ (SNO CHAR(3), PNO CHAR(3), JNO CHAR(3), QTY INT);
4.答:读者可以对比SQL语言、关系代数、ALPHA语言、QBE语言,体会各种语言的优点。
(1)求供应工程JI零件的供应商号码SNO; SELECT SNO FROM SPJ
WHERE JNO =‘JI’
(2)求供应工程JI零件PI的供应商号码SNO; SELECT SNO FROM SPJ
WHERE JNO=‘JI’ AND PNO=‘PI’
(3)求供应工程JI零件为红色的供应商号码SNO; SELECT SNO /﹡这是嵌套查询﹡/ FROM SPJ
WHERE JNO=‘JI’
AND PNO IN /﹡找出红色零件的零件号码PNO﹡/ (SELECT PNO
FROM P /﹡从P表中找﹡/ WHERE COLOR=‘红’) SELECT SNO
FROM SPJ,P ﹡这是两表连接查询﹡/
WHERE JNO=’JI’ /﹡这是复合条件连接查询﹡/ AND SPJ。PNO=P。PNO AND COLOR=‘红’ 5.答:(1)找出所有供应商的姓名和所在城市。 SELECT SNAME,CITY FROM S;
(2)找出所有零件名称、颜色、重量。 SELECT PNAME, COLOR, WEIGHT
;
(3)找出使用供应商SI所供应零件的工程号码。 SELECT JNO FROM SPJ
WHERE SNO=‘SI’
(4)找出工程项目J2使用的各种零件的名称及其数量。 SELECT P。PNAME,SPJ。QTY FROM P,SPJ
WHERE P。PNO=SPJ。PNO AND SPJ。JNO=‘J2’
(5)找出上海厂商供应的所有零件号码。 SELECT DISTINCT PNO FROM SPJ
WHERE SNO IN (SELECT SNO FROM S
WHERE CITY=)
(6)找出使用上海产的零件的工程名称。 SELECT JNAME FROM J,SPJ,S
WHERE J。JNO=SPJ。JNO AND SPJ。SNO=S。SNO AND S。CITY=
或 SELECT JNAME FROM J
WHERE JNOIN (SELECT JNO FROM SPJ,S
WHERE SPJ。SNO=S。SNO AND S。CITY=‘上海’)
(7)找出没有使用天津产的零件的工程号码。 SELECT JNO FROMJ
WHERE NOT EXISTS (SELECT﹡ FROM SPJ
WHERE SPJ。JNO=J。JNO AND SNO IN (SELECT SNO FROMS
WHERE CITY=)) 或 SELECT JNO FROM J
WHERE NOT EXISTS (SELECT﹡ FROM SPJ,S
WHERE SPJ。JNO=J。JNO AND SPJ。SNO=S。SNO AND S。CITY=’天津’)
(8)把全部红色零件的颜色改成蓝色。 UPDATE P
SET COLOR=’蓝’ WHERE COLOR=’红’
9)由S5供给J4的零件P6改为由S3供应,请做必要的修改。 UPDATE SPJ SET SNO=’S3’ WHERE SNO=’S5’ AND JNO=‘J4’ AND PNO=‘P6’
(10)从供应商关系中见风删除S2的记录,并从供应情况关系中删除相应的记录。 DELETE FROM SPJ
WHERE SNO=‘S2’ DELETE FROM S
WHERE SNO=‘S2’
6.答:基本表是本身独立存在的表,在SQL中一个关系就对应一个表。
视图是从一个或几个基本表导出的表。视图本身不独立存储在数据库中,是一个虚表。即数据库中只存放视图的定义而不存放视图对应的数据,这些数据仍存放在导出视图的基本表中。视图在概念上与基本表等同,用户可以如同基本表那样使用视图,可以在视图上再定义视图。 7.答:(1)视图能够简化用户的操作;
(2)视图使用户能以多种角度看待同一数据;
(3)视图对重构数据库提供了一定程度的逻辑独立性; (4)视图能够对机密数据提供安全保护。 详细解释参见《概论》3。4。5。
8.答:不是。视图是不实际存储数据的虚表,因此对视图的更新,最终上转换为对基本表的更新。因为有些视图的更新不能惟一有意义地转换成对相应基本表的更新,所以,并不是所有的视图都是可更新的,如《概论》3。5。1中的视图S_G(学生的学号及他的平均成绩)
CREAT VIEW S_G(Sno,Gavg)
AS SELECT Sno,AVG(Grade)/﹡设SC表中”成绩”列Grade为数字型﹡/ FROM SC
GROUP BY Sno;
要修改平均成绩,必须修改各科成绩,而我们无法知道哪些课程成绩的变化导致了平均成绩的变化。
9.答:基本表的行列子集视图一般是可更新的,如《概论》3。5。3中的例1。
若视图的属性来自集函数、表达式,则该视图肯定是不可以更新的,如《概论》3。5。3中的S_G视图。 10.答:(略) 11.答:建视图: CREATE VIEW V_SPJ AS SELECT SNO,PNO,QTY FROM SPJ WHERE JNO= (SELECT JNO FROMJ
WHERE JNAME=`三建`); 对该视图查询:
(1)找出三建工程项目使用的各种零件代码及其数量。 SELECT PNO,QTY FROM V_SPJ;
(2)找出供应商SI的供应情况。
SELECT PNO ,QTY /﹡SI供应三建工程的零件号和对应的数量﹡/ FROM V_SPJ
WHERE SNO=`SI`
.答:GRANT INSERT ON TABLES TO张勇
WITH GRANT OPTION;
(2)把查询SPJ表和修改QTY属性的权限授给用户李天明。 答:GRANT SELECT,UPDATE(QTY) ON TABLE SPJ TO李天明
13.答:在SQL语句前加上前缀EXEC SQL,SQL语句的结标志则随主语言的不同而不同。
例如,在PL/I和C中,以分号(;)结束,在COBOLK中,以END-EXEC结束。 14.答:数据库工作单元与源程序工作单元之间的通信主上包括。
(1)SQL通信区SQLCA,用来向主语言传递SQL语句的执行状态信息,使主语言能够根据此信息控制程序流程。 (2)主变量(Host Variable):
(1)用来实现主语言向SQL提供参数;
(2)将SQL语句查询数据库的结果交往语言进一步处理。 (3)游标(Cursor),解决集合性操作语言与过程性操作语言的不匹配,通过游标逐一取记录,并赋给主变量,交由主语言进一步处理。 详细解释参见《概论》3。7。2。
15.答:用游标来协调这两种不同的处理方式。游标区是系统为用户开设的一个据缓冲区,存放SQL语句的执行结果,每个游标区都有一个名字。用户可以通过游标逐一获取记录,并赋给主变量,交由主语言进一步处理。

