计算机等级考试二级VFP机试试题18
文章作者 100test 发表时间 2007:03:10 18:00:27
来源 100Test.Com百考试题网
第十八套
一、基本操作题(共四小题,第1和2题是7分、第3和4题是8分)
在考生文件夹下完成如下操作:
1. 打开"订货管理"数据库,并将表order_list添加到该数据库中。
2. 在"订货管理"数据库中建立表order_detail,表结构描述如下:
订单号 字符型(6)
器件号 字符型(6)
器件名 字符型(16)
单价 浮动型(10.2)
数量 整型
3. 为新建立的order_detail表建立一个普通索引,索引名和索引表达式均
是"订单号"。
4. 建立表order_list和表order_detail间的永久联系(通过"订单号"字段)。
本题主要考核点:
将一个自由表添加到数据库中、表结构的建立、两个表之间建立永久联系等知识点
本题解题思路:
第一步:打开考生文件夹下的"订货管理"数据库
第二步:打开数据库菜单选择"添加表(A)",在弹出的"打开"对话框中,选定考生文件夹下的order_list表,再点击"确定"即可
第三步:再次打开数据库菜单选择"新建表(N)",在弹出的对话框中选择"新建表",并在弹出"创建"对话框中选定考生文件夹,在输入表名中填入"order_detail",再点击保存。
第四步:在弹出的表设计器中按题面的要求依次输入各个字段的定义,选择"索引"标签,在索引名列中填入"订单号",在索引类型列中选择"普通索引",在索引表达式列中填入"订单号",点击"确定"按钮,保存表结构.
第五步:单击选中order_list中的主索引"订单号",并拖拽到order_detail的"订单号"索引上,鼠标箭头会变成小矩形;释放鼠标后,即出现了关系符号,这样便可以建立起永久关系。
二、简单应用(2小题,每题20分,计40分)
在考生文件夹下完成如下简单应用:
1. 将 order_detail1表中的全部记录追加到order_detail表中,然后用SQL
SELECT语句完成查询:列出所有订购单的订单号、订购日期、器件号、器件
名和总金额(按订单号升序,订单号相同再按总金额降序)
并将结果存储到results表中(其中订单号、订购日期、总金额取自
order_list表,器件号、器件名取自order_detail表)。
2. 打开modi1.prg命令文件,该命令文件包含3条SQL语句,每条SQL语句中都有
一个错误,请改正之(注意:在出现错误的地方直接改正,不可以改变SQL
语句的结构和SQL短语的顺序)。
本题主要考核点:
SQL中的查询SELECT查询,联接查询,查询的排序,查询的结果的去向和SELECT中的短语的正确使用。
解题思路:
第一小题:将order_detail1中的全部记录追加到order_detail中,要将一个表的所有记录追加到另一个表中使用APPEND FROM 命令,首先打开order_detail:USE ORDER_DETAIL,在APPEND FROM的后面是要追加到order_DETAIL的表名,这里是order_DETAIL1。查询表中的数据要用到SELECT命令,要查询的数据来源于ORDER_DETAIL和order_list表,将它们置于FROM的后面,并用逗号隔开,并分别为它们指定一个别名DetAlias和 LisAlias;由于是联接查询要指明查询的条件,将联接条件DetAlias.订单号=LisAlias.订单号放在WHERE短语的后面,同时要对结果集按照订单号的升序和总金额的降序进行排序,所以要将:订单号,总金额 DESC放在ORDER BY 短语的后面,结果集要存储到results表中,所以要将:results放在INTO TABLE 后面。由于查询的结果不是所有的属性,所以需要指明结果的属性,并且订单号在两个表中都存在,所以要特别指定此属性来自那一个源表(这里用表的别名来代替)。这样就形成了一个完整的查询语句:
SELECT LisAlias.订单号,订购日期,器件号,器件名,总金额.
FROM ORDER_LIST LisAlias,ORDER_DETAIL DetAlias.
WHERE LisAlias.订单号=DetAlias.订单号.
ORDER BY LisAlias.订单号,总金额 DESC.
INTO TABLE RESULTS
第二题:&.&.所有器件的单价增加5元
UPDATE order_detail1 SET 单价 WITH 单价 5
&.&.这里混淆了SQL语句和FoxPro命令。用SQL语句中的UPDATE可以更新记录的内容,而不是
&.&.用WITH,而是用等号。所以应该改为:UPDATE ORDER_DETAIL1 SET 单价=单价 5
&.&.计算每种器件的平均单价
SELECT 器件号,AVG(单价) AS 平均价 FROM order_detail1 ORDER BY 器件号 INTO CURSOR lsb
&.&.这里将分组的子句GROUP BY与排序的子句ORDER BY相混淆了,这里应该用分组的子句&.&.GROUP BY来代替排序的子句ORDER BY子句。
&.&.查询平均价小于500的记录
SELECT * FROM lsb FOR 平均价 < 500
&.&.在SQL的查询语句中表示条件的是用WHERE子句,与在FoxPro中的List命令用FOR不同。