2022年数据库概论参考答案_NO .pdf
22 3.4 教材习题答案3.1 试述 SQL 语言的特点。答:SQL 语言集数据查询(Data Query) 、数据操纵(Data Manipulation) 、数据定义(Data Definition) 和数据控制 (Data Control) 功能于一体,主要特点包括:1、综合统一。 SQL 语言集数据定义语言DDL 、数据操纵语言DML 、数据控制语言DCL的功能于一体。2、高度非过程化。用 SQL 语言进行数据操作,只要提出“做什么”,而无需指明“怎么做”, 因此无需了解存取路径,存取路径的选择以及SQL 语句的操作过程由系统自动完成。这不仅大大减轻了用户负担,而且有利于提高数据独立性。3、面向集合的操作方式。SQL 语言采用集合操作方式,不仅操作对象、查找结果可以是元组的集合,而且一次插入、删除、更新操作的对象也可以是元组的集合。4、以同一种语法结构提供两种使用方式。SQL 语言既是自含式语言,又是嵌入式语言。作为自含式语言,它能够独立地用于联机交互操作使用方式,用户可以在终端键盘上直接键入 SQL 命令对数据库进行操作;作为嵌入式语言, SQL 语句能够嵌入到高级语言的程序中,供程序员设计程序时使用。5、语言简捷,易学易用。SOL 语言功能极强,但由于设计巧妙,语言十分简捷,完成核心功能只用了9 个动词。 SQL 语言接近英语句子,因此容易学习,容易使用。6、支持三级模式结构。SQL 语言支持关系数据库的三级模式结构。其中外模式对应于视图 (View) ,模式对应于基本表,内模式对应于存储文件。3.2 试述 SQL 的定义功能。答:SQL 的数据定义功能包括定义表、定义视图和定义索引。SQL 语言使用 CREATE TABLE语句建立基本表, ALTER TABLE语句修改基本表定义,DROP TABLE 语句删除基本表;使用CREATE INDEX 语句建立索引,DROP INDEX语句删除索引;使用CREATE VIEW 语句建立视图,DROP VIEW 语句删除视图。3.3 用 SQL 语句建立习题2.4 中的 4 个表。答:对于供应商表: S(Sno( 供应商代码 ) ,Sname ( 供应商名 ) ,Status (供应状态) ,City( 供应商所在城市) 建 S表CREATE TABLE S (Sno CHAR(4),Sname CHAR(10),Status CHAR(4),City CHAR(20)); 对于零件表: P(Pno( 零件代码 ) ,Pname(零件名 ) ,Color( 颜色 ) ,Weight( 重量 ) 建 P表名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 9 页 - - - - - - - - - 23 CREATE TABLE P (Pno CHAR(4),Pname CHAR(20),Color CHAR(4),Weight INT); 对于工程项目表:J( Jno(工程项目代码) ,Jname (工程项目名) , City (工程项目所在的城市)建 J 表CREATE TABLE J (Jno CHAR(4),Jname CHAR(20),City CHAR(20)); 对于零件供应情况表:SPJ(Sno(供应商代码 ) ,Pno(零件代码 ) ,Jno(工程项目代码) ,QTY(供应数量 ) 。建 SPJ表CREATE TABLE SPJ (Sno CHAR(4), Pno CHAR(4),Jno CHAR(4),QTY INT); 3.4 针对习题3.3 中建立的3 个表,试用SQL 语言完成习题2.4 中的查询。 找出供应工程J1 零件的供应商号;答:SELECT Sno FROM SPJ WHERE Jno= J1; 找出供应工程J1 零件 P1的供应商号;答:SELECT Sno FROM SPJ WHERE Jno= J1 AND Pno= P1; 找出供应工程J1 红色零件的供应商号;答:SELECT Sno FROM SPJ WHERE Jno= J1 AND Pno IN(SELECT Pno FROM P WHERE Color= 绿 );或SELECT Sno FROM SPJ ,P 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 9 页 - - - - - - - - - 24 WHERE Jno= J1 AND SPJ.Pno=P.Pno AND P.Color=绿 ); 找出没有使用杭州供应商生产的绿色零件的工程号。答: SELECT Jno FROM J WHERE NOT EXISTS (SELECT * FROM SPJ WHERE SPJ.Jno=J.Jno AND Sno IN (SELECT Sno FROM S WHERE City= 杭州 )AND Pno IN (SELECT Pno FROM P WHER E Color=绿 );或SELECT Jno FROM J WHERE NOT EXISTS (SELECT * FROM SPJ,S,P WHERE SPJ.Jno=J.Jno AND SPJ.Sno=S.Sno AND SPJ.Pno=P.Pno AND S. City=杭州 AND P.Color=绿 ); 找出至少用了S2供应商所供应的全部零件的工程号。答: SELECT DISTINCT Jno FROM SPJ SPJZ WHERE NOT EXISTS (SELECT * FROM SPJ SPJX WHERE Sno= S2AND NOT EXISTS (SELECT * FROM SPJ SPJY WHERE SPJY .Pno=SPJX.Pno 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 9 页 - - - - - - - - - 25 AND SPJY.Jno=SPJZ.Jno); 找出供应红色的P1零件且其供应量大于200 的供应商号。答: SELECT Jno FROM P,SPJ WHERE P.Pno=SPJ.Pno AND P.Pno= P1 AND SPJ.QTY=200;3.5 针对习题3.3 中的 4 个表,试用SQL 语言完成以下各项操作。(1) 找出所有供应商的姓名和所在城市。答: SELECT Sname,City FROM S; (2) 找出所有零件的名称、颜色、重量。答: SELECT Pname,Color,Weight FROM P; (3) 找出使用供应商S2 所供应零件的工程号。答: SELECT Jno FROM SPJ WHERE Sno= S2 ; (4) 找出工程项目J3 使用的各种零件的名称及其数量。答: SELECT P,Pname,SPJ.QTY FROM P,SPJ WHERE P.Pno=SPJ.Pno AND SPJ.Jno= J3 ; (5) 找出杭州厂商供应的所有零件号码。答: SELECT DISTINCT Pno FROM SPJ WHERE Sno IN ( SELECT Sno FROM S 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 9 页 - - - - - - - - - 26 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 Jno IN (SELECT Jno FROM SPJ,S WHERE SPJ.Sno=S.Sno AND S.City= 杭州 ); (7) 找出没有供应天津产的零件的工程号。答: SELECT Jno FROM J WHERE NOT EXISTS ( SELECT * FROM SPJ WHERE SPJ.Jno=J.Jno AND Sno IN ( SELECT Sno FROM S WHERE City= 天津 ); 或SELECT Jno FROM J WHERE NOT EXISTS ( SELECT * FROM SPJ,S WHERE SPJ.Jno=J.Jno AND SPJ.Sno=S.Sno AND City= 天津 ); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 9 页 - - - - - - - - - 27 (8) 把全部红色零件的颜色改成蓝色。答: UODATE P SET Color= 蓝WHERE Color= 红;(9) 由供应商S4 供给 J3 零件 P5 改为由 S3 供应,请做必要的修改。答: UPDATE SPJ SET Sno= S3WHERE Sno= S4 AND Jno= J3 AND Pno= P5 ; (10)从供应商关系中删除S3的记录 ,并从供应情况关系中删除相应的记录。答: DELETE FROM SPJ WHERE Sno= S3 ; DELETE FROM S WHERE Sno= S2 ; (11)请将 (S2,J6,P4,300)插入到供应情况关系中。答: INSERT INTO SPJ(Sno,Jno,Pno,QTY) VALUE (S2,J6,P4,300); 或INSERT INTO SPJ VALUE (S2,J6,P4,300); 3.6 什么是基本表 ? 什么是视图 ? 两者的区别和联系是什么? 答:基本表是数据库中本身独立存在的表,每个基本表对应一个关系模式。在SQL 中一个关系就对应一个基本表。一个(或多个)基本表对应一个存储文件,一个基本表可以建立若干索引,它们都依附于基本表且存放在存储文件中。视图是从一个或几个基本表导出的表。视图本身不独立存储在数据库中,是一个虚表。即数据库中只存放视图的定义及其关联的基本表名等信息而不存放视图对应的数据,这些数据仍然存放在导出视图的基本表中。但SQL 在查询视图时与基本表完全相同,且用户可以名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 9 页 - - - - - - - - - 28 在视图上再定义视图。但用视图对数据库中的数据进行增、删、改等更新操作时有一定的限制。3.7 试述视图的优点。答: 视图能够简化用户的操作。视图使用户可以将注意力集中在所关心的数据上并简化用户的数据查询操作。 视图使用户能够以多角度看待同一数据。视图可使不同的用户以不同的方式看待同一数据,当许多不同种类的用户共享同一个数据库时,这种灵活性显得非常重要的。 视图为数据库重构提供了一定程度的逻辑独立性。数据的逻辑独立性是指当数据库重新构造时, 如增加新的关系或对原有关系增加新的字段等,用户和用户程序不会受影响,而视图就为数据库重构提供了一定程度的逻辑独立性。 视图能够对数据提供安全保护。对不同的用户定义不同的视图,可使机密数据不出现在不应该看到这些数据的用户视图上,达到对机密数据的安全保护。3.8 所有的视图是否都可以更新? 为什么 ? 答:不是。视图是不实际存储数据的虚表,因此对视图的更新,最终要转换为对基本表的更新,因为有些视图的更新不能惟一有意义地转换成对相应基本表的更新,所以, 并不是所有的视图都是可更新的。3.9 哪类视图是可以更新的,哪类视图是不可更新的? 各举一例。答:基本表的行列子集视图一般是可以更新的。如数据库原理与应用3.5.3 中的例 3.65。例、将数学系学生视图C_Student 中学号为S05 的学生姓名改为“黄海”。UPDATE C_Student SET Sname=黄海 WHERE Sno=S05;DBMS 自动转换为对基本表的更新语句如下:UPDATE Students SET Sname=黄海 WHERE Sno=S05 AND Sdept= 数学 ; 若视图的属性来自集函数、表达式,则该视图肯定是不可以更新的。如数据库原理与应用 3.5.3 中的例 3.66。例、 向数学系学生视图C_Student 中插入一个新的学生记录,其中学号为“S09” ,姓名为“王海”,年龄为 20 岁。INSERT INTO C_Student VALUES (S09 ,王海 ,20, 数学 );由于在定义C_Student 是应用了“ WITH CHECK OPTION”短语,其作用是限制Sdept名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 9 页 - - - - - - - - - 29 的值必须是“数学”才允许由视图C_Student 插入,若换成其它任何字符,DBMS 都拒绝执行插入操作。 若定义 C_Student 是不用“WITH CHECK OPTION” 这个短语, 则以上 VALUES 短语中改为 (S09,王海 ,20, 自动化 )仍然可以完成插入操作,但用SELECT * FROM C_Student 命令则看不到刚插入的元组。3.10 试述某个你熟悉的实际系统中对视图更新的规定。答:(略)因为不同的系统对视图的更新规定是不同的,学员必须了解你所用系统对视图更新的规定,所以我们无法给出一个相对标准的答案。3.11 请为一建工程项目建立一个供应情况的视图,包括供应商代码(Sno)、零件代码 (Pno)、供应商名称 (Sname)、供应数量 (Qty)。针对该视图完成下列查询: (1) 找出一建工程项目使用的各种零件代码及其数量。(2) 找出供应商S2的供应情况。答:建视图CREATE VIEW V_SPJ AS SELECT Sno,Pno,Sname,Qty FROM SPJ WHERE Jno= (SELECT Jno FROM J WHERE Jname= 一建 ); 对该视图进行查询:(1) 找出一建工程项目使用的各种零件代码及其数量。答:SELECT Pno,Qty FROM V_SPJ ; (2) 找出供应商S2的供应情况。答:SELECT Pno,Qty FROM V_SPJ ; WHERE Sno= S2 ; (3) 找出供应零件P2 且供应数量大于100 的供应商名。答:SELECT Pname FROM V_SPJ ; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 9 页 - - - - - - - - - 30 WHERE Pno= P2 AND Qty100; 3.12 针对习题3.3 建立的表,用SQL 语言完成以下各项操作:(1) 把对表 S 的 INSERT 权限授予用户ZhangYong,并允许他再将此权限授予其他用户。答:GRANT INSERT ON TABLE S TO ZhangYong WITH GRANT OPTION; (2) 把查询 SP 表和修改 Qty 属性的权限授给用户LiMing 。答:GRANT SELECT , UPDATE(QTY) ON TABLE SPJ TO LiMing; 3.13 嵌入式 SQL 是如何解决数据库工作单元与源程序工作单元之间通讯的? 答:在 SQL 语句前加上前缀EXEC SQL ,SQL 语句的结束标志则随主语句的不同而不同。3.14 在 嵌入式SQL 中是如何协调SQL 语言的集合处理方式和主语言的单记录处理方式的?答:用游标来协调这两种不同的处理方式。游标区是系统为用户开设的一个数据缓冲区,存放 SQL 语句的执行结果,每个游标区都有一个名字。用户可以通过游标逐一获取记录,并赋给主变量,交由主语言进一步处理。3.15 试述空值的概念,空值在运算中会带来什么问题?答:SQL/DS 支持空值的概念。空值是“不存在”的值,即未知的或不可用的。空值在运算中会带来结果的不确定性问题。例、 如果算术表达式中任一运算分量为空值,则表达式的值为空值。如x+y 中,若 x 为空值,则x+y 的值为空。在算术比较中,有一值为空值,表达式的值为“?”。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 9 页 - - - - - - - - -