第三章习题答案。
一、选择题。
二、填空题。
1 .试述sql语言的特点。
1)综合统一。sql语言集数据定义语言ddl、数据操纵语言dml、数据控制语言dcl的功能于一体。(2)高度非过程化。
用sql语言进行数据操作,只要提出“做什么”,而无须指明“怎么做”,因此无需了解存取路径,存取路径的选择以及sql语句的操作过程由系统自动完成。(3)面向集合的操作方式。sql语言采用集合操作方式,不仅操作对象、查找结果可以是元组的集合,而且一次插入、删除、更新操作的对象也可以是元组的集合。
(4)以同一种语法结构提供两种使用方式。sql语言既是自含式语言,又是嵌入式语言。作为自含式语言,它能够独立地用于联机交互的使用方式,也能够嵌入到高级语言程序中,供程序员设计程序时使用。
(5)语言简捷,易学易用。
2 .结构化查询语言。
3 .试述sql的定义功能。
sql的数据定义功能包括定义表、定义视图和定义索引。sql语言使用create table语句建立基本表,alter table语句修改基本表定义,drop table语句删除基本表;使用createindex语句建立索引,drop index语句删除索引;使用create view命令建立视图,dropview语句删除视图。
4 .数据定义数据控制。
5 .select
6 .用sql语句建立第2章习题5中的四个表。建s表。
create table s (sno char(3),sname char(10),status char(2),city char(10));
建p表。create table p (pno char(3),pname char(10),color char(4),weight int);
建j表。create table j (jno char(3),jname char(10),city char(10));
建spj表。
create table spj (sno char(3),pno char(3),jno char(3),qty int);
7 .基本表视图。
8 .针对上题中建立的四个表试用sql语言完成第2章习题5中的查询。(1)select sno from spj where jno=j1;
2)select sno from spj where jno=j1 and pno=p1;(3)select sno /*这是嵌套查询*/
from spj
where jno=j1 and pno in /*找出红色的零件的零件号码pno */
select pno
from p /*从p表中找*/where color=红);
或。select sno
from spj,p /*这是两表连接查询*/
where jno=j1 /*这是复合条件连接查询*/
and and color=红;
4)*解析:读者可以对比第2章习题5中用alpha语言来完成该查询的解答。如果大家理解了有关该题的解析说明,那么本题的解答可以看成是把关系演算用sql来表示的过程。
get w ( spjx( spjx .jno= ?sx ( sno ?
sx .city='天津' ?px(px .
pno=spjx .pno ? px .
color='红' )这里的第一种解法是使用多重嵌套查询,第二种方法的子查询是一个多表连接。注意:从j表入手,以包含那些尚未使用任何零件的工程号。
select jno
from j where not exists (select *
from spj
where and sno in /*天津**商的sno*/
select snofrom s
where city=天津)and pno in /*红色零件的pno*/
select pno
from p
where color=红));
或。select jnofrom j
where not exists (select *
from spj, s, p
where and and
and 天津 and p. color=红);/删除:
本例中父查询和子查询均引用了student表,可以像自身连接那样用别名将父查询中的student表与子查询中的student表区分开://
5)*解析:本查询的解析可以参考第二章第5题,用alpha语言的逻辑蕴函来表达。上述查询可以抽象为:
要求这样的工程x,使(?y) p ? q为真。
即:对于所有的零件y,满足逻辑蕴函p ? q:
p表示谓词:“**商s1**了零件y” q表示谓词:“工程x选用了零件y”即只要“**商s1**了零件y”为真,则“工程x选用了零件y”为真。
逻辑蕴函可以转换为等价形式:(?y)p ?
q≡ ?y (?p ?
q ))y (?p∨q)≡?y(p∧?
q)它所表达的语义为:不存在这样的零件y,**商s1**了y,而工程x没有选用y。用sql语言表示如下:
select distinct jno
from spj spjz
where not exists /*这是一个相关子查询*/
select * 父查询和子查询均引用了spj表*/
from spj spjx /*用别名将父查询与子查询中的spj表区分开*/where sno='s1' and not exists
select *
from spj spjy
where and and
9 .针对习题3中的四个表试用sql语言完成以下各项操作。(1)找出所有**商的姓名和所在城市。select sname, city from s;
2)找出所有零件的名称、颜色、重量。select pname, color, weight from p;(3)找出使用**商s1所**零件的工程号码。select jno from spj where sno=s1;
4)找出工程项目j2使用的各种零件的名称及其数量。
select from p, spj where and '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= and '上海';或。
select jnamefrom j
where jno in (select jno
from spj, s
where spj. sno= and '上海');
7)找出没有使用天津产的零件的工程号码。select jnofrom j
where not exists
select *
from spj
where and sno in
select sno from s where city=天津));
或。select jnofrom j
where not exists
select *from spj, s
where and and 天津);
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'; 解析:注意删除顺序,应该先从spj表中删除**商s2所**零件的记录,然后从从s表中删除s2。(11)请将(s2,j6,p4,200)插入**情况关系。
insert into spj(sno, jno, pno, qty) /into子句中指明列名*/values (s2,j6,p4,200); 插入的属性值与指明列要对应*/或。
insert into spj /*into子句中没有指明列名*/
values (s2,p4,j6,200); 插入的记录在每个属性列上有值*/ 并且属性列要和表定义中的次序对应*/
11 .什么是基本表?什么是视图?两者的区别和联系是什么?
基本表是本身独立存在的表,在sql中一个关系就对应一个表。视图是从一个或几个基本表导出的表。视图本身不独立存储在数据库中,是一个虚表。
即数据库中只存放视图的定义而不存放视图对应的数据,这些数据仍存放在导出视图的基本表中。视图在概念上与基本表等同,用户可以如同基本表那样使用视图,可以在视图上再定义视图。12 .
基本表或视图定义。
13 .试述视图的优点。
1)视图能够简化用户的操作。(2)视图使用户能以多种角度看待同一数据。(3)视图对重构数据库提供了一定程度的逻辑独立性。
(4)视图能够对机密数据提供安全保护。14 .非过程性强。
1) select * from r union select * from t(2) select * from r where dwh=100
3) select xm , xb from r
4) select xm,dwh from r where xb=女。
5) select , from r , s where select , from r , s where and 男。
16 .所有的视图是否都可以更新?为什么?
不是。视图是不实际存储数据的虚表,因此对视图的更新,最终要转换为对基本表的更新。因为有些视图的更新不能唯一地有意义地转换成对相应基本表的更新,所以,并不是所有的视图都是可更新的。
如《概论》3.5.1中的视图s_g(学生的学号及他的平均成绩)creat view s_g(sno,g**g) as select sno,**g(grade) /设sc表中“成绩”列grade为数字型*/ from sc group bysno;要修改平均成绩,必须修改各科成绩,而我们无法知道哪些课程成绩的变化导致了平均成绩的变化。
1) insert into r values(25,"李明","男",21,"95031")
2) insert into r(no,name,class) values(30,"郑和","95031")(3) update r set name="王华" where no=10
4) update r set class="95091" where class="95101"
5) delete from r where no=20 (6) delete from r where name like “王%
18 .哪类视图是可以更新的,哪类视图是不可更新的?各举一例说明。
基本表的行列子集视图一般是可更新的。如《概论》3.5.
3中的例1。若视图的属性来自集函数、表达式,则该视图肯定是不可以更新的。如《概论》3.
5.3中的s_g视图。
建视图:create view v_spj as select sno, pno, qty from spj where jno=(select jnofrom j where jname='三建');对该视图查询:
1) select pno, qty from v_spj;
2) select pno, qty /*s1**三建工程的零件号和对应的数量*/
from v_spj
where sno='s1';
20 .针对习题3建立的表,用sql语言完成以下各项操作:
1) grant insert on table s to张勇with grant option;(2) grant select, update(qty) on table spj to李天明;
21 .在嵌入式sql中是如何区分sql语句和主语言语句的?
在sql语句前加上前缀exec sql。sql语句的结束标志则随主语言的不同而不同。例如在pl/1和c中以分号(;)结束,在cobol中以end-exec结束。
22 .在嵌入式sql中是如何解决数据库工作单元与源程序工作单元之间通信的?
数据库工作单元与源程序工作单元之间的通信主要包括:(1)sql通信区sqlca,用来向主语言传递sql语句的执行状态信息,使主语言能够根据此信息控制程序流程。(2)主变量(hostvariable),1)用来实现主语言向sql语句提供参数。
2)将sql语句查询数据库的结果交主语言进一步处理(3)游标(cursor),解决集合性操作语言与过程性操作语言的不匹配通过游标逐一获取记录,并赋给主变量,交由主语言进一步处理。
23 .在嵌入式sql中是如何协调sql语言的集合处理方式和主语言的单记录处理方式的?用游标来协调这两种不同的处理方式。
游标区是系统为用户开设的一个数据缓冲区,存放sql语句的执行结果,每个游标区都有一个名字。用户可以通过游标逐一获取记录,并赋给主变量,交由主语言进一步处理。
第3章习题答案
第3章受弯构件的正截面受弯承载力。3.1 已知单筋矩形截面梁的截面尺寸,承受弯矩设计值,采用混凝土强度等级c30,hrb400钢筋,环境类别为一类。求所需纵向受拉钢筋的截面面积和配筋。解 由附表4 3可知,环境类别为一类,c30时梁的混凝土保护层最小厚度为20mm,故取,则 查表得 选用425 满足...
第3章习题答案
第3章货币资金及应收款项。思考题。1 答 企业办理银行汇票 银行本票 单位银行卡和信用证业务时需要向银行预缴款项。办理托收承付 委托收款时不需要向银行预缴款项。一般应在开户行办理支票转账支付业务,从原来已经办妥的银行结算账户中转账支付。2 需要辩证地看地这个问题,保持质疑精神对于学习会计学 乃至全部...
第3章习题答案
1.word 2003文档扩展名的缺省类型是 a a doc b dot c wrd d txt 2.word在 环境下运行 b a dos操作系统b windows操作系统。c unix操作系统d 任何操作系统。3.在word 2003中,当前输入的文字被显示在 c a 文档的尾部 b 鼠标指针位...