一、sql server在存儲(chǔ)過(guò)程中實(shí)現(xiàn)模糊查詢(xún)的方法
1、Wildcard操作符
Wildcard操作符:Wildcard是SQL Server支持的最基本的模糊查詢(xún)操作符,可以使用LIKE和=操作符實(shí)現(xiàn)模糊查詢(xún)。
使用LIKE操作符實(shí)現(xiàn)以“SMIT”為開(kāi)頭的姓名查詢(xún)語(yǔ)句:
SELECT * FROM Customers WHERE LastName LIKE 'SMIT%'
使用=操作符實(shí)現(xiàn)精確匹配查詢(xún)語(yǔ)句:
SELECT * FROM Customers WHERE LastName = 'Smith'
2、between
把某一字段的值在特定范圍內(nèi)的記錄查詢(xún)出來(lái):
select * from ScoreListwhere csharp between 80 and 90 --在ScoreList數(shù)據(jù)庫(kù)中查詢(xún)csharp成績(jī)?cè)?0~90之間的,列出全部列select StudentName, StudentAdress from Studentswhere Birthday between '1972-7-7' and '2022-7-7' --在Students數(shù)據(jù)庫(kù)中查詢(xún)Birthday在1972-7-7到 2022-7-7之間的,列出全部列兩項(xiàng)
3、in
把某一字段中內(nèi)容與所列出的查詢(xún)內(nèi)容列表匹配的記錄查詢(xún)出來(lái):
select StudentName, StudentAdress, Age from Studentswhere Age in (21,22,23) --在Students數(shù)據(jù)庫(kù)中查詢(xún)Age是21,22,23歲的,并列出StudentName和StudentAdress,Age 三項(xiàng)select StudentName, StudentAdress from Studentswhere StudentAdress in ('Eric','Tom','Jack') --在Students數(shù)據(jù)庫(kù)中查詢(xún)StudentName是Eric,Tom,Jack,并列出StudentName和StudentAdress兩項(xiàng)
4、全文搜索
SQL Server提供了全文檢索功能,可以使用CONTAINS函數(shù)進(jìn)行模糊查詢(xún)。
搜索郵件正文中包含“find me”文本的郵件:
SELECT * FROM Email WHERE CONTAINS(Body, 'find me')
5、使用存儲(chǔ)過(guò)程
可以使用存儲(chǔ)過(guò)程實(shí)現(xiàn)模糊查詢(xún),并通過(guò)參數(shù)傳遞查詢(xún)條件。
創(chuàng)建一個(gè)存儲(chǔ)過(guò)程SP_FuzzySearch,根據(jù)輸入的姓名(@Name)進(jìn)行模糊查詢(xún):
CREATE PROCEDURE dbo.SP_FuzzySearch (@Name VARCHAR(50))ASBEGINSELECT *FROM CustomerWHERE Lastname LIKE '%' + @Name + '%'END
然后執(zhí)行存儲(chǔ)過(guò)程:
EXECUTE dbo.SP_FuzzySearch 'Smith'
二、SQL的模糊查詢(xún)通配符
1、%
表示任意0個(gè)或多個(gè)字符。一般在匹配字符串的前后都會(huì)加上%。舉例:匹配含有 “數(shù)據(jù)” 的字符串,可以用,WHERE FieldName LIKE ‘%數(shù)據(jù)%’。如果是匹配首(尾)含某個(gè)字符串的值,則用 數(shù)據(jù)%(%數(shù)據(jù))。
2、_
表示 單個(gè) 任意字符。當(dāng)我們需要限制匹配的字符串的長(zhǎng)度時(shí),可以用 _ 替代。舉例:當(dāng)需要匹配“北”開(kāi)頭的兩個(gè)字符的對(duì)象時(shí),可以用“北_”。
3、[]
羅列待匹配的單個(gè)字符。當(dāng)知道要匹配的對(duì)象的范圍時(shí),我們可以用 [] 羅列這些字符。舉例:當(dāng)語(yǔ)句寫(xiě)為:'[冬西南]瓜’,匹配的是 “冬瓜”,“西瓜”,“南瓜”字符串。'[0-4]’ 匹配的是 0,1,2,3,4。'[a-d]’ 匹配的是 a,b,c,d。對(duì)于通配符的匹配,需要在外層用 [] 括起來(lái)。
4、[^ ] 或者 [! ]
不含所羅列字符的單個(gè)字符(兩種寫(xiě)法)。與第3點(diǎn)相反,用哪種匹配方式取決于匹配的集合哪個(gè)更小。如果匹配字符的集合小,就用 [],如果匹配的集合大,遠(yuǎn)大于不包含集合,則用 [^ ]。舉例:語(yǔ)句 [^冬西南]瓜,匹配的是:甜瓜、香瓜、壞瓜、傻瓜…… 這類(lèi)不含 [冬西南] 的字符。
三、sql語(yǔ)言的特點(diǎn)
1、SQL風(fēng)格統(tǒng)一
SQL可以獨(dú)立完成數(shù)據(jù)庫(kù)生命周期中的全部活動(dòng),包括定義關(guān)系模式、錄入數(shù)據(jù)、建立數(shù)據(jù)庫(kù)、查詢(xún)、更新、維護(hù)、數(shù)據(jù)庫(kù)重構(gòu)、數(shù)據(jù)庫(kù)安全性控制等一系列操作,這就為數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)開(kāi)發(fā)提供了良好的環(huán)境,在數(shù)據(jù)庫(kù)投入運(yùn)行后,還可根據(jù)需要隨時(shí)逐步修改模式,且不影響數(shù)據(jù)庫(kù)的運(yùn)行,從而使系統(tǒng)具有良好的可擴(kuò)充性。
2、高度非過(guò)程化
非關(guān)系數(shù)據(jù)模型的數(shù)據(jù)操縱語(yǔ)言是面向過(guò)程的語(yǔ)言,用其完成用戶(hù)請(qǐng)求時(shí),必須指定存取路徑。而用SQL進(jìn)行數(shù)據(jù)操作,用戶(hù)只需提出“做什么”,而不必指明“怎么做”,因此用戶(hù)無(wú)須了解存取路徑,存取路徑的選擇以及SQL語(yǔ)句的操作過(guò)程由系統(tǒng)自動(dòng)完成。這不但大大減輕了用戶(hù)負(fù)擔(dān),而且有利于提高數(shù)據(jù)獨(dú)立性。
3、面向集合的操作方式
SQL采用集合操作方式,不僅查找結(jié)果可以是元組的集合,而且一次插入、刪除、更新操作的對(duì)象也可以是元組的集合。
4、以同一種語(yǔ)法結(jié)構(gòu)提供兩種使用方式
SQL既是自含式語(yǔ)言,又是嵌入式語(yǔ)言。作為自含式語(yǔ)言,它能夠獨(dú)立地用于聯(lián)機(jī)交互的使用方式,用戶(hù)可以在終端鍵盤(pán)上直接輸入SQL命令對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作。作為嵌入式語(yǔ)言,SQL語(yǔ)句能夠嵌入到高級(jí)語(yǔ)言(如C、C#、JAVA)程序中,供程序員設(shè)計(jì)程序時(shí)使用。而在兩種不同的使用方式下,SQL的語(yǔ)法結(jié)構(gòu)基本上是一致的。這種以統(tǒng)一的語(yǔ)法結(jié)構(gòu)提供兩種不同的操作方式,為用戶(hù)提供了極大的靈活性與方便性。
5、語(yǔ)言簡(jiǎn)潔,易學(xué)易用
SQL功能極強(qiáng),但由于設(shè)計(jì)巧妙,語(yǔ)言十分簡(jiǎn)潔,完成數(shù)據(jù)定義、數(shù)據(jù)操縱、數(shù)據(jù)控制的核心功能只用了9個(gè)動(dòng)詞:CREATE、ALTER、DROP、SELECT、INSERT、UPDATE、DELETE、GRANT、REVOKE。且SQL語(yǔ)言語(yǔ)法簡(jiǎn)單,接近英語(yǔ)口語(yǔ),因此容易學(xué)習(xí),也容易使用。
延伸閱讀1:結(jié)構(gòu)化查詢(xún)語(yǔ)言
結(jié)構(gòu)化查詢(xún)語(yǔ)言(Structured Query Language)簡(jiǎn)稱(chēng)SQL,是一種特殊目的的編程語(yǔ)言,是一種數(shù)據(jù)庫(kù)查詢(xún)和程序設(shè)計(jì)語(yǔ)言,用于存取數(shù)據(jù)以及查詢(xún)、更新和管理關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)。結(jié)構(gòu)化查詢(xún)語(yǔ)言是高級(jí)的非過(guò)程化編程語(yǔ)言,允許用戶(hù)在高層數(shù)據(jù)結(jié)構(gòu)上工作。它不要求用戶(hù)指定對(duì)數(shù)據(jù)的存放方法,也不需要用戶(hù)了解具體的數(shù)據(jù)存放方式,所以具有完全不同底層結(jié)構(gòu)的不同數(shù)據(jù)庫(kù)系統(tǒng), 可以使用相同的結(jié)構(gòu)化查詢(xún)語(yǔ)言作為數(shù)據(jù)輸入與管理的接口。結(jié)構(gòu)化查詢(xún)語(yǔ)言語(yǔ)句可以嵌套,這使它具有極大的靈活性和強(qiáng)大的功能。