1、数据库系统工程师-SOL 语言及答案解析(总分:36.00,做题时间:90 分钟)一、B选择题/B(总题数:22,分数:22.00)1.卷游标的推进语句 EXEC SQL FETCH ABSOLUTE -3 表示_。(分数:1.00)A.把游标移向查询结果的第 3 行B.把游标移向查询结果的倒数第 3 行C.把游标从当前位置推进 3 行D.把游标从当前位置返回 3 行2.允许在嵌入的 SQL 语句中引用宿主语言的程序变量,在引用时_。(分数:1.00)A.直接引用B.这些变量前必须加符号“*”C.这些变量前必须加符号“:”D.这些变量前必须加符号“其等价的查询语句是_。(分数:1.00)A.统
2、计职工的总人数B.统计每一部门的职工人数C.统计职工服务的部门数目D.统计每一职工服务的部门数目8.SQL 中,与 NOT IN 等价的操作符是_。(分数:1.00)A.=SOMEB.SOMEC.=ALLD.ALL9.某高校 5 个系的学生信息存放在同一个基本表中,采取_的措施可使各系的管理员只能读取本系学生的信息。(分数:1.00)A.建立各系的列级视图,并将对该视图的读权限赋予该系的管理员B.建立各系的行级视图,并将对该视图的读权限赋予该系的管理员C.将学生信息表的部分列的读权限赋予各系的管理员D.将修改学生信息表的权限赋予各系的管理员10.不能激活触发器执行的操作是_。(分数:1.00)
3、A.DELETEB.UPDATEC.INSERTD.SELECT11.嵌入式 SQL 实现时,采用预处理方式是_。(分数:1.00)A.把 SQL 语句和主语言语句区分开来B.为 SQL 语句加前缀标识和结束标志C.识别出 SQL 语句,并处理成函数调用形式D.把 SQL 语句编译成二进制码12.“角色”是 DBS 采用的_。(分数:1.00)A.完整性措施B.安全性措施C.恢复措施D.并发控制措施13.对于第 7 题的两个基本表,有一个 SQL 语句: SELECT ENO, ENAME FROM EMP WHERE DNO NOT IN (SELECT DNO FROM DEPT WHER
4、E DNAME=金工车间);其等价的关系代数表达式是:_。(分数:1.00)A. ENO,ENAME( DNAME金工车间 (EMPB. ENO,ENAME C. ENO,ENAME(EM- ENO,ENAME ( DNAME=金工车间 (EMPD. ENO,ENAME (EM- ENO,ENAME ( DNAME金工车间 (EMP14.SELECT 语句中 FROM R,此处 R 是基本表名,但应理解为_。(分数:1.00)A.R 的结构定义B.R 的元组序号C.R 中全部元组D.R 的元组变量15.允许取空值但不允许出现重复值的约束是_。(分数:1.00)A.NULLB.UNIQUEC.P
5、RIMARY KEYD.FOREIGN KEY16.SQL 中,下列操作不正确的是_。(分数:1.00)A.AGE IS NOTNULLB.NOT (AGE IS NULC.SNAME=王五D.SNAME=王%17.对于第 7 题的两个基本表,有一个 SQL 语句: UPDATE EMP SET SALARY=SALARY*1.05 WHERE DNO=D6 AND SALARY(SELECT AVG(SALARY) FROM EMP);其等价的修改语句为_。(分数:1.00)A.为工资低于 D6 部门平均工资的所有职工加薪 5%B.为工资低于整个企业平均工资的职工加薪 5%C.为在 D6 部
6、门工作、工资低于整个企业平均工资的职工加薪 5%D.为在 D6 部门工作、工资低于本部门平均工资的职工加薪 5%18.有关嵌入式 SQL 的叙述,不正确的是_。(分数:1.00)A.宿主语言是指 C 一类高级程序设计语言B.宿主语言是指 SOL 语言C.在程序中要区分 SQL 语句和宿主语言语句D.SQL 有交互式和嵌入式两种使用方式19.元组比较操作(a 1,a 2)(b 1,b 2)的意义是_。(分数:1.00)A.(a1b 1) OR (a1=b1) AND (a2b 2)B.(a1b 1) OR (a1=b1) AND (a2b 2)C.(a1b 1) OR (a1=b1) AND (
7、a2b 2)D.(a1b 1) OR (a1=b1) AND (a2b 2)20.“断言”是 DBS 采用的_。(分数:1.00)A.完整性措施B.安全性措施C.恢复措施D.并发控制措施21.卷游标的推进语句 EXEC SQL FETCH RELATIVE -4 表示_。(分数:1.00)A.把游标移向查询结果的第 4 行B.把游标移向查询结果的倒数第 4 行C.把游标从当前位置推进 4 行D.把游标从当前位置返回 4 行22.SELECT 语句中没有分组子句和聚合函数时,SELECT 子句表示了关系代数中的 _。(分数:1.00)A.投影操作B.选择操作C.连接操作D.笛卡儿积操作二、B论述
8、题/B(总题数:2,分数:14.00)1某工厂的信息管理数据库中有两个关系模式:职工(职工号,姓名,年龄,月工资,部门号,电话,办公室)部门(部门号,部门名,负责人代码,任职时间)(分数:6.00)(1).(1)查询每个部门中月工资最高的“职工号”的 SQL 查询语句如下:SELECT 职工号 FROM 职工 EWHERE 月工资=(SELECT MAX(月工资)FROM 职工 AS MWHERE M部门号=E部门号);请用 30 字以内的文字简要说明该查询语句对查询效率的影响。对该查询语句进行修改,使它既可以完成相同功能,又可以提高查询效率。(分数:3.00)_(2).(2)假定分别在“职工
9、”关系中的“年龄”和“月工资”字段上创建了索引,如下的 Select 查询语句可能不会促使查询优化器使用索引,从而降低了查询效率,请写出既可以完成相同功能又可以提高查询效率的 SQL 语句。SELECT 姓名,年龄,月工资 FROM 职工WHERE 年龄45 OR 月工资1000;(分数:3.00)_2某工厂的仓库管理数据库中有两个关系模式:仓库(仓库号,面积,负责人,电话)原材料(编号,名称,数量,储备量,仓库号)要求一种原材料只能存放在同一仓库中。(分数:8.00)(1).写出“查询存放原材料数量最多的仓库号”的 SQL 语句。(分数:2.00)_(2).(2)下面是一个创建视图的语句:C
10、REATE VIEW raw_in_wh01 ASSELECT *FROM 原材料WHERE 仓库号=01;试写出“01 号仓库所存储的原材料信息只能由管理员李劲松来维护,而采购员李强能够查询所有原材料的库存信息”的授权语句。(分数:2.00)_(3).(3)仓库管理数据库的订购计划关系模式为:订购计划(原材料编号,订购数量)。采用下面的触发器程序可以实现“当仓库中的任一原材料的数量小于其储备量时,向订购计划表中插入该原材料的订购记录,其订购数量为储备量的 3 倍”的功能。请将该程序的空缺部分补充完成。CREATE TRIGGER ins_order_trigger AFTERU (1) /U
11、ON 原材料REFERENCING NEW ROW AS nrowFOR EACH ROWWHEN nrow.数量nrow.储备量INSERT INTO 订购计划VALUES(U (m) /U,U (n) /U);(分数:2.00)_(4).(4)如果一种原材料可以在多个仓库存放,则(3)中的触发器程序存在什么问题,如何修改?(分数:2.00)_数据库系统工程师-SOL 语言答案解析(总分:36.00,做题时间:90 分钟)一、B选择题/B(总题数:22,分数:22.00)1.卷游标的推进语句 EXEC SQL FETCH ABSOLUTE -3 表示_。(分数:1.00)A.把游标移向查询结
12、果的第 3 行B.把游标移向查询结果的倒数第 3 行 C.把游标从当前位置推进 3 行D.把游标从当前位置返回 3 行解析:2.允许在嵌入的 SQL 语句中引用宿主语言的程序变量,在引用时_。(分数:1.00)A.直接引用B.这些变量前必须加符号“*”C.这些变量前必须加符号“:” D.这些变量前必须加符号“其等价的查询语句是_。(分数:1.00)A.统计职工的总人数B.统计每一部门的职工人数C.统计职工服务的部门数目 D.统计每一职工服务的部门数目解析:8.SQL 中,与 NOT IN 等价的操作符是_。(分数:1.00)A.=SOMEB.SOMEC.=ALLD.ALL 解析:9.某高校 5
13、 个系的学生信息存放在同一个基本表中,采取_的措施可使各系的管理员只能读取本系学生的信息。(分数:1.00)A.建立各系的列级视图,并将对该视图的读权限赋予该系的管理员B.建立各系的行级视图,并将对该视图的读权限赋予该系的管理员 C.将学生信息表的部分列的读权限赋予各系的管理员D.将修改学生信息表的权限赋予各系的管理员解析:10.不能激活触发器执行的操作是_。(分数:1.00)A.DELETEB.UPDATEC.INSERTD.SELECT 解析:11.嵌入式 SQL 实现时,采用预处理方式是_。(分数:1.00)A.把 SQL 语句和主语言语句区分开来B.为 SQL 语句加前缀标识和结束标志
14、C.识别出 SQL 语句,并处理成函数调用形式 D.把 SQL 语句编译成二进制码解析:12.“角色”是 DBS 采用的_。(分数:1.00)A.完整性措施B.安全性措施 C.恢复措施D.并发控制措施解析:13.对于第 7 题的两个基本表,有一个 SQL 语句: SELECT ENO, ENAME FROM EMP WHERE DNO NOT IN (SELECT DNO FROM DEPT WHERE DNAME=金工车间);其等价的关系代数表达式是:_。(分数:1.00)A. ENO,ENAME( DNAME金工车间 (EMPB. ENO,ENAME C. ENO,ENAME(EM- EN
15、O,ENAME ( DNAME=金工车间 (EMP D. ENO,ENAME (EM- ENO,ENAME ( DNAME金工车间 (EMP解析:14.SELECT 语句中 FROM R,此处 R 是基本表名,但应理解为_。(分数:1.00)A.R 的结构定义B.R 的元组序号C.R 中全部元组D.R 的元组变量 解析:15.允许取空值但不允许出现重复值的约束是_。(分数:1.00)A.NULLB.UNIQUE C.PRIMARY KEYD.FOREIGN KEY解析:16.SQL 中,下列操作不正确的是_。(分数:1.00)A.AGE IS NOTNULLB.NOT (AGE IS NULC
16、.SNAME=王五D.SNAME=王% 解析:17.对于第 7 题的两个基本表,有一个 SQL 语句: UPDATE EMP SET SALARY=SALARY*1.05 WHERE DNO=D6 AND SALARY(SELECT AVG(SALARY) FROM EMP);其等价的修改语句为_。(分数:1.00)A.为工资低于 D6 部门平均工资的所有职工加薪 5%B.为工资低于整个企业平均工资的职工加薪 5%C.为在 D6 部门工作、工资低于整个企业平均工资的职工加薪 5% D.为在 D6 部门工作、工资低于本部门平均工资的职工加薪 5%解析:18.有关嵌入式 SQL 的叙述,不正确的是
17、_。(分数:1.00)A.宿主语言是指 C 一类高级程序设计语言B.宿主语言是指 SOL 语言 C.在程序中要区分 SQL 语句和宿主语言语句D.SQL 有交互式和嵌入式两种使用方式解析:19.元组比较操作(a 1,a 2)(b 1,b 2)的意义是_。(分数:1.00)A.(a1b 1) OR (a1=b1) AND (a2b 2) B.(a1b 1) OR (a1=b1) AND (a2b 2)C.(a1b 1) OR (a1=b1) AND (a2b 2)D.(a1b 1) OR (a1=b1) AND (a2b 2)解析:20.“断言”是 DBS 采用的_。(分数:1.00)A.完整性
18、措施 B.安全性措施C.恢复措施D.并发控制措施解析:21.卷游标的推进语句 EXEC SQL FETCH RELATIVE -4 表示_。(分数:1.00)A.把游标移向查询结果的第 4 行B.把游标移向查询结果的倒数第 4 行C.把游标从当前位置推进 4 行D.把游标从当前位置返回 4 行 解析:22.SELECT 语句中没有分组子句和聚合函数时,SELECT 子句表示了关系代数中的 _。(分数:1.00)A.投影操作 B.选择操作C.连接操作D.笛卡儿积操作解析:二、B论述题/B(总题数:2,分数:14.00)1某工厂的信息管理数据库中有两个关系模式:职工(职工号,姓名,年龄,月工资,部
19、门号,电话,办公室)部门(部门号,部门名,负责人代码,任职时间)(分数:6.00)(1).(1)查询每个部门中月工资最高的“职工号”的 SQL 查询语句如下:SELECT 职工号 FROM 职工 EWHERE 月工资=(SELECT MAX(月工资)FROM 职工 AS MWHERE M部门号=E部门号);请用 30 字以内的文字简要说明该查询语句对查询效率的影响。对该查询语句进行修改,使它既可以完成相同功能,又可以提高查询效率。(分数:3.00)_正确答案:()解析:此问考查的是查询效率的问题。在涉及相关查询的某些情形中,构造临时。关系可以提高查询效率。对于外层的职工关系 E 中的每一个元组
20、,都要对内层的整个职工关系 M 进行检索,因此查询效率不高。解答方法一 (先把每个部门最高工资的数据存入临时表,再对临时表进行查询): SELECT MAX (月工资) As 最高工资,部门号 Into Temp FROM 职工 GROUP BY 部门号; SELECT 职工号 FROM 职工,Temp WHERE 月工资=最高工资 AND 职工部门号=Temp部门号; 解答方法二 (直接在 FROM 子句中使用临时表结构): SELECT 职工号 FROM 职工,(SELECT MAX(月工资) As 最高工资,部门号 FROM 职工 GROUP BY 部门号) As depMax WHER
21、E 月工资=最高工资 AND 职工部门号=depMax部门号;(2).(2)假定分别在“职工”关系中的“年龄”和“月工资”字段上创建了索引,如下的 Select 查询语句可能不会促使查询优化器使用索引,从而降低了查询效率,请写出既可以完成相同功能又可以提高查询效率的 SQL 语句。SELECT 姓名,年龄,月工资 FROM 职工WHERE 年龄45 OR 月工资1000;(分数:3.00)_正确答案:()解析:此问主要考察在查询中注意 WHERE 子句中使用索引的问题。既可以完成相同功能又可以提高查询效率的 SQL 语句如下: (SELECT 姓名,年龄,月工资 FROM 职工 WHERE 年
22、龄45) UNION (SELECT 姓名,年龄,月工资 FROM 职工 WHERE 月工资1000);2某工厂的仓库管理数据库中有两个关系模式:仓库(仓库号,面积,负责人,电话)原材料(编号,名称,数量,储备量,仓库号)要求一种原材料只能存放在同一仓库中。(分数:8.00)(1).写出“查询存放原材料数量最多的仓库号”的 SQL 语句。(分数:2.00)_正确答案:()解析:SELECT 仓库号 FROM 原材料 GROUP BY 仓库号 HAVING SUM (数量)=ALL(SELECT SUM(数量) FROM 原材料 GROUP BY 仓库号);(2).(2)下面是一个创建视图的语句
23、:CREATE VIEW raw_in_wh01 ASSELECT *FROM 原材料WHERE 仓库号=01;试写出“01 号仓库所存储的原材料信息只能由管理员李劲松来维护,而采购员李强能够查询所有原材料的库存信息”的授权语句。(分数:2.00)_正确答案:()解析:可以写两个授权语句: GRANT INSERT, DELETE, UPDATE ON raws_in_wh01 TO 李劲松; GRANT SELECT ON 原材料 TO 李强;(3).(3)仓库管理数据库的订购计划关系模式为:订购计划(原材料编号,订购数量)。采用下面的触发器程序可以实现“当仓库中的任一原材料的数量小于其储备
24、量时,向订购计划表中插入该原材料的订购记录,其订购数量为储备量的 3 倍”的功能。请将该程序的空缺部分补充完成。CREATE TRIGGER ins_order_trigger AFTERU (1) /UON 原材料REFERENCING NEW ROW AS nrowFOR EACH ROWWHEN nrow.数量nrow.储备量INSERT INTO 订购计划VALUES(U (m) /U,U (n) /U);(分数:2.00)_正确答案:()解析:UPDATE, INSERT (m)nrow.编号 (n)nrow.储备量*3(4).(4)如果一种原材料可以在多个仓库存放,则(3)中的触发器程序存在什么问题,如何修改?(分数:2.00)_正确答案:()解析:存在的问题是:触发器程序判定某一原材料“数量”是否小于其存储量时,是按照当前记录的“数量”来判定的,当一种原材料存储在多个仓库时,这样判定是错误的,应根据该原材料在各仓库的存储总量判定。 应将触发器程序的 WHEN 子句的条件修改为: WHEN nrow.储备量(SELECT SUM(数量) FROM 原材料 WHERE 编号=(SELECT 编号 FROM nrow);