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