林健
(中山市三鄉鎮理工學校,廣東 中山 528463)
文章對教材中的一些例題進行了分析,由于教材中使用的數據庫系統與實際使用有一定的差距,因此這些例題不能在一些數據庫中實現,導致了學生上機測試的困難。本文以SQLServer2000為數據庫的實驗平臺,對那些不能實現的例題進行了相應的轉化,給出了同一問題的多種實現方法,設計了針對SQL語言使用的輔助實驗系統。為了進一步提高學生對SQL的實踐能力,介紹了存儲過程和自定義函數的使用。在進行SQL語言教學的過程中,這些方法和措施的實行,已經在數據庫的綜合實驗和項目實踐中都得到很好的體現。
例題是學生學習新概念、領會新知識的一種重要手段,它在整個教學過程中起著非常重要的作用。在教學中,如何根據使用環境的不同,對教材種的例題進行及時的調整顯得尤為重要。在本文中,以SQLServer2000作為數據庫的使用環境,下面通過一些例題來說明教材[1]中的實現方式與實際使用環境的差異性。
【例51】查詢選修了課程1又選修課程2的學生。
教材上給出了如下的表達:

而這種表達方式在SQLServer2000中是無法實現的。在三種集合操作中,只有并操作Union可以以這種方式使用,而交操作Intersect和差操作Except必須通過轉化才能在SQLServer2000中使用。Intersect和Except關鍵字在SQLServer2000中是兩個函數,分別表示兩個集合的交運算和差運算。下面給出【例51】對應的正確代碼:

同樣【例52】的代碼也必須進行轉化。
【例39】查詢與"劉晨"在同一個系學習的學生。
在教材中特別強調子查詢一定要跟在比較符之后,并指出了下列語句

是錯誤的,但是上述語句在查詢分析器中能正常執行,且能給出正確的結果。
由于每個學生思考的途徑不同,可能會對同一個問題有許多不同的解法,在教學中,鼓勵學生自覺探求多種解法,這樣不僅使學生的基礎知識、基本技能得到訓練,而且使學生的思維得到鍛煉,能力得到增強,智力得到開發。
【例21】查詢缺少成績的學生的學號和相應的課程號。

所謂空值是"不知道"或"無意義"的值,"0"和"空格"都不是空值。以上代碼等同于

【例7】將計算機科學系全體學生的成績置零。

習慣上,where后面條件中"="前面是一個字段,而不應該是一個常量,同樣,以上代碼也可以進行相應的轉化

Delete語句的功能是從指定的表中刪除滿足where子句條件的所有元組。如果省略了where子句,表示刪除表中全部元組,但表的定義仍在字典中。也就是說,Delete語句刪除的是表中的數據,而不是關于表的定義。因此當表中的某一字段設為int型,且為自增型的時候,如果刪除了該表中的全部數據。當再插入新的數據時候,自增型字段的數據不是從1開始,而是從刪除數據中的最大值加1開始。為了避免這種情況的產生,在SQLServer2000中提供了Truncate命令。因此必須根據具體情況采用相應的命令。
在講SQL語言使用的時候,傳統的方法只是把例題中每一條語句給學生解釋一遍,這樣教師教起來沒有激情,學生聽起來倍感枯燥。為此,設計了一個針對SQL語言使用的輔助系統,該系統為學生提供了一個上機操作SQL語言的平臺,讓學生通過在線"做"上機實驗,不斷地觀察、交流和反思,從而更好地"學"SQL語言的結構和元素。其輔助系統教學流程如圖:
SQL語言在實際開發應用系統過程中占有非常重要的地位。目前,使用SQL編程來訪問和管理數據庫中數據的方式主要有:嵌入式SQL,PL/SQL,ODBC,JDBC 以及OLEDB編程等方式。下面僅對經常使用的嵌入式SQL和PL/SQL來做進一步分析:

(1)嵌入式SQL::是將SQL語言嵌入程序設計語言中,被嵌入的程序設計語言包括所有的高級語言。但是教材中給出的語句在應用系統的開發過程中使用頻率是相對比較低的,如何將這些思想和某一具體的開發工具相結合,使學生更容易理解這些功能,是教學過程中面臨的一個非常重要的問題。
【例】連接數據庫的語句
ExecSQLConnecttotarget [ASconnetion-name][User user-name]
和關閉數據庫的語句
ExecSQLDisconnect[connection];
這些語句在目前常用的開發工具是很少使用的。目前常用的開發工具中,連接和關閉數據庫是通過開發工具中帶的控件來完成的,如大家熟悉的ADO技術等。
(2)PL/SQL是編寫數據庫存儲過程的一種過程語言,在教材中對存儲過程的介紹比較少,但在實際的應用系統開發中,存儲過程的開發可以極大地提高軟件的可維護性和系統的運行速度。下面給出將兩個字符串連接成一個字符串的例子:
Createprocedurestrconnect@str1varchar(20),@str2
varchar(20),@connectvarchar(40)output As
Select@connect=@str1+@str2
(3)自定義函數。在系統開發過程中,經常發現一些相同的功能在多個地方使用,因此,可以通過自定義函數來完成這一功能。同樣,下面給出一個將兩個字符串連接成一個字符串例子的代碼:

[1]王無恙,馬琳.案例疊進教學在PL/SQL教學中的應用[J].青島職業技術學院學報,2010,01.
[2]王劍,邵斌.SQLServer數據庫教學方法實踐淺析[J].中國市場,2010,31.