第3章关系数据库标准语言SQL1.试述sQL语言的特点。答:1)综合统一。sQL语言集数据定义语言DDL、数据操纵语言DML、数据控制语言DCL的功能于一体。2)高度非过程化。用sQL语言进行数据操作,只要提出“做什么”,而无需指明“怎么做”,因此无需了解存取路径,存取路径的选择以及sQL语句的操作过程由系统自动完成。3)面向集合的操作方式。sQL语言采用集合操作方式,不仅操作对象、查找结果可以是元组的集合,而且一次插入、删除、更新操作的对象也可以是元组的集合。4)以同一种语法结构提供两种使用方式。sQL语言既是自含式语言,又是嵌入式语言。作为自含式语言,它能够独立地用于联机交互的使用方式;作为嵌入式语言,它能够嵌入到高级语言程序中,供程序员设计程序时使用。5)语言简捷,易学易用。2.试述sQL的定义功能。答:SQL的数据定义功能包括定义表、定义视图和定义索引。1)SQL语言使用cREATETABLE语句建立基本表,ALTERTABLE语句修改基本表定义,DROPTABLE语句删除基本表;2)使用CREATEINDEX语句建立索引,DROPINDEX语句删除索引;3)使用CREATEVIEW语句建立视图,DROPVIEW语句删除视图。3.用sQL语句建立第二章习题5中的4个表。答:对于S表:S(SNO,SNAME,STATUS,CITY);建S表:CREATETABLES(SnoChar(3)UNIQUE,SnameChar(10),StatusChar(2),CityChar(10));对于P表:P(PNO,PNAME,COLOR,WEIGHT);建P表:CREATETABLEP(PnoChar(3)UNIQUE,PnameChar(10),COLORChar(4),WEIGHTINT);对于J表:J(JNO,JNAME,CITY);建J表:CREATETABLEJ(JnoChar(3)UNIQUE,JNAMEChar(10),CITYChar(10));对于sPJ表:SPJ(sNo,PNo,JNo,QTY);建SPJ表:SPJ(SNO,PNO,JNO,QTY)CREATETABLESPJ(SnoChar(3),PnoChar(3),JNOChar(3),QTYINT);4.针对上题中建立的4个表试用SQL语言完成第二章习题5中的查询。答:1)求供应工程Jl零件的供应商号码SNO;SELECTSNOFROMSPJWHEREJNO='J1'2)求供应工程Jl零件Pl的供应商号码SNO;SELECTSNOFROMSPJWHEREJNO='J1'ANDPNO='P1'3)求供应工程Jl零件为红色的供应商号码SNO;SELECTSNOFROMSPJWHEREJNO='J1'ANDpnoin(selectpnofrompwherecolor='红')或SELECTSNOFROMSPJ,PWHEREJNO='J1'ANDSPJ.PNO=P.PNOANDCOLOR='红'4)求没有使用天津供应商生产的红色零件的工程号JNO;SELECTJNOFROMJWHERENOTEXISTS(SELECT*FROMSPJWHERESPJ.JNO=J.JNOANDSNOIN(SELECTSNOFROMSWHERECITY='天津')ANDPNOIN(SELECTPNOFROMPWHERECOLOR='红'));或SELECTJNOFROMJWHERENOTEXISTS(SELECT*FROMSPJ,S,PWHERESPJ.JNO=J.JNOANDSPJ.SNO=S.SNOANDSPJ.PNO=P.PNOANDS.CITY='天津'ANDP.COLOR='红');5)求至少用了供应商Sl所供应的全部零件的工程号JNO;SELECTDISTINCTJNOFROMSPJSPJZWHERENOTEXISTS(SELECT*FROMSPJ,SPJXWHERESNO='S1'ANDNOTEXISTS(SELECT*FROMSPJSPJYWHERESPJY.PNO=SPJX.PNOANDSPJY.JNO=SPJZ.JNO));5.针对习题3中的四个表试用SQL语言完成以下各项操作:1)找出所有供应商的姓名和所在城市。SELECTSNAME,CITYFROMS2)找出所有零件的名称、颜色、重量。SELECTPNAME,COLOR,WEIGHTFROMP3)找出使用供应商S1所供应零件的工程号码。SELECTJNOFROMSPJWHERESNO='S1'4)找出工程项目J2使用的各种零件的名称及其数量。SELECTPNAME,QTYFROMSPJ,PWHEREP.PNO=SPJ.PNOANDSPJ.JNO='J2'5)找出上海厂商供应的所有零件号码。SELECTDISTINCTPNOFROMSPJWHERESNOIN(SELECTSNOFROMSWHERECITY='上海')6)出使用上海产的零件的工程名称。SELECTJNAMEFROMSPJ,S,JWHERES.SNO=SPJ.SNOANDJ.JNO=SPJ.JNOANDS.CITY='上海'或SELECTJNAMEFROMJWHEREJNOIN(SELECTJNOFROMSPJ,SWHERESPJ.SNO=S.SNOANDS.CITY='上海')7)找出没有使用天津产的零件的工程号码。SELECTJNOFROMJWHERENOTEXISTS(SELECT*FROMSPJWHERESPJ.JNO=J.JNOANDSNOIN(SELECTSNOFROMSWHERECITY='天津'))或SELECTJNOFROMJWHERENOTEXISTS(SELECT*FROMSPJ,SWHERESPJ.JNO=J.JNOANDSPJ.JNO=S.SNOANDS.CITY='天津')8)把全部红色零件的颜色改成蓝色。UPDATEPSETCOLOR='蓝'WHERECOLOR='红'9)由S5供给J4的零件P6改为由S3供应。UPDATESPJSETSNO='S3'WHERESNO='S5'ANDJNO='J4'ANDPNO='P6'10)从供应商关系中删除供应商号是S2的记录,并从供应情况关系中删除相应的记录。DELETEFROMSPJWHERESNO='S2';DELETEFROMSWHERESNO='S2';11)请将(S2,J6,P4,200)插入供应情况关系。INSERTINTOSPJ(SNO,JNO,PNO,QTY)VALUES('S2','J6','P4',200);或INSERTINTOSPJVALUES('S2','P4','J6',200);6.什么是基本表?什么是视图?两者的区别和联系是什么?答:基本表是本身独立存在的表,在SQL中一个关系就对应一个表。视图是从一个或几个基本表导出的表。视图本身不独立存储在数据库中,是一个虚表,即数据库中只存放视图的定义而不存放视图对应的数据,这些数据仍存放在导出视图的基本表中。视图在概念上与基本表等同,用户可以如同基本表那样使用视图,可以在视图上再定义视图。7.试述视图的优点。答:1)视图能够简化用户的操作;2)视图使用户能以多种角度看待同一数据;3)视图对重构数据库提供了一定程度的逻辑独立性;4)视图能够对机密数据提供安全保护。8.所有的视图是否都可以更新?为什么?答:不是。视图是不实际存储数据的虚表,因此对视图的更新,最终要转换为对基本表的更新。因为有些视图的更新不能惟一有意义地转换成对相应基本表的更新,所以,并不是所有的视图都是可更新的。CREATEVIEWS_G(SNO,GAVG)ASSELECTSNO,AVG(GRADE)FROMSCGROUPBYSNO;要修改平均成绩,必须修改各门课程的成绩,而我们无法知道是哪些课程成绩的变化导致平均成绩的变化。9.哪类视图是可以更新的?哪类视图是不可更新的?各举一例说明。答:基本表的行列子集视图一般是可更新的。若视图的属性来自集函数、表达式,则该视图肯定是不可以更新的。10.试述某个你熟悉的实际系统中对视图更新的规定。答:略。11.请为三建工程项目建立一个供应情况的视图,包括供应商代码(SNO)、零件代码(PNO)、供应数量(QTY)。针对该视图VSP完成下列查询:(1)找出三建工程项目使用的各种零件代码及其数量。(2)找出供应商S1的供应情况。答:创建视图:CREATEVIEWV_SPJASSELECTSNO,PNO,QTYFROMSPJWHEREJNO=(SELECTJNOFROMJWHEREJNAME='三建');对该视图的查询:1)SELECTPNO,QTYFROMV_SPJ;2)SELECTPNO,QTYFROMV_SPJWHERESNO='S1';