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