第十八套
一、基本操作題(共四小題,第1和2題是7分、第3和4題是8分)
在考生文件夾下完成如下操作:
1. 打開"訂貨管理"數(shù)據(jù)庫,并將表order_list添加到該數(shù)據(jù)庫中。
2. 在"訂貨管理"數(shù)據(jù)庫中建立表order_detail,表結(jié)構(gòu)描述如下:
訂單號 字符型(6)
器件號 字符型(6)
器件名 字符型(16)
單價 浮動型(10.2)
數(shù)量 整型
3. 為新建立的order_detail表建立一個普通索引,索引名和索引表達式均
是"訂單號"。
4. 建立表order_list和表order_detail間的永久聯(lián)系(通過"訂單號"字段)。
本題主要考核點:
將一個自由表添加到數(shù)據(jù)庫中、表結(jié)構(gòu)的建立、兩個表之間建立永久聯(lián)系等知識點
本題解題思路:
第一步:打開考生文件夾下的"訂貨管理"數(shù)據(jù)庫
第二步:打開數(shù)據(jù)庫菜單選擇"添加表(A)",在彈出的"打開"對話框中,選定考生文件夾下的order_list表,再點擊"確定"即可
第三步:再次打開數(shù)據(jù)庫菜單選擇"新建表(N)",在彈出的對話框中選擇"新建表",并在彈出"創(chuàng)建"對話框中選定考生文件夾,在輸入表名中填入"order_detail",再點擊保存。
第四步:在彈出的表設計器中按題面的要求依次輸入各個字段的定義,選擇"索引"標簽,在索引名列中填入"訂單號",在索引類型列中選擇"普通索引",在索引表達式列中填入"訂單號",點擊"確定"按鈕,保存表結(jié)構(gòu).
第五步:單擊選中order_list中的主索引"訂單號",并拖拽到order_detail的"訂單號"索引上,鼠標箭頭會變成小矩形;釋放鼠標后,即出現(xiàn)了關系符號,這樣便可以建立起永久關系。
二、簡單應用(2小題,每題20分,計40分)
在考生文件夾下完成如下簡單應用:
1. 將 order_detail1表中的全部記錄追加到order_detail表中,然后用SQL
SELECT語句完成查詢:列出所有訂購單的訂單號、訂購日期、器件號、器件
名和總金額(按訂單號升序,訂單號相同再按總金額降序)
并將結(jié)果存儲到results表中(其中訂單號、訂購日期、總金額取自
order_list表,器件號、器件名取自order_detail表)。
2. 打開modi1.prg命令文件,該命令文件包含3條SQL語句,每條SQL語句中都有
一個錯誤,請改正之(注意:在出現(xiàn)錯誤的地方直接改正,不可以改變SQL
語句的結(jié)構(gòu)和SQL短語的順序)。
本題主要考核點:
SQL中的查詢SELECT查詢,聯(lián)接查詢,查詢的排序,查詢的結(jié)果的去向和SELECT中的短語的正確使用。
解題思路:
第一小題:將order_detail1中的全部記錄追加到order_detail中,要將一個表的所有記錄追加到另一個表中使用APPEND FROM 命令,首先打開order_detail:USE ORDER_DETAIL,在APPEND FROM的后面是要追加到order_DETAIL的表名,這里是order_DETAIL1。查詢表中的數(shù)據(jù)要用到SELECT命令,要查詢的數(shù)據(jù)來源于ORDER_DETAIL和order_list表,將它們置于FROM的后面,并用逗號隔開,并分別為它們指定一個別名DetAlias和 LisAlias;由于是聯(lián)接查詢要指明查詢的條件,將聯(lián)接條件DetAlias.訂單號=LisAlias.訂單號放在WHERE短語的后面,同時要對結(jié)果集按照訂單號的升序和總金額的降序進行排序,所以要將:訂單號,總金額 DESC放在ORDER BY 短語的后面,結(jié)果集要存儲到results表中,所以要將:results放在INTO TABLE 后面。由于查詢的結(jié)果不是所有的屬性,所以需要指明結(jié)果的屬性,并且訂單號在兩個表中都存在,所以要特別指定此屬性來自那一個源表(這里用表的別名來代替)。這樣就形成了一個完整的查詢語句:
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可以更新記錄的內(nèi)容,而不是
&&用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不同。
三、綜合應用(1小題,計30分)
在做本題前首先確認在基礎操作中已經(jīng)正確地建立了order_detail表,在簡單
應用中已經(jīng)成功地將記錄追加到order_detail表。
當order_detail表中的單價修改后,應該根據(jù)該表的"單價"和"數(shù)量"字段修改
order_list表的總金額字段,現(xiàn)在有部分order_list記錄的總金額字段值不正
確,請編寫程序挑出這些記錄,并將這些記錄存放到一個名為od_mod的表中
(與order_list表結(jié)構(gòu)相同,自己建立),然后根據(jù)order_detail表的"單
價"和"數(shù)量"字段修改od_mod表的總金額字段(注意一個od_mod記錄可能對應幾
條order_detail記錄),最后od_mod表的結(jié)果要求按總金額升序排序,編寫的
程序最后保存為prog1.prg。
本題主要考核點:
程序的建立方法、程序中循環(huán)結(jié)構(gòu)的使用、SQL查詢語句的使用、記錄的修改方法等知識點
本題解題思路:
第一步:在VisualFoxPro主窗口下按組合鍵Ctrl+N,系統(tǒng)彈出"新建"對話框,在"文件類型"中選擇"程序",再點擊"新建文件"按鈕,則系統(tǒng)彈出程序編輯窗口;
第二步:在彈出的窗中中輸入以下代碼:
SET TALK ON
SET SAFETY ON
&&計算出每個訂單的總金額
SELECT 訂單號,SUM(單價*數(shù)量) AS 總金額;
FROM ORDER_DETAIL;
GROUP BY 訂單號;
INTO CURSOR CurTable
&&首先應該得到每一訂單的總金額。由于同一個訂單由多種商品組成,所以要求出
&&同一訂單的總金額應該將同一訂單所包含的商品合計在一起,這就作到了SUM函數(shù)
&&其分組的依據(jù)是訂單號放在ORDER BY子句的后面,將結(jié)果集放入一個臨時表CurTable,
&&將臨時表名CurTable放在INTO CURSOR子句的后面
SELECT ORDER_LIST.*;
FROM ORDER_LIST,CurTable;
WHERE ORDER_LIST.訂單號=CurTable.訂單號 AND ORDER_LIST.總金額<>CurTable.總金額;
INTO TABLE OD_MOD
&&根據(jù)上面所得到的臨時表中每一訂單的總金額來得到order_list中不正確的記錄
&&由于要在一個查詢中用到另一個表所以要用到查詢,將它們分別放在FROM子句
&&的后面,兩個表名之間用逗號隔開;在WHERE子句中放入聯(lián)接的條件和查詢的條件
&& ORDER_LIST.訂單號=CurTable.訂單號 AND ORDER_LIST.總金額<>CurTable.總金額
&&查詢的結(jié)果集要放入永久表OD_MOD中,將OD_MOD放在INTO TABLE子句的后面
USE OD_MOD
DO WHILE NOT EOF() &&遍歷OD_MOD中的每一條記錄
SELECT CurTable.總金額 FROM CurTable;
WHERE CurTable.訂單號=OD_MOD.訂單號;
INTO ARRAY AFieldsValue
&&從臨時表CurTable中得到與當前記錄的訂單號相同的訂單的正確的總金額
&&將條件CurTable.訂單號=OD_MOD.訂單號,放在WHERE子句的后面;
&&將結(jié)果放入一個數(shù)組變量AFieldsValue中
REPLACE 總金額 WITH AFieldsValue
&&用正確的總金額來代替原來的總金額
SKIP
ENDDO
CLOSE ALL
&&先生成一個臨時表
SELECT * FROM OD_MOD ORDER BY 總金額;
INTO CURSOR CurTable
&&再從臨時表生成表,并覆蓋原表
SELECT * FROM CurTable INTO TABLE OD_MOD
SET TALK OFF
SET SAFETY OFF
第三步:單擊"保存"工具欄按鈕,以文件名prog1.prg保存程序文件在考生文件夾下,并運行程序。
一、基本操作題(共四小題,第1和2題是7分、第3和4題是8分)
在考生文件夾下完成如下操作:
1. 打開"訂貨管理"數(shù)據(jù)庫,并將表order_list添加到該數(shù)據(jù)庫中。
2. 在"訂貨管理"數(shù)據(jù)庫中建立表order_detail,表結(jié)構(gòu)描述如下:
訂單號 字符型(6)
器件號 字符型(6)
器件名 字符型(16)
單價 浮動型(10.2)
數(shù)量 整型
3. 為新建立的order_detail表建立一個普通索引,索引名和索引表達式均
是"訂單號"。
4. 建立表order_list和表order_detail間的永久聯(lián)系(通過"訂單號"字段)。
本題主要考核點:
將一個自由表添加到數(shù)據(jù)庫中、表結(jié)構(gòu)的建立、兩個表之間建立永久聯(lián)系等知識點
本題解題思路:
第一步:打開考生文件夾下的"訂貨管理"數(shù)據(jù)庫
第二步:打開數(shù)據(jù)庫菜單選擇"添加表(A)",在彈出的"打開"對話框中,選定考生文件夾下的order_list表,再點擊"確定"即可
第三步:再次打開數(shù)據(jù)庫菜單選擇"新建表(N)",在彈出的對話框中選擇"新建表",并在彈出"創(chuàng)建"對話框中選定考生文件夾,在輸入表名中填入"order_detail",再點擊保存。
第四步:在彈出的表設計器中按題面的要求依次輸入各個字段的定義,選擇"索引"標簽,在索引名列中填入"訂單號",在索引類型列中選擇"普通索引",在索引表達式列中填入"訂單號",點擊"確定"按鈕,保存表結(jié)構(gòu).
第五步:單擊選中order_list中的主索引"訂單號",并拖拽到order_detail的"訂單號"索引上,鼠標箭頭會變成小矩形;釋放鼠標后,即出現(xiàn)了關系符號,這樣便可以建立起永久關系。
二、簡單應用(2小題,每題20分,計40分)
在考生文件夾下完成如下簡單應用:
1. 將 order_detail1表中的全部記錄追加到order_detail表中,然后用SQL
SELECT語句完成查詢:列出所有訂購單的訂單號、訂購日期、器件號、器件
名和總金額(按訂單號升序,訂單號相同再按總金額降序)
并將結(jié)果存儲到results表中(其中訂單號、訂購日期、總金額取自
order_list表,器件號、器件名取自order_detail表)。
2. 打開modi1.prg命令文件,該命令文件包含3條SQL語句,每條SQL語句中都有
一個錯誤,請改正之(注意:在出現(xiàn)錯誤的地方直接改正,不可以改變SQL
語句的結(jié)構(gòu)和SQL短語的順序)。
本題主要考核點:
SQL中的查詢SELECT查詢,聯(lián)接查詢,查詢的排序,查詢的結(jié)果的去向和SELECT中的短語的正確使用。
解題思路:
第一小題:將order_detail1中的全部記錄追加到order_detail中,要將一個表的所有記錄追加到另一個表中使用APPEND FROM 命令,首先打開order_detail:USE ORDER_DETAIL,在APPEND FROM的后面是要追加到order_DETAIL的表名,這里是order_DETAIL1。查詢表中的數(shù)據(jù)要用到SELECT命令,要查詢的數(shù)據(jù)來源于ORDER_DETAIL和order_list表,將它們置于FROM的后面,并用逗號隔開,并分別為它們指定一個別名DetAlias和 LisAlias;由于是聯(lián)接查詢要指明查詢的條件,將聯(lián)接條件DetAlias.訂單號=LisAlias.訂單號放在WHERE短語的后面,同時要對結(jié)果集按照訂單號的升序和總金額的降序進行排序,所以要將:訂單號,總金額 DESC放在ORDER BY 短語的后面,結(jié)果集要存儲到results表中,所以要將:results放在INTO TABLE 后面。由于查詢的結(jié)果不是所有的屬性,所以需要指明結(jié)果的屬性,并且訂單號在兩個表中都存在,所以要特別指定此屬性來自那一個源表(這里用表的別名來代替)。這樣就形成了一個完整的查詢語句:
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可以更新記錄的內(nèi)容,而不是
&&用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不同。
三、綜合應用(1小題,計30分)
在做本題前首先確認在基礎操作中已經(jīng)正確地建立了order_detail表,在簡單
應用中已經(jīng)成功地將記錄追加到order_detail表。
當order_detail表中的單價修改后,應該根據(jù)該表的"單價"和"數(shù)量"字段修改
order_list表的總金額字段,現(xiàn)在有部分order_list記錄的總金額字段值不正
確,請編寫程序挑出這些記錄,并將這些記錄存放到一個名為od_mod的表中
(與order_list表結(jié)構(gòu)相同,自己建立),然后根據(jù)order_detail表的"單
價"和"數(shù)量"字段修改od_mod表的總金額字段(注意一個od_mod記錄可能對應幾
條order_detail記錄),最后od_mod表的結(jié)果要求按總金額升序排序,編寫的
程序最后保存為prog1.prg。
本題主要考核點:
程序的建立方法、程序中循環(huán)結(jié)構(gòu)的使用、SQL查詢語句的使用、記錄的修改方法等知識點
本題解題思路:
第一步:在VisualFoxPro主窗口下按組合鍵Ctrl+N,系統(tǒng)彈出"新建"對話框,在"文件類型"中選擇"程序",再點擊"新建文件"按鈕,則系統(tǒng)彈出程序編輯窗口;
第二步:在彈出的窗中中輸入以下代碼:
SET TALK ON
SET SAFETY ON
&&計算出每個訂單的總金額
SELECT 訂單號,SUM(單價*數(shù)量) AS 總金額;
FROM ORDER_DETAIL;
GROUP BY 訂單號;
INTO CURSOR CurTable
&&首先應該得到每一訂單的總金額。由于同一個訂單由多種商品組成,所以要求出
&&同一訂單的總金額應該將同一訂單所包含的商品合計在一起,這就作到了SUM函數(shù)
&&其分組的依據(jù)是訂單號放在ORDER BY子句的后面,將結(jié)果集放入一個臨時表CurTable,
&&將臨時表名CurTable放在INTO CURSOR子句的后面
SELECT ORDER_LIST.*;
FROM ORDER_LIST,CurTable;
WHERE ORDER_LIST.訂單號=CurTable.訂單號 AND ORDER_LIST.總金額<>CurTable.總金額;
INTO TABLE OD_MOD
&&根據(jù)上面所得到的臨時表中每一訂單的總金額來得到order_list中不正確的記錄
&&由于要在一個查詢中用到另一個表所以要用到查詢,將它們分別放在FROM子句
&&的后面,兩個表名之間用逗號隔開;在WHERE子句中放入聯(lián)接的條件和查詢的條件
&& ORDER_LIST.訂單號=CurTable.訂單號 AND ORDER_LIST.總金額<>CurTable.總金額
&&查詢的結(jié)果集要放入永久表OD_MOD中,將OD_MOD放在INTO TABLE子句的后面
USE OD_MOD
DO WHILE NOT EOF() &&遍歷OD_MOD中的每一條記錄
SELECT CurTable.總金額 FROM CurTable;
WHERE CurTable.訂單號=OD_MOD.訂單號;
INTO ARRAY AFieldsValue
&&從臨時表CurTable中得到與當前記錄的訂單號相同的訂單的正確的總金額
&&將條件CurTable.訂單號=OD_MOD.訂單號,放在WHERE子句的后面;
&&將結(jié)果放入一個數(shù)組變量AFieldsValue中
REPLACE 總金額 WITH AFieldsValue
&&用正確的總金額來代替原來的總金額
SKIP
ENDDO
CLOSE ALL
&&先生成一個臨時表
SELECT * FROM OD_MOD ORDER BY 總金額;
INTO CURSOR CurTable
&&再從臨時表生成表,并覆蓋原表
SELECT * FROM CurTable INTO TABLE OD_MOD
SET TALK OFF
SET SAFETY OFF
第三步:單擊"保存"工具欄按鈕,以文件名prog1.prg保存程序文件在考生文件夾下,并運行程序。