变量;
③ SQL的集合处理方式与宿主语言的单记录处理方式之间要用游标机制协调。 3.19 SQL的集合处理方式与宿主语言单记录处理方式之间如何协调?
答:用游标机制协调。把SELECT语句查询结果定义成游标关系,以使用文件的方式来使用游标关系。与游标有关的SQL语句有四个:游标定义,游标打开,游标推进,游标关闭。 3.20 嵌入式SQL的DML语句何时不必涉及到游标?何时必须涉及到游标? 答:不涉及游标的DML语句有下面两种情况: ① INSERT、DELETE、UPDATE语句,只要加上前缀和结束标志,就能嵌入在宿主语言程序中使用;
② 对于SELECT语句,如果已知查询结果肯定是单元值,也可不必涉及游标操作。 涉及游标的DML语句有下面两种情况: ① 当SELECT语句查询结果是多个元组时,必须用游标机制把多个元组一次一个地传递给主程序处理;
② 对游标指向元组进行修改或删除操作时,也涉及到游标。 3.21 在教学数据库中检索成绩不及格的学生信息,要求显示(S#,SNAME,C#,CNAME,TEACHER),
试编写实现此功能的嵌有SQL语句的C语言程序段。 解: #define NO_MORE_TUPLES !(strcmp(SQLSTATE,〞02000〞))
void sel()
{ EXEC SQL BEGIN DECLARE SECTION;
char sno[5],cno[5],sname[9],cname[11],teacher[9]; char SQLSTATE[6];
EXEC SQL END DECLARE SECTION; EXEC SQL DECLARE x CURSOR FOR
SELECT s.s#,sname,c.c#,cname,teacher FROM s,sc,c
WHERE s.s#=sc.s# and sc.c#=c.c# and grade<60; EXEC SQL OPEN scx; while(1)
{ EXEC SQL FETCH FROM x
INTO :sno,:sname,:cno,:cname,:teacher;
if(NO_MORE_TUPLES)break;
printf(〞%s,%s,%s,%s,%s\\n〞,sno,sname,cno,cname,teacher);
}
EXEC SQL CLOSE x; }
3.3 练习题
3.3.1 填空题
1.在SQL中,关系模式称为___基本表______,子模式称为___视图_______,元组称为____
行______,属性称为___列_______。
2.SQL中,表有两种:__________和__________,也称为__________和__________。 3.SQL中,用户有两种:__________和__________。
4.SQL中,外模式一级数据结构的基本单位是__________。 5.在“SQL模式”中,主要成分有__________。 6.基本表中,“主键”概念应该体现其值的__________和__________两个特征。 7.操作“元组 IN(集合)”的语义是____________________。 8.表达式中的通配符“%”表示__________,“_”(下划线)表示__________。
(2003/9/21) (GJ-DA) (共2页) 目录--31
9.操作“元组>SOME(集合)”的语义是____________________。 10.操作“元组
12.嵌入式SQL的预处理方式,是指预处理程序先对源程序进行扫描,识别出__________,
并处理成宿主语言的__________形式。
13.为保证嵌入式SQL的实现,通常DBMS制造商提供一个__________,供编译时使用。 14.SQL语句嵌入在C语言程序中时,必须加上前缀标识__________和结束标志__________。 15.“卷游标”是指____________________。
3.3.2 单项选择题(在备选答案中选出一个正确答案) 1.在SQL中,用户可以直接进行查询操作的是 [ ] A.实表和虚表 B.基本表和实表
C.视图和虚表 D.基本表 2.SQL中,聚合函数COUNT(列名)用于 [ ] A.计算元组个数 B.计算属性的个数
C.对一列中的非空值计算个数 D.对一列中的非空值和空值计算个数 3.SQL中,与“NOT IN”等价的操作符是 [ ] A.=SOME B.<>SOME C.=ALL D.<>ALL 4.元组比较操作(a1,a2)>(b1,b2)的意义是 [ ] A.(a1>b1)OR((a1=b1)AND(a2>=b2))
B.(a1>=b1)OR((a1=b1)AND(a2>=b2)) C.(a1>b1)OR((a1=b1)AND(a2>b2)) D.(a1>=b1)OR((a1=b1)AND(a2>b2)
5.SQL中,谓词EXISTS可用来测试一个集合是否 [ ] B.有重复的列名
C.为非空集合 D.有空值
6.对于基本表EMP(ENO,ENAME,SALARY,DNO)
其属性表示职工的工号、姓名、工资和所在部门的编号。
基本表DEPT(DNO,DNAME) 其属性表示部门的编号和部门名。
有一SQL语句: SELECT COUNT(DISTINCT DNO) FROM EMP;
其等价的查询语句是 [ ] A.统计职工的总人数 B.统计每一部门的职工人数
C.统计职工服务的部门数目 D.统计每一职工服务的部门数目
7.对于第6题的两个基本表,有一个SQL语句: SELECT ENO,ENAME FROM EMP WHERE DNO NOT IN (SELECT DNO FROM DEPT WHERE DNAME='金工车间';
其等价的关系代数表达式是: [ ]
A.π
ENO,ENAME(σDNAME≠'金工车间'(EMP?DEPT))
(2003/9/21) (GJ-DA) (共2页) 目录--32
B.πENO,ENAME(EMP
? DEPT)
DNAME≠'金工车间'
C.πENO,ENAME(EMP)-πENO,ENAME(σDNAME='金工车间'(EMP?DEPT)) D.π(EMP)-πENO,ENAME(σENO,ENAMEDNAME≠'金工车间'(EMP?DEPT)) 8.对于第6题的两个基本表,有一个SQL语句:
UPDATE EMP SET SALARY=SALARY*1.05 WHERE DNO='D6' AND SALARY<(SELECT AVG(SALARY)
FROM EMP);
其等价的修改语句为 [ A.为工资低于D6部门平均工资的所有职工加薪5%
B.为工资低于整个企业平均工资的职工加薪5%
C.为在D6部门工作、工资低于整个企业平均工资的职工加薪5% D.为在D6部门工作、工资低于本部门平均工资的职工加薪5% 9.有关嵌入式SQL的叙述,不正确的是 [ A.宿主语言是指C一类高级程序设计语言
B.宿主语言是指SQL语言
C.在程序中要区分SQL语句和宿主语言语句 D.SQL有交互式和嵌入式两种使用方式 10.嵌入式SQL实现时,采用预处理方式是 A.把SQL语句和主语言语句区分开来
B.为SQL语句加前缀标识和结束标志
C.识别出SQL语句,并处理成函数调用形式 D.把SQL语句编译成二进制码
11.允许在嵌入的SQL语句中,引用宿主语言的程序变量,在引用时 A.直接引用
B.这些变量前必须加符号“*” C.这些变量前必须加符号“:” D.这些变量前必须加符号“&”
12.如果嵌入的SELECT语句的查询结果肯定是单元组,那么嵌入时 A.肯定不涉及游标机制
B.必须使用游标机制
C.是否使用游标,由应用程序员决定 D.是否使用游标,与DBMS有关
13.卷游标的推进语句“EXEC SQL FETCH RELATIVE -4”表示 A.把游标移向查询结果的第4行
B.把游标移向查询结果的倒数第4行 C.把游标从当前位置推进4行 D.把游标从当前位置返回4行
14.卷游标的推进语句“EXEC SQL FETCH ABSOLUTE -3 ”表示 A.把游标移向查询结果的第3行
]
]
[ ]
[ ]
[ ]
[ ]
[ ]
(2003/9/21) (GJ-DA) (共2页) 目录--33
B.把游标移向查询结果的倒数第3行 C.把游标从当前位置推进3行 D.把游标从当前位置返回3行 3.3.3 简答题
1.试叙述SQL的关系代数特点和元组演算特点。
2.SQL语言对于“查询结果是否允许存在重复元组”是如何实现的? 3.试对SELECT语句中使用的基本表名和列名的语义作详细的解释。 4.SELECT语句中,何时使用分组子句,何时不必使用分组子句?
3.4 练习题答案
3.4.1 填空题答案
1.基本表 视图 行 列
2.基本表 视图 实表 虚表 3.应用程序 终端用户 4.视图
5.基本表、视图、索引、完整性规则等 6.惟一 非空
7.若元组在集合中,其值为true,否则为false
8.与零个或多个字符组成的字符串匹配 与单个字符匹配 9.若元组值大于集合中某一元组值,则其值为true,否则为false 10.若元组值小于集合中每一元组值,则其值为true,否则为false 11.交互式SQL 嵌入式SQL 12.SQL语句 函数调用 13.SQL函数定义库
14.EXEC SQL 分号(;)
15.可以进退自如的游标(即可随意推进或返回) 3.4.2 单项选择题答案
1.A 2.C 3.D 4.C 5.C 6.C 7.C 8.C 9.B 10.C 11.C 12.C 13.D 14.B 3.4.3 简答题答案
1.答:SQL的SELECT语句的基本句法来自于关系代数表达式πL(σF(R1×?×Rm)),
并且SQL中有并(UNION)、交(INTERSECT)和差(EXCEPT)等操作,因此SQL具有关系代数特点。 SELECT语句中出现的基本表名,都应该理解成基本表中的元组变量,而列名应理解
成元组分量,这样SQL就具有了元组演算的特点。
2.答:对于SELECT语句中SELECT子句,若用“SELECT DISTINCT”形式,则查询结
果中不允许有重复元组;若不写DISTINCT字样,则查询结果中允许出现重复元组。 3.答:在基本SQL中,SELECT语句中使用的基本表名都应该理解成表中的元组变量,而
列名就成了元组分量。这样就使SELECT语句带有元组演算的特点。
(注:实际上,在基本SQL中,把关系变量和元组变量混为一谈了。这在面向对象数据库中得到了纠正,在引用表时,都要为表定义一个元组变量。)
4.答:SELECT语句中使用分组子句的先决条件是要有聚合操作。当聚合操作值与其他属性
的值无关时,不必使用分组子句。譬如求男同学的人数。此时聚合值只有一个,因此不必分组。 当聚合操作值与其他属性的值有关时,必须使用分组子句。譬如求每一性别的人数。
此时聚合值有两个,与性别有关,因此必须分组。
(2003/9/21) (GJ-DA) (共2页) 目录--34
4.2 教材中习题4的解答
4.1 名词解释
·数据冗余:指同一个数据在系统中多次重复出现。 ·函数依赖(FD):在关系模式R(U)中,FD是形为X→Y的一个命题,只要r是R的当前关系,对r中任意两个元组t和s,都有t[X]=s[X]蕴涵t[Y]=s[Y],那么称FD X→Y在关系模式R(U)中成立。
·平凡的FD:如果X→Y,且Y?X,则称X→Y是一个“平凡的FD”。
·FD集F的闭包F+:被F逻辑蕴涵的函数依赖全体构成的集合,称为F的闭包,记为F+,即F+={ X→Y | F?X→Y}。
·属性集X的闭包X+:从已知的FD集F使用FD推理规则推出的所有满足X→A的属性A的集合,称为X的闭包,记为X+,即X+={ 属性A | X→A在F+中 }。
·FD的逻辑蕴涵:如果从已知的FD集F能推导出X→Y成立,那么称F逻辑蕴涵 X→Y,记为F ?X→Y。
·FD集的等价:对于两个FD集F和G,有F+=G+,则称F和G是等价的依赖集。 ·最小依赖集:设F是属性集U上的FD集,Fmin是F的最小依赖集,那么Fmin应满足下列四个条件:Fmin+=F+;每个FD的右边都是单属性;Fmin中没有冗余的FD;每个FD的左边没有冗余的属性。
·无损分解:设关系模式R,F是R上的FD集,ρ={ R1,?,Rk }是R的一个分解。
k
如果对R中满足F的每一关系r,都有r= i=1 ?πR(,那么称分解ρ相对F是“无损分解”。 ir)·泛关系假设:指数据库中每一个关系都是全部属性构成的关系的投影,此时,由全部属性构成的关系称为泛关系。
·chase过程:根据已知FD集,对R分解成ρ构造的初始表格的值进行修改,使之符合FD集,这个过程称为chase过程。
·保持FD:设关系模式R,F是R上的FD分解,ρ={ R1,?,Rk }是R的一个分
k
i=1 πRi(F)?F,那么称分解ρ保持FD集F。 解,如果有∪
·1NF:如果关系模式R的每个关系r的属性值都是不可分的原子值,那么称R是1NF
的模式。
·2NF:如果R是1NF的模式,且每个非主属性完全函数依赖于R的候选键,那么称R是2NF的模式。
·3NF:如果R是1NF的模式,且每个非主属性都不传递依赖于R的候选键,那么称R是3NF的模式。
·BCNF:如果R是1NF的模式,且每个属性都不传递依赖于R的候选键,那么称R是BCNF的模式。
·4NF:设D是关系模式R上成立的FD和MVD集合。如果D中每个非平凡的 MVD X→→Y的左部X都是R的超键,那么称R是4NF模式。
·5NF:如果关系模式R的每个JD均由R的候选键蕴涵,那么称R是5NF的模式。 ·多值依赖(MVD):设关系模式R(U),X和Y是U的子集,Z=U-X-Y。对于R的关系r,若在r中存在元组(x,y1,z1)和(x,y2,z2),就也应存在元组(x,y2,z1)和(x,y1,z2),那么称MVD X→→Y在模式R上成立。
·联接依赖(JD):设关系模式R(U),R1、?、Rn是U的子集,并满足U=R1∪?∪Rn,
(2003/9/21) (GJ-DA) (共2页) 目录--35
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说教育文库数据库系统教程1-7章课后答案(施伯乐)(第二版)(7)在线全文阅读。
相关推荐: