孟杰
摘 要:在“Visual FoxPro程序設(shè)計(jì)”的課程教學(xué)中,SQL語(yǔ)言是重點(diǎn)同時(shí)又是難點(diǎn)。作者通過(guò)多年的教學(xué)實(shí)踐,探索出了一個(gè)通過(guò)使用可視化的查詢(xún)?cè)O(shè)計(jì)器和其同步生成SQL語(yǔ)句進(jìn)行對(duì)比的教學(xué)方法。該文對(duì)這一方法進(jìn)行了論述,并以一個(gè)實(shí)例進(jìn)行了說(shuō)明。
關(guān)鍵詞:SQL 可視化 對(duì)比教學(xué)方法
中圖分類(lèi)號(hào):G633 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1674-098X(2014)03(a)-0159-01
Visual FoxPro(以下簡(jiǎn)稱(chēng)VFP)是可視化數(shù)據(jù)庫(kù)系統(tǒng)。它具有完備的工具、良好的界面、簡(jiǎn)單的存取方式,良好的兼容性等特點(diǎn)。很多高校,都將其作為一門(mén)必修課程。
在學(xué)習(xí)VFP課程中,數(shù)據(jù)的查詢(xún)是一個(gè)非常重要的內(nèi)容。VFP對(duì)于數(shù)據(jù)的查詢(xún)有三種方式,即SQL語(yǔ)句、查詢(xún)文件、視圖文件。而在VFP程序設(shè)計(jì)課程的實(shí)際教學(xué)過(guò)程中SQL語(yǔ)言即是重點(diǎn)又是難點(diǎn)。說(shuō)其重點(diǎn)是因?yàn)镾QL語(yǔ)句強(qiáng)大的查詢(xún)功能,靈活的使用方法和其跨平臺(tái)性等。但是對(duì)于非計(jì)算機(jī)專(zhuān)業(yè)的學(xué)生來(lái)說(shuō)它又是難點(diǎn),因?yàn)閷W(xué)生對(duì)于一般的計(jì)算機(jī)課程,主要使用的都是可視化的操作方式,而不是命令行式的操作方式。因此對(duì)于SQL語(yǔ)言就會(huì)感覺(jué)陌生進(jìn)而就具有畏難和排斥情緒,導(dǎo)致學(xué)習(xí)起來(lái)就會(huì)很困難。
1 Visual FoxPro的查詢(xún)方式
在VFP課程的教學(xué)中作為老師我感覺(jué)到學(xué)生對(duì)于VFP中提供的可視化的設(shè)計(jì)器比較容易接受。利用它們學(xué)生可以快速地創(chuàng)建和修改各種組件,包括數(shù)據(jù)庫(kù)、數(shù)據(jù)表、查詢(xún)等。在VFP中創(chuàng)建查詢(xún)有三種方法:查詢(xún)向?qū)?、查?xún)?cè)O(shè)計(jì)器和SELECT語(yǔ)句[1],但不論使用何種方式來(lái)創(chuàng)建查詢(xún),其最終都會(huì)生成一條SELECT語(yǔ)句,查詢(xún)向?qū)Ш筒樵?xún)?cè)O(shè)計(jì)器本質(zhì)上是SELECT語(yǔ)句的可視化設(shè)計(jì)方法。
SQL查詢(xún)語(yǔ)句(簡(jiǎn)略格式):
SELECT[字段名…][TOP<表達(dá)式>] FROM[<表名>…] [INNER JOIN <表名>ON<聯(lián)接條件>…];
[WHERE<聯(lián)接條件>…][GROUP BY<列名>…][HAVING<篩選條件>…];
[ORDER BY<字段名>…] [INTO TABLE<新表名>][2]
通過(guò)SELECT語(yǔ)句中的參數(shù)設(shè)置,可以從所要查詢(xún)的數(shù)據(jù)表中篩選出滿足條件的記錄。而在查詢(xún)?cè)O(shè)計(jì)器中則是通過(guò)添加數(shù)據(jù)表,選取字段、建立聯(lián)接、設(shè)置條件等操作來(lái)實(shí)現(xiàn)的,其中每一個(gè)選項(xiàng)卡實(shí)際上都對(duì)應(yīng)了SELECT語(yǔ)句中的一個(gè)或幾個(gè)參數(shù)。
2 對(duì)比教學(xué)方法實(shí)例
VFP系統(tǒng)中的提供了查看SQL語(yǔ)句的功能,根據(jù)學(xué)生對(duì)查詢(xún)?cè)O(shè)計(jì)器這種可視化操作比較容易掌握這一特點(diǎn),作者探索出了一個(gè)可視化的SQL語(yǔ)言和命令語(yǔ)句式的SQL語(yǔ)言的對(duì)比教學(xué)方法。本文將以一個(gè)實(shí)例子來(lái)說(shuō)明這種教學(xué)方法的應(yīng)用。
在實(shí)例中用到數(shù)據(jù)庫(kù)jxgl.dbc中的三個(gè)表Student:學(xué)生信息表,courses:學(xué)生成績(jī)表,scores:課程代碼表。實(shí)例查詢(xún)201301班選課數(shù)量大于2門(mén)且平均成績(jī)不低于60分的前10名同學(xué)的學(xué)號(hào)、姓名、平均成績(jī)和選課門(mén)數(shù),查詢(xún)結(jié)果按平均成績(jī)降序排序并存儲(chǔ)到表xkb中。這是一個(gè)相對(duì)較復(fù)雜的查詢(xún),幾乎涵蓋了SELECT命令的所有參數(shù),具有典型的代表性。
SQL語(yǔ)句如下:
SELECT TOP 10 Student.學(xué)號(hào),姓名,AVG(Scores.成績(jī)) AS 平均成績(jī),COUNT(*) AS 選課門(mén)數(shù);
FROM courses INNER JOIN scores INNER JOIN student;
ON Student.學(xué)號(hào) = Scores.學(xué)號(hào) ON Courses.科目代碼 = Scores.科目代碼;
WHERE Student.班級(jí)代碼 =“201301”;
GROUP BY Student.學(xué)號(hào) HAVING 選課門(mén)數(shù) >= 3 AND 平均成績(jī) >= 60 ORDER BY 3 DESC;
INTO TABLE xkb.dbf
如果使用查詢(xún)?cè)O(shè)計(jì)器,要通過(guò)一系列操作實(shí)現(xiàn)查詢(xún)。首先添加三個(gè)表,并確定各表的聯(lián)接條件,添加及生成所需字段,設(shè)置篩選、排序及分組條件最后提取出前10條記錄并輸出結(jié)果。雖然操作步驟較多,但是相對(duì)于命令行式的SQL語(yǔ)言來(lái)說(shuō)比較直觀學(xué)生更容易理解。
該文講述的對(duì)比教學(xué)方法的要點(diǎn)是:在查詢(xún)?cè)O(shè)計(jì)器中的每一步操作后,通過(guò)窗口菜單“查詢(xún)→查看SQL”命令或查詢(xún)?cè)O(shè)計(jì)器快捷菜單中的“查看SQL”命令,可查看系統(tǒng)生成的相應(yīng)的SQL語(yǔ)句,隨著查詢(xún)?cè)O(shè)計(jì)器的操作的進(jìn)行,學(xué)生便能觀察到一個(gè)完整的SELECT語(yǔ)句的實(shí)現(xiàn)過(guò)程。
本實(shí)例的教學(xué)過(guò)程如下:
第一步,打開(kāi)查詢(xún)?cè)O(shè)計(jì)器,依次加入表student、scores、cour ses,并確認(rèn)各表的聯(lián)接條件。然后點(diǎn)擊菜單“查詢(xún)→查看SQL”,就可查看上述操作對(duì)應(yīng)的SQL語(yǔ)句。
第二步,在“字段”選項(xiàng)卡中選取“姓名”字段和“學(xué)號(hào)”字段,再通過(guò)“函數(shù)和表達(dá)式”依次生成“平均成績(jī)”字段,語(yǔ)句為“AVG(成績(jī))AS 平均成績(jī)”,“選課門(mén)數(shù)”字段,語(yǔ)句為“COUNT(*)AS 選課門(mén)數(shù))”。此時(shí)可查看對(duì)應(yīng)的SQL語(yǔ)句。
第三步,在”篩選”選項(xiàng)卡中,設(shè)定篩選條件。此時(shí)可看到新增的SQL語(yǔ)句“WHERE Student.班級(jí)代碼=“201301”。
第四步,在“分組依據(jù)”選項(xiàng)卡中,選取分組字段,并設(shè)置其滿足的條件。之后可查看到新增的SQL語(yǔ)句:“GROUP BY Student.學(xué)號(hào) HAVING 選課門(mén)數(shù)>2 AND 平均成績(jī)>= 60”
第五步,在“排序依據(jù)”選項(xiàng)卡中,選取排序字段和設(shè)置排序選項(xiàng),此時(shí)可查看新增SQL語(yǔ)句“ORDER BY 3 DESC;”。其中的3表示第3個(gè)字段即“平均成績(jī)”,DESC表示降序。
第六步:在“雜項(xiàng)”選項(xiàng)卡中,設(shè)置輸出記錄數(shù)值10,此時(shí)可看到SQL語(yǔ)句第一行中又添加了一個(gè)參數(shù)“TOP 10”。
第七步:依次點(diǎn)擊菜單項(xiàng)“查詢(xún)→查詢(xún)?nèi)ハ颉痹诓樵?xún)?nèi)ハ虼翱谥悬c(diǎn)擊“表”選項(xiàng)卡,在表名所在的文本框中輸入“xkb”再點(diǎn)擊“確定“按鈕。此時(shí)我們會(huì)看到在SQL查看窗口下面新增一行語(yǔ)句“INTO TABLE xkb.dbf”。
至此,一個(gè)完整的SQL語(yǔ)句已經(jīng)生成。通過(guò)執(zhí)行所創(chuàng)建的查詢(xún)或者SQL語(yǔ)句,我們可以得到相同的查詢(xún)結(jié)果。
3 結(jié)語(yǔ)
本實(shí)例中幾乎涵蓋了SELECT語(yǔ)句的所有參數(shù),如果采用命令行式的方式直接教學(xué),那會(huì)使學(xué)生接受起來(lái)非常困難。而采用查詢(xún)?cè)O(shè)計(jì)器這種可視化的方式進(jìn)行對(duì)比教學(xué),則學(xué)生接受起來(lái)卻要相對(duì)容易的多。作者經(jīng)過(guò)多次的教學(xué)實(shí)踐取得了良好的教學(xué)效果。
參考文獻(xiàn)
[1] 張小莉,敬西.VisualFoxPro程序設(shè)計(jì)實(shí)例教程[M].重慶:重慶大學(xué)出版社,2009.
[2] 王娟,祝群喜,盛娟.數(shù)據(jù)庫(kù)基礎(chǔ)及Visual FoxPro程序設(shè)計(jì)教程[M].沈陽(yáng):東北大學(xué)出版社,2012.endprint