
摘要:數據庫原理是數據庫技術理論知識的基礎課程,使用SQL語言可以完成數據庫的結構化查詢。文章主要圍繞數據查詢中的模糊查詢展開討論,并結合“問題式”教學方法來幫助學生如何根據查詢條件的不同構造匹配串,繼而完成查詢操作。“問題式”方法在模糊查詢的教學過程中,激發了學生的學習興趣,開拓了他們的創新思維。
關鍵詞:數據庫;SQL;模糊查詢;“問題式”教學
中圖分類號:G642 ? ? ? ?文獻標識碼:A
文章編號:1009-3044(2022)05-0032-02
數據庫原理是計算機專業的一門重要的必修課,具有理論性、實踐性強的特點,其理論與應用相輔相成、相互依賴。課程的教學目標是讓學生理解數據庫系統(DBS)的基本理論概念,掌握數據庫系統設計、查詢、更新、優化的基本方法,具備利用現有的DBMS進行一定的數據庫系統設計及應用開發能力。
SQL(Structured Query Language) ,即結構化查詢語言,是數據庫應用開發的標準語言[1]。熟練掌握SQL可以在數據庫的實際應用開發時起到事半功倍的效果。SQL語言提供了SELECT語句進行數據庫的查詢,其中在查詢時可以對指定的屬性值進行字符串的匹配查詢,即模糊查詢。模糊查詢是學生學習過程中較難理解掌握的知識點。傳統的教學主要以教師的“灌輸式”講授方式為主,學生很難融會貫通地理解應用這部分內容[2]。
提問是能夠引導學生進行思考的最直接的一種方式,在數據庫原理課程的教學過程中教師根據教材的知識點提出相應問題,讓學生在尋求,探索解決問題的思維活動中,掌握知識、發展智力、培養技能,進而引發學生的思考,提高學生的自主學習能力[3]。筆者結合多年來講授數據庫原理課程的教學實踐,體會到模糊查詢采用“問題式”教學來推動課堂,可以讓學生在問題求解的過程中掌握理論知識,更能激發學生的學習興趣,逐步形成主動提出問題、解決問題的學習習慣[4]。
下面介紹一下筆者在數據庫原理課程中采用“問題式”教學方法在數據庫原理SQL語言模糊查詢中的應用。
1 SQL中模糊查詢語句格式
在SQL中模糊查詢一般用謂詞LIKE來實現,其一般的查詢語句格式如下[1]:
SELECT [ALL|DISTINCT]<目標列表達式>[,<目標列表達式>]…
FROM <表名或視圖名>[,<表名或視圖名>]…
WHERE 屬性列 [NOT] LIKE‘匹配串’[ESCAPE‘換碼字符’]
其中<匹配串>可以是一個完整的字符串,也可以是含有通配符的字符串,查詢過程中可以實現查找指定屬性值與<匹配串>相匹配的元組。針對不同的模糊查詢問題,如何去構造查詢“匹配串”?下面將以一個學生基本信息關系為例,進行相應的模糊問題設置及解答。
2 基于不同匹配模式進行“問題式”模糊查詢
假定學生信息表(student)如表1所示。
(其中:Sno為學號,Sname為姓名,Ssex為性別,Sage為年齡,Sdept為專業,Class為班級)
SQL中通常“%”和“_”兩種通配符來構造匹配串完成模糊查詢,具體如何應用呢?
1)“%”:表示任意0個或多個字符,可匹配任意類型和長度的字符,授課中提出以下幾類問題:
①如何查詢某一姓(如姓 “張”)的同學的詳細信息?
對于該問題,引導學生觀察student表,姓名字段的元組值里,“張”姓同學的姓名中有兩字的(張強)、有三字的(張雪麗),還有更多字的情況,讓學生試著構造匹配串“張%”,繼而寫出查詢語句:
SELECT ?*
FROM ?student
WHERE sname LIKE '張%'
②如何查詢姓名中含有某一個字(如“雪”)的同學的詳細信息?
對于這樣的題目,讓學生先觀察表中的學生姓名,包含“雪”的姓名如“王麗雪”“張雪麗”,會發現“雪”字在姓名中的位置不確定,根據這個特點,構造出匹配串“%雪%”,可以寫出查詢語句:
SELECT ?*
FROM ?student
WHERE ?sname LIKE '%雪%'
③如何查詢姓名中既有某字(如“雪”)又有另外某字(如“麗”)的同學的詳細信息?
對于這個題目,學生根據自己的理解構造出匹配串“%雪%麗”,然后寫出如下查詢語句:
SELECT ?*
FROM ?student
WHERE ?sname ?LIKE '%雪%麗'
可是這樣查詢的結果只能搜索出“張雪麗”,但搜不出符合條件的“王麗雪”。此時將原問題再次向學生提出,并引導學生構造出匹配串“%雪%”“%麗%”,提醒學生用多條件查詢完成查詢語句:
SELECT ? *
FROM ? student
WHERE ?sname LIKE '%雪%' ?AND ?sname LIKE '%麗%'
2)“_”: 表示任意單個字符,可以匹配單個任意字符,常常用來限制表達式的字符長度。此時可以提出查詢固定字符長度的同學信息的問題。
①如何查詢姓名為三個字的姓張的同學信息?
對于固定長度的字符串構造時,提醒學生注意數據庫字符集的類型,如果是ASCII時一個漢字需要兩個“_”,是GBK時只需要一個“_”[1],一般采用后者。結合題意引導學生構造出匹配串“張_ _”,然后完成查詢語句:
SELECT ?*
FROM ?student
WHERE ?sname ?LIKE ‘張_ _’
②如何查詢姓名為三個字且中間一個字為“雪”的同學信息?
姓名長度為三個字且第二個字為“雪”,學生分析前面所學知識構造出匹配串“_雪_”,具體的查詢語句:
SELECT ?*
FROM ? student
WHERE ?sname ?LIKE ‘_雪_’
3)“[ ] ”:表示括號內所列字符中的一個,指定一個字符、字符串或范圍,要求所匹配對象為它們中的任意一個,可以提出如下問題:
①如何查詢指定幾個具體姓(如姓王、張、李)的同學信息?
根據題意學生會構造出匹配串“王%”“張%”“李%”,并寫出相應的查詢語句:
SELECT ?*
FROM ?student
WHERE ?sname ?LIKE '王%' or sname like '李%' or sname like ‘張%’
當然,上述查詢語句能夠實現查詢問題,但是如何用“[ ]”來完成相同問題呢?將問題再次提出,引導學生構造出匹配串“[王張李]%”,書寫查詢語句:
SELECT *
FROM ?student
WHERE ?sname ?LIKE '[王李張]%'
②如何查詢計算機專業學號連續(如學號尾號為01-09)的同學信息?
如果是查詢一系列字符(01234、abcde之類的),可以使用“[ ]”內略寫的形式來表達([0-4]、[a-e])。對照的學生信息表,根據計算機專業學生的學號信息構造出匹配串“201612060[1-9]”,具體的查詢語句:
SELECT ?*
FROM ?student
WHERE ?sno ?LIKE '201612060[1-9]'
③如何查詢不在指定的具體姓(如姓王、張、李)范圍內的同學信息?
“[ ]” 表示括號內所列字符中的一個,那如何用“[ ]”表示不在制定的范圍內呢?根據前面所學知識,學生會選用not like[ ]語句,除此之外,還可以用[^ ]來表示。 [^]:表示不在括號所列之內的單個字符,其取值和 [ ] 相同,但它要求所匹配對象為指定字符以外的任意一個字符。根據題意寫出查詢語句:
SELECT *
FROM student
WHERE sname ?like ‘[^王張李]%’
4)ESCAPE:換碼字符,用來將查詢內容中的通配符轉義為普通字符。
如學生信息表所示,學生的班級信息本身就含有“_”,如果要查詢班級信息(如信息_1)時如何構筑查詢匹配串呢?當查詢的字符串本身就含有通配字符“_”“%”時,需要使用ESCAPE‘<換碼字符>’短語將通配符轉義為普通字符的“_”“%”。所以對于查詢“信息_1”構筑的匹配串為“‘信息\_1’ESCAPE‘\’”,由此寫出查詢語句:
SELECT ?*
FROM ?student
WHERE ?class ?like ‘信息\_1’ ESCAPE ‘\’
3 總結
通過“問題式”教學在數據庫原理模糊查詢中的應用,打破了傳統 “灌輸式”教學方法中學生被動接受的狀況。教學中學生在求解問題的過程中,逐漸養成了獨立思考、自主解決問題的好習慣,同時在整個教學活動中,不少學生能夠主動提出新的思考問題,讓大家一起解決,達到了一定的創新能力。通過用“問題”助推數據庫原理SQL語言的模糊查詢達到了良好的教學效果。
參考文獻:
[1] 王珊,薩師煊.數據庫系統概論[M]. 5版.北京:高等教育出版社,2014.
[2] 劉倩,冀亞麗,翁梅.數據庫原理課程中SQL語言的檢索分析[J].數字技術與應用,2012(10):104-105.
[3] 李成.啟發式教學法在數據庫原理與應用課程中的應用與研究[J].現代職業教育,2020(7):162-163.
[4] 劉婧.問題式教學在《數據庫系統原理》教學中的應用探討[J].中國成人教育,2011(6):134-135.
【通聯編輯:王力】
收稿日期:2021-05-27
基金項目:淮北師范大學教研項目(2020xjxyj029);淮北師范大學教育信息化項目(2020xjyxxh001);淮北師范大學教研項目(2020xjxyj010);安徽省高等學校自然科學研究項目(KJ2020B17)
作者簡介:朱秀英(1981—),女,山東淄博人,講師,碩士,研究方向為計算機應用,GPS數據處理。