1、国家二级 VF机试(操作题)模拟试卷 462及答案解析(总分:6.00,做题时间:90 分钟)一、基本操作题(总题数:1,分数:2.00)1.(1)打开“订货管理”数据库,并将表 order- list添加到该数据库中。(2)在“订货管理”数据库中建立表 order_detail,表结构描述如下:订单号 字符型(6)器件号 字符型(6)器件名 字符型(16)单价 浮动型(10,2)数量 整型(3)为新建立的 order- detail表建立一个普通索引,索引名和索引表达式均是“订单号”。(4)建立表 order_ list和表 order_ detail间的永久联系(通过“订单号”字段)。(分
2、数:2.00)_二、简单应用题(总题数:1,分数:2.00)2.(1)将 order_ detaill表中的全部记录追加到 order- detail表中,然后用 SQL SELECT语句完成查询:列出所有订购单的“订单号”、“订购日期”、“器件号”、“器件名”和“总金额”(按“订单号”升序,“订单号”相同再按“总金额”降序),并将结果存储到 results表中(其中“订单号”、“订购日期”、“总金额”取自 order list表,“器件号”、“器件名”取自 order_ detail表)。(2)打开modilprg 命令文件,该命令文件包含 3条 SQL语句,每条 SQL语句中都有一个错误,
3、请改正(注意:在出现错误的地方直接改正,不可以改变 SQL语句的结构和 SQL短语的顺序)。(分数:2.00)_三、综合应用题(总题数:1,分数:2.00)3.在做本题前首先确认在基础操作中已经正确地建立了 order_detail表,在简单应用中已经成功地将记录追加至 o_order_detail表。当 order detail表中的“单价”修改后,应该根据该表的“单价”和“数量”字段修改 order_list表的“总金额”字段,现在有部分 order_list记录的“总金额”字段值不正确,请编写程序挑出这些记录,并将这些记录存放到一个名为 od_mod的表中(与 order_list表结构
4、相同,自己建立),然后根据 order_detail表的“单价”和“数量”字段修改 od_mod表的“总金额”字段(注意一个 od_mod记录可能对应几条 order_detail记录),最后 od_mod表的结果要求按“总金额”升序排序,编写的程序最后保存为 proglprg。(分数:2.00)_国家二级 VF机试(操作题)模拟试卷 462答案解析(总分:6.00,做题时间:90 分钟)一、基本操作题(总题数:1,分数:2.00)1.(1)打开“订货管理”数据库,并将表 order- list添加到该数据库中。(2)在“订货管理”数据库中建立表 order_detail,表结构描述如下:订单
5、号 字符型(6)器件号 字符型(6)器件名 字符型(16)单价 浮动型(10,2)数量 整型(3)为新建立的 order- detail表建立一个普通索引,索引名和索引表达式均是“订单号”。(4)建立表 order_ list和表 order_ detail间的永久联系(通过“订单号”字段)。(分数:2.00)_正确答案:(正确答案:(1)命令窗口执行: MODIFY DATABASE 订货管理, 新建数据库并打开数据库设计器。 在数据库设计器中右击,选择【添加表】,在“打开”对话框中双击“order list”表。 (2)在数据库设计器中右击,选择【新建表】,在“新建表”中单击“新建表”按钮
6、,在“创建”对话框的“输入表名”中输入“order_detail”,单击“保存”打开表设计器。 根据题意,在表设计器中逐行输入每个字段的字段名,并设置字段类型和宽度,然后单击“确定”,系统询问“现在输入数据记录吗?”,单击“否”按钮。 (3)右击数据库设计器中的 order_ detail表,选择【修改】,打开 order_ detail表设计器,在“字段”中选“订单号”,在“索引”列中选择“升序”,单击“确定”保存。 (4)拖动 order_list表“索引”下方的候选索引“订单号”到 order_detail表中“索引”下方的普通索引“订单号”上,为两个表建立联系。 使用数据库;索引。)解
7、析:解析:本题考查了数据库的基本操作:数据库表的建立:索引的建立以及表之间联系的建立。 MODIFY DATABASE数据库名命令可在新建数据库的同时打开数据库设计器,然后完成添加数据表。在表设计器的“字段”选项卡中,可以通过选择“排序”下拉框中的“升序”或“降序”为指定的字段建立一个索引名与索引表达式相同的普通索引。二、简单应用题(总题数:1,分数:2.00)2.(1)将 order_ detaill表中的全部记录追加到 order- detail表中,然后用 SQL SELECT语句完成查询:列出所有订购单的“订单号”、“订购日期”、“器件号”、“器件名”和“总金额”(按“订单号”升序,“
8、订单号”相同再按“总金额”降序),并将结果存储到 results表中(其中“订单号”、“订购日期”、“总金额”取自 order list表,“器件号”、“器件名”取自 order_ detail表)。(2)打开modilprg 命令文件,该命令文件包含 3条 SQL语句,每条 SQL语句中都有一个错误,请改正(注意:在出现错误的地方直接改正,不可以改变 SQL语句的结构和 SQL短语的顺序)。(分数:2.00)_正确答案:(正确答案:(1)步骤 1:在命令窗口执行命令: SELECT* FROM order detaill INTO ARRAY temp INSERT INTO order d
9、etail FROM ARRAY temp 将 detaill表中的记录全部复制到 detail表中。 步骤 2:在命令窗口执行如下 SQL命令语句完成查询: SELECT order list订单号,order list 订购日期, order detail器件号,order detail器件名,order list总金额; FROM 订货管理!order list INNER JOIN 订货管理!order detail; ON order list订单号=order detail订单号; ORDER BY order list订单号,order list总金额 DESC; INTO TA
10、BLE resultsdbf (注意:以上 SQL语句是根据查询文件生成的,大家也可以通过查询设计器完成本题操作。) SQL 简单查询。 (2)步骤 1:在命令窗口执行命令: MODIFY COMMANDmodil, 打开 modil程序文件,文件中的命令代码如下: 所有器件的单价增加 5元 UPDATE order detaill SET 单价 WITH单价+5 计算每种器件的平均单价 SELECT器件号,AVG(单价)AS 平均价 FROM order detaill ORDER BY器件号 INTO CURSQR lsb 查询平均价小于 500的记录 SELECT*FROM lsb FO
11、R 平均价500 修改程序中的错误行,修改后的程序如下:UPDATE order detaill SET单价=单价+5UPDATE 语句中赋值是通过“=”号,而不是 WITH SELECT器件号,AVG(单价)AS 平均价 FROM order detaill GROUP BY器件号 INTO CURSOR lsb GROUP BY短语才是分组短语,而 ORDER BY短语是用来对查询结果进行排序的 SELECT*FROM lsb WHERE平均价500 SELECT 的条件短语是 WHERE,而不是 FOR 步骤 2:保存文件修改,在命令窗口执行命令:DO modilprg, 执行程序文件。
12、 SQL 的操作功能;SQL 分组与计算查询。)解析:解析:(1)本题考查了 SQL的简单查询和联接查询。进行联接查询时主要是判断查询输出字段来自哪个数据表(本题都已指明),再正确设置联接条件。 (2)本题考查了 SQL更新功能;分组计算查询和简单查询。 第一处错误属于 SQL更新命令格式错误,通过 SQL命令给字段赋新值是通过“=”号设置的。 第二处错误是分组短语与排序短语混淆了,这也是改错题中经常设置错误的地方。 第三处错误是查询语句的命令格式错误,SQL 查询中筛选条件通过 WHERE短语指出。三、综合应用题(总题数:1,分数:2.00)3.在做本题前首先确认在基础操作中已经正确地建立了
13、 order_detail表,在简单应用中已经成功地将记录追加至 o_order_detail表。当 order detail表中的“单价”修改后,应该根据该表的“单价”和“数量”字段修改 order_list表的“总金额”字段,现在有部分 order_list记录的“总金额”字段值不正确,请编写程序挑出这些记录,并将这些记录存放到一个名为 od_mod的表中(与 order_list表结构相同,自己建立),然后根据 order_detail表的“单价”和“数量”字段修改 od_mod表的“总金额”字段(注意一个 od_mod记录可能对应几条 order_detail记录),最后 od_mod
14、表的结果要求按“总金额”升序排序,编写的程序最后保存为 proglprg。(分数:2.00)_正确答案:(正确答案:步骤 1:在命令窗口执行命令: MODIFY COMMAND progl, 打开程序文件编辑器输入如下程序代码: SELECT 订单号,SUM(单价*数量)AS 总金额; FROM order detail; GROUP BY 订单号; INTO CURSOR arrtable SELECT order list*; FROM order list,arrtable; WHERE order list订单号=arrtable订单号 ANDorder list总金额arrtable
15、总金额; INTO TABLE ocl mod USE od mod DO WHILE NOT EOF() SELECT arrtable总金额 FROM arrtable; WHERE arrtable订单号=od mod订单号; INTO ARRAY arr REPLACE 总金额 WITH arr SKIP ENDDO CLOSE ALL SELECT+FROM od mod ORDER BY总金额; INTO CURSOR arrtablel SELECT * FROM arrtablel INTO TABLE od mod 步骤2:保存文件修改,在命令窗口执行命令:DO proglp
16、rg,执行程序文件。 SQL 分组与计算查询;程序基本结构。)解析:解析:本题主要考查 SQL分组计算查询:DO WHILE 循环结构。本基本解题思路可按以下步骤进行:首先,根据 order_detail表的“单价”和“数量”数据,利用分组计算查询求出每组订单的“总金额”,将结果保存到一个临时表中。 然后,通过对 order_list表和临时表的联接查询,找出 order_list表中“总金额”字段与临时表中“总金额”不相同的记录,并将 order_list表中这些“总金额”不相同的记录输出到 od_mod表中。 接着利用 DO WHILE循环语句对 od_mod表中的每条记录进行处理。通过 SQL查询语句从临时表中先获得与 od mod表当前所指记录“订单号”相同的“总金额”字段值,将该值保存到数组中,再通过 REPLACE命令修改 od_ mod表当前记录的值,每处理完一条记录,记录指针便指向下一条记录,一直到处理完 od_mod表中的所有记录。 最后将 od_mod表的记录按“总金额”排序,由于查询结果不能覆盖正在作为查询数据源的表,因此,可以通过一个临时表过渡,保存排序的表记录,再通过临时表将排好序的记录保存到原数据表中。