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