二、簡單應用(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不同。
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內蒙古 |