【习3-1】试述SQL语言的特点。答:SQL语言现在已经成为国际标准,是因为它是一个综合的、功能极强同时又简捷易学的语言。它的特点如下:(1)综合统一:SQL语言集数据定义语言、数据操纵语言、数据控制语言的功能于一体,语言风格统一,可以完成数据库生命周期中的全部活动。另外,在关系模型中实体和实体间的联系均用关系表示,这种数据结构的单一性带来了数据操作符的统一。(2)高度非过程化:用SQL语言进行数据操作,只要提出“做什么”,而无须指明“怎么做”,因此无需了解存取路径,存取路径的选择以及SQL语句的操作过程由系统自动完成。(3)面向集合的操作方式:SQL语言采用集合操作方式,不仅操作对象、查找结果可以是元组的集合,而且一次插入、删除、更新操作的对象也可以是元组的集合。(4)以同一种语法结构提供两种使用方式:SQL语言不论是以交互方式,还是以嵌入式方式使用,其语法结构基本上是一致的。为用户提供了极大的灵活性与方便性。(5)语言简捷,易学易用:SQL语言十分简捷,完成核心功能只用了9个动词,并且其表达方式接近英语口语,因此易学易用。【习3-2】试述SQL的定义功能。答:关系数据库系统支持三级模式结构,其模式、外模式和内模式中基本对象有表、视图和索引。因此SQL的数据定义功能包括定义表、定义视图和定义索引。(1)基本表:包括定义基本表(CREATETABLE)、修改基本表(ALTERTABLE)和删除基本表(DROPTABLE)。(2)视图:包括定义视图(CREATEVIEW)和删除视图(DROPVIEW)。(3)索引:包扩定义索引(CREATEINDEX)和删除索引(DROPINDEX)。【习3-3】用SQL语句建立第二章习题5中的四个表。解:(1)S表:CREATETABLES(SNOCHAR(4)NOTNULLUNIQUE,SNAMECHAR(40)UNIQUE,STATUSINT,CITYCHAR(12));(2)P表:CREATETABLEP(PNOCHAR(4)NOTNULLUNIQUE,PNAMECHAR(40)UNIQUE,COLORCHAR(4),WEIGHTINT);(3)J表:CREATETABLEJ(JNOCHAR(4)NOTNULLUNIQUE,JNAMECHAR(40)UNIQUE,CITYCHAR(12));(4)SPJ表:CREATETABLESPJ(SNOCHAR(4)NOTNULL,PNOCHAR(4)NOTNULL,JNOCHAR(4)NOTNULL,QTYINT);【习3-4】针对上题中建立的四个表试用SQL语言完成第二章习题5中的查询(1)求供应工程J1零件的供应商号码SNOSELECTSNOFROMSPJWHEREJNO=‘J1’(2)求供应工程J1零件P1的供应商号码SNOSELECTSNOFROMSPJWHEREJNO=‘J1’ANDPNO=‘P1’(3)求供应工程J1零件为红色的供应商号码SNOSELECTSNOFROMSPJ,PWHERESPJ.PNO=P.PNOANDJNO==‘J1’ANDCOLOR=‘红’(4)求没有使用天津供应商生产的红色零件的工程号JNOSELECTJNOFROMJWHERENOTEXISTS(SELECT*FROMS,SPJ,PWHERES.SNO=SPJ.SNOANDSPJ.PNO=P.PNOANDS.CITY=’天津’ANDP.COLOR=’红’)(5)求至少用了供应商S1所供应的全部零件的工程号JNOSELECTDISTINCTJNOFROMSPJSPJXWHERENOTEXISTS(SELECT*FROMSPJSPJYWHERESNO=’S1’ANDNOTEXISTS(SELECT*FROMSPJSPJZWHERESPJZ.SNO=SPJX.SNOANDSPJZ.JNO=SPJY.JNO))【习3-5】针对习题3中的四个表试用SQL语言完成以下各项操作(1)找出所有供应商的姓名和所在城市SELECTSNAME,CITYFROMS(2)找出所有零件的名称、颜色、重量SELECTPNAME,COLOR,WEIGHTFROMP(3)找出使用供应商S1所供应零件的工程号码SELECTJNOFROMSPJWHERESNO=’S1’(4)找出工程项目J2使用的各种零件的名称及其数量SELECTPNAME,QTYFROMP,SPJWHEREP.PNO=SPJ.PNOANDJNO=’J2’(5)找出上海厂商供应的所有零件号码SELECTDISTINCTPNOFROMS,SPJWHERES.SNO=SPJ.SNOANDCITY=’上海’或SELECTDISTINCTPNOFROMSPJWHERESNOIN(SELECTSNOFROMSWHERECITY=’上海’)(6)找出使用上海产的零件的工程名称SELECTJNAMEFROMS,SPJ,JWHERES.SNO=SPJ.SNOANDSPJ.JNO=J.JNOANDS.CITY=’上海’或SELECTJNAMEFROMJWHEREJNOIN(SELECTJNOFROMSPJ,SWHERESPJ.SNO=S.SNOANDCITY=’上海’)(7)找出没有使用天津产的零件的工程号码SELECTJNOFROMJWHERENOTEXISTS(SELECT*FROMSPJWHERESPJ.JNO=J.JNOANDSNOIN(SELECTSNOFROMSWHERECITY=’天津’))或SELECTJNOFROMJWHERENOTEXISTS(SELECT*FROMSPJ,SWHERESPJ.JNO=J.JNOANDSPJ.SNO=S.SNOANDS.CITY=’天津’)(8)把全部红色零件的颜色改成蓝色UPDATEPSETCOLOR=’蓝’WHERECOLOR=’红’(9)由S5供给J4的零件P6改为由S3供应,请作必要的修改。UPDATESPJSETSNO=’S3’WHERESNO=’S5’ANDJNO=’J4’ANDPNO=’P6’(10)从供应商关系中删除S2的记录,并从供应情况关系中删除相应的记录DELETEFROMSPJWHERESNO=’S2’DELELTEFROMSWHERESNO=’S2’注意删除顺序,应该先从SPJ表中删除供应商S2所供应零件的记录,然后从S表中删除S2。(11)请将(S2,J6,P4,200)插入供应情况关系。INSERTINTOSPJVALUES(‘S2’,‘J6’,‘P4’,200)【习3-6】什么是基本表?什么是视图?两者的区别和联系是什么?答:基本表是独立存在的表,在SQL中一个关系就对应一个表。一个或多个表对应一个存储文件,一个表可以带若干个索引,索引也存放在存储文件中。视图是从一个或几个基本表中导出的表。它本身不独立存储在数据库中,也就是说,数据库中只存放视图的定义而不存放视图对应的数据。它们的区别在于基本表中存储有数据,是实表;而视图中没有数据存在,是虚表。虽然视图在概念上与基本表等同,对其操作的方式与基本表相同,但对视图有些操作是有限制的。它们的联系是:由于数据库中只存放视图的定义,而不存放视图对应的数据,这些数据仍然存放在原来的基本表中,所以基本表中的数据发生变化,视图中的数据也会随之改变。【习3-7】试述视图的优点。答:视图是关系数据库系统提供给用户以多种角度观察数据库中数据的重要机制。所以合理使用视图能够带来许多好处:(1)视图能够简化用户的操作:通过定义视图,可以使用户将注意力集中在所关心的数据上;可以使数据库看起来结构简单、清晰,进而简化用户的数据查询操作。(2)视图能使用户能以多种角度看待同一数据:当有多种用户共享同一个数据库时,视图机制可以使不同的用户以不同的方式看待和使用同一数据。(3)视图对重构数据库提供了一定程度的逻辑独立性:在关系数据库中,数据库的重构往往是不可避免的。重构数据库最常见的是将一个基本表“垂直”地分成多个基本表。这样尽管数据库的逻辑结构改变了,但应用程序不必修改,因为新建立的视图定义的是用户原来的关系,使用户的外模式保持不变,用户的应用程序通过视图仍然能够查找数据。但由于对视图的更新是有条件的,所以视图不能提供完全的逻辑独立性。(4)视图能够对机密数据提供安全保护:由于可以对不同的用户定义不同的视图,让机密数据不出现在不应看到这些数据的用户视图上,就自动实现了对这些机密数据的安全保护功能。【习3-8】所有的视图是否都可以更新?为什么?答:在关系数据库中,并不是所有的视图都是可更新的。因为对视图的更新,最终是要转换为对基本表的更新,但有些视图的更新不能唯一地有意义地转换成对相应基本表的更新。【习3-9】哪类视图是可以更新的,哪类视图是不可更新的?各举一例说明。答:一般地,行列子集视图是可更新的。例如,将行列子集视图信息系学生视图IS_S中学号为“97003”的学生的年龄增加1。UPDATEIS_SSETSage=Sage+1WHERESno=‘97003’转换后的更新语句为:UPDATESSETSage=Sage+1WHERESno=‘97003’ANDSdept=‘IS’多表视图、带表达式的视图、分组视图、带有嵌套查询的视图等是不可更新的。例如:S_AVG为由“学号”和“平均成绩”组成的视图,如在该视图中插入学号为“97003”,平均成绩为89分的元组。INSERTINTOS_AVGVALUES(‘97003’,89)由于该更新无法转换成对基本表SC的更新,所以该视图是不可更新操作的。【习3-11】请为三建工程项目建立一个供应情况的视图,包括供应商代码(SNO)、零件代码(PNO)、供应数量(QTY),针对该视图完成下列查询:CREATEVIEWSJ_SPJASSELECTSNO,PNO,QTYFROMSPJ,JWHEREPJ.JNO=J,JNOANDJNAME=’三建’(1)找出三建工程项目使用的各种零件代码及其数量。SELECTPNO,SUM(QTY)FROMSJ_SPJGROUPBYPNO(2)找出供应商S1的供应情况。SELECT*FROMSJ_SPJWHERESNO=’S1’【习3-12】针对习题3建立的表,用SQL语言完成以下各项操作:(1)把对表S的INSERT的权限授予用户张勇,并允许他再将此权限授予其他用户。解:GRANTINSERTONTABLESTO张勇WITHGRANTOPTION(2)把查询SPJ表和修改QTY属性的权限授给用户李天明。解:GRANTSELECT,UPDATE(QTY)ONTABLESPJTO李天明【习3-13】在嵌入式SQL中是如何区分SQL语句和主语言语句的?答:在嵌入式SQL中,为了能够区分SQL语句与主语言语句,所有SQL语句都加上前缀EXECSQL。【习3-14】在嵌入式SQL中是如何解决数据库工作单元与源程序工作单元之间通讯的?答:数据库工作单元与源程序工作单元之间的通讯方式如下:(1)通过SQL通信区,向主语言传递SQL语句的执行状态信息。(2)主语言使用主变量向SQL语句提供参数。(3)使用主变量和游标,将SQL语句查询数据库的结果交主语言进一步处理。【习3-15】在嵌入式SQL中是如何协调SQL语言的集合处理方式和主语言的单记录处理方式的?答:在嵌入式SQL中引入了游标来协调这两种不同的处理方式。游标是系统为用户开设的一个数据缓冲区,用来存放SQL语句的执行结果,每个游标区都有一个名字。用户可以通过游标逐一获取记录,并赋给主变量,交由主语言进一步处理。思考题一、名词解释数据库,基本表,存储文件,视图,列,行,实表,虚表,相关子查询,连接查询,嵌套查询,交互式SQL,主变量,游标。二、简答题1.在宿主语言的程序中使用SQL语句有哪些规定?2.嵌入式SQL语句何时不必涉及到游标?3.视图的优点是什么?4.建索引的目的是什么?是否索引建得越多越好?5.基本表与视图两者的区别和联系是什么?6.所有视图是否都可以更新?为什么?三、选择题1.下面关于SQL语言的叙述中,哪一条