二.簡(jiǎn)單應(yīng)用(2小題,每題20分,計(jì)40分)
1.用SQL語(yǔ)句查詢至少有三門的課程成績(jī)?cè)?0分以上(包括70分)的學(xué)生姓名,并將結(jié)果按升序存入表文件results.dbf,然后將該SQL語(yǔ)句粘貼在SQL.TXT文件的第二行(只占一行)。
2.modi.prg程序的功能是:先為"學(xué)生"表增加一個(gè)"平均成績(jī)"字段,數(shù)據(jù)類型為N(6,2);然后根據(jù)"選課"表統(tǒng)計(jì)每個(gè)學(xué)生的平均成績(jī),并寫入新添加的字段。
該程序有三處錯(cuò)誤,請(qǐng)改正之,使程序能正確運(yùn)行(在指定處修改,不允許增加或刪除程序行)。
參考答案及考點(diǎn):
1.該題的考點(diǎn)是SQL語(yǔ)句的使用和向文本文件中保存命令,參考程序是:
方法1:嵌套方式
SELE 姓名 FROM 學(xué)生 WHERE 學(xué)號(hào) IN;
(SELE 學(xué)號(hào) FROM 選課 WHERE 成績(jī)>=70 GROUP BY 學(xué)號(hào)
HAVING COUNT(*)>=3) ORDER BY 1 INTO DBF RESULTS
方法2:連接方式
SELE 姓名 FROM 學(xué)生,選課 WHERE 學(xué)生.學(xué)號(hào)=選課.學(xué)號(hào) AND 成績(jī)>=70;
GROUP BY 學(xué)生.學(xué)號(hào) HAVING COUNT(*)>=3 ORDER BY 姓名 INTO DBF RESULTS
然后在命令窗口中選中命令,單擊常用工具欄"打開"按鈕,打開SQL.TXT文件,光標(biāo)定位在第二行,單擊"粘貼"。注意因?yàn)槊钚斜容^長(zhǎng),要將在命令窗口中添加的換行符";"刪除,并將文本調(diào)整到同一行。
解釋:
(1)首先確定需要使用表,"姓名"在學(xué)生表中,"成績(jī)"及需要統(tǒng)計(jì)的選課門數(shù)要使用選課表,因此需要使用學(xué)生和選課這兩個(gè)表,兩表聯(lián)系的字段是"學(xué)號(hào)"。
(2)成績(jī)高于70分修飾的是元組,即低于70分的記錄不參加統(tǒng)計(jì),不能將該條件用在HAVING子句中。
(3)因?yàn)橐y(tǒng)計(jì)在高于70分的成績(jī)中每個(gè)學(xué)生選修課程的門數(shù),因此必須要按學(xué)號(hào)分組,并且只有在選修門數(shù)大于等于3門時(shí)才是我們需要的,因此要用此做為條件使用HAVING子句限制分組。
2.第一行錯(cuò)誤:MODIFY TABLE 學(xué)生 ADD 平均成績(jī) N(6,2)
改為:ALTER TABLE 學(xué)生 ADD 平均成績(jī) N(6,2)
第二行錯(cuò)誤 O WHILE EOF()
改為 O WHILE NOT EOF()
第三行錯(cuò)誤:REPLACE 平均成績(jī) = cj[1]
改為:REPLACE 平均成績(jī) WITH cj[1]
解釋:
第一行,在SQL中,修改表結(jié)構(gòu)的語(yǔ)句是ALTER,而不是MODIFY,在VF命令中用MODIFY STRUCTURE 可以打開表設(shè)計(jì)器表結(jié)構(gòu)
第二行,EOF()是判斷記錄指針是否已到表尾,而只有在未到表尾時(shí)才循環(huán)
第三行,REPLACE 命令結(jié)構(gòu)應(yīng)該是
REPLACE 字段名1 WITH 表達(dá)式1,字段名2 WITH 表達(dá)式2 ...
1.用SQL語(yǔ)句查詢至少有三門的課程成績(jī)?cè)?0分以上(包括70分)的學(xué)生姓名,并將結(jié)果按升序存入表文件results.dbf,然后將該SQL語(yǔ)句粘貼在SQL.TXT文件的第二行(只占一行)。
2.modi.prg程序的功能是:先為"學(xué)生"表增加一個(gè)"平均成績(jī)"字段,數(shù)據(jù)類型為N(6,2);然后根據(jù)"選課"表統(tǒng)計(jì)每個(gè)學(xué)生的平均成績(jī),并寫入新添加的字段。
該程序有三處錯(cuò)誤,請(qǐng)改正之,使程序能正確運(yùn)行(在指定處修改,不允許增加或刪除程序行)。
參考答案及考點(diǎn):
1.該題的考點(diǎn)是SQL語(yǔ)句的使用和向文本文件中保存命令,參考程序是:
方法1:嵌套方式
SELE 姓名 FROM 學(xué)生 WHERE 學(xué)號(hào) IN;
(SELE 學(xué)號(hào) FROM 選課 WHERE 成績(jī)>=70 GROUP BY 學(xué)號(hào)
HAVING COUNT(*)>=3) ORDER BY 1 INTO DBF RESULTS
方法2:連接方式
SELE 姓名 FROM 學(xué)生,選課 WHERE 學(xué)生.學(xué)號(hào)=選課.學(xué)號(hào) AND 成績(jī)>=70;
GROUP BY 學(xué)生.學(xué)號(hào) HAVING COUNT(*)>=3 ORDER BY 姓名 INTO DBF RESULTS
然后在命令窗口中選中命令,單擊常用工具欄"打開"按鈕,打開SQL.TXT文件,光標(biāo)定位在第二行,單擊"粘貼"。注意因?yàn)槊钚斜容^長(zhǎng),要將在命令窗口中添加的換行符";"刪除,并將文本調(diào)整到同一行。
解釋:
(1)首先確定需要使用表,"姓名"在學(xué)生表中,"成績(jī)"及需要統(tǒng)計(jì)的選課門數(shù)要使用選課表,因此需要使用學(xué)生和選課這兩個(gè)表,兩表聯(lián)系的字段是"學(xué)號(hào)"。
(2)成績(jī)高于70分修飾的是元組,即低于70分的記錄不參加統(tǒng)計(jì),不能將該條件用在HAVING子句中。
(3)因?yàn)橐y(tǒng)計(jì)在高于70分的成績(jī)中每個(gè)學(xué)生選修課程的門數(shù),因此必須要按學(xué)號(hào)分組,并且只有在選修門數(shù)大于等于3門時(shí)才是我們需要的,因此要用此做為條件使用HAVING子句限制分組。
2.第一行錯(cuò)誤:MODIFY TABLE 學(xué)生 ADD 平均成績(jī) N(6,2)
改為:ALTER TABLE 學(xué)生 ADD 平均成績(jī) N(6,2)
第二行錯(cuò)誤 O WHILE EOF()
改為 O WHILE NOT EOF()
第三行錯(cuò)誤:REPLACE 平均成績(jī) = cj[1]
改為:REPLACE 平均成績(jī) WITH cj[1]
解釋:
第一行,在SQL中,修改表結(jié)構(gòu)的語(yǔ)句是ALTER,而不是MODIFY,在VF命令中用MODIFY STRUCTURE 可以打開表設(shè)計(jì)器表結(jié)構(gòu)
第二行,EOF()是判斷記錄指針是否已到表尾,而只有在未到表尾時(shí)才循環(huán)
第三行,REPLACE 命令結(jié)構(gòu)應(yīng)該是
REPLACE 字段名1 WITH 表達(dá)式1,字段名2 WITH 表達(dá)式2 ...