張繼德
【摘要】SQL語言是數據庫原理、數據庫應用等課程的核心內容,也是這些課程的重點及難點,本文結合SQL語言在實際工程中的應用,從教學內容取舍、教學過程等方面,提出了一些應對策略。
【關鍵詞】數據庫應用SQL語言教學教學內容
【基金項目】河北聯合大學教改資助項目,項目編號Z1108-08。
【中圖分類號】G64 【文獻標識碼】A 【文章編號】2095-3089(2014)06-0144-01
SQL(Structured Query Language)語言作為數據庫的標準操作語言,在基于數據庫的應用系統開發中應用十分廣泛,SQL語言也是數據庫應用、數據庫原理、多種開發工具類課程以及畢業設計等實踐環節均會涉及到的內容,并且是這些課程的重點及難點,學生能否掌握及熟練使用SQL語言,是能否進行數據庫應用系統開發的基礎和關鍵。盡管SQL語言具有高度結構化的特點,基本的SQL語句語法也并不復雜,通過教師的講解絕大多數學生都能夠理解,但是要弄懂全部的語法結構并將SQL語句靈活應用于實際項目,卻讓很多學生感到力不從心。本文針對SQL語言教學過程中遇到的一些實際問題,提出了解決方法和應對策略。
一、語法過于龐雜,令學生望而卻步。
多數教材考慮到語法的完整性,會羅列出SQL語句的全部語法,使得看上去相當龐雜,學生很難搞清楚所有的語法構成成分,從而增加了學生的畏難情緒。
比如SQL語句中最常用的SELECT語句的語法如下:
[WITH
SELECT[ ALL | DISTINCT ]
[ TOP expression [ PERCENT ] [ WITH TIES ] ]
[ INTO new_table ]
[ FROM table_source ]
[ WHERE search_condition ]
[ GROUP BY group_by_expression]
[ HAVING search_condition]
[ ORDER BY order_expression [ ASC | DESC ] ]
{*
| { table_name | view_name | table_alias }.*
|{column_name | [ ] expression | $IDENTITY|$ROWGUID} [ [ AS ] column_alias ]
| udt_column_name [ { . | :: } { { property_name | field_name } | method_name(argument [,...n] ) } ]
| column_alias = expression } [ ,…n ]
面對如此龐雜的語法,很多同學會望而卻步。
筆者針對這個問題,提出如下的解決方法:
1.摒棄完整語法,通過簡單的例子引入最簡單的語法,培養成就感。
興趣是最好的老師,而成就感能有效的提高學生的學習興趣。所以在學習SQL語言的過程中,應該摒棄復雜的SQL語法,讓學生很快并經常性的體驗到成就感,樹立起學生對學好SQL語言的信心。
例如通過查詢學生基本信息的示例“SELECT 學號,姓名 FROM 學生表”入手,總結出最簡單的SELECT語句語法為:
SELECT 列名1,列名2,…, 列名n FROM表名
然后通過逐步加深應用的需求來逐漸增加語法成分。而極少用到的語法成分,則可不講解。完整的語法結構可以最后給出,并且只講語法符號的含義,而不講語法的含義,感興趣的學生自己閱讀相關參考手冊了解具體含義,教師負責答疑。
2.能用中文表示的語法成分盡量用中文表示。
多數教材考慮到語法的規范性,或者是為了與MSDN保持一致,SQL語句采用全英文語法,使得部分英文不太好的學生產生抵觸情緒。通過筆者實踐,除了關鍵詞外,盡量使用中文形式的語法,會更容易被學生接受。
二、學生不知道如何應用SQL語句解決實際問題。
通過教師講解,多數學生都能掌握基本SQL語句的編寫,但是多數同學不能將所學內容靈活應用于實際項目。比如學生能夠理解函數、自連接等內容,但是給出實際問題時卻不知道如何解決。針對這種問題,筆者結合多年的教學及工程經歷,精心收集、設計了一些數據庫應用的案例,比如超市的進銷存系統、公司的財務管理系統、學校的學生成績管理系統、網站的后臺管理等,讓學生將所學內容與工程實際緊密結合起來,著手處理和解決實際應用問題。
如:在進銷存系統中,銷售單表(產品編碼, 產品名稱, 銷售單號, 數量,單價,金額),有類似表1的統計要求。
表1 銷售情況統計表
產品編碼:0001 產品名稱:聯想筆記本電腦
解1 使用內連接
select t1.*,(select sum(金額) from銷售單表where 產品編碼=t1.產品編碼 and 銷售單號<=t1.銷售單號)
from 銷售單表t1 where 產品編碼=‘0001
解2 使用標量函數
create function uf_sum(@產品編碼 char(20),@銷售單號 char(20))
returns decimal(12,2)
as
begin
declare @sum decimal(12,2)
select @sum=sum(金額) from 銷售情況統計表 where 產品編碼=@產品編碼 and 銷售單號<=@銷售單號
return @sum
end
select t1.*,dbo.uf_sum(產品編碼,銷售單號)
from 銷售情況統計表 t1 where 產品編碼=‘0001
三、教師講得多,學生練得少。
1.多年來受多種因素的制約,課程評價基本上沿襲以理論考核為主,以閉卷為主。然而,在實際工程中強調的卻是團隊合作、強調充分利用互聯網信息等現代化手段,因此課程考核方式應采取開放式考核、實際項目考核,加大上機考核的比重,實踐性較強的知識點盡量放在上機操作上進行考核,重點測試學生的實踐技能,把任務分解給學生,在上機時獨立完成。
2.加大上機的比重,上機課時不少于三分之一,甚至可以達到50%。
針對上述問題提出的解決方案,經過教學實踐檢驗,提高了學生解決實踐問題的能力,收到了較好的教學效果。