1.概述
在企業的.NET信息系統中,匹配查詢和模糊查詢使用頻率是非常高的,像百度搜索使用的就是模糊查詢,只要輸入任意1個關鍵字,就可以查詢出來所有與該關鍵字相關的信息。
例如,查詢姓名為李小強的數據,則要使用姓名=李小強進行查詢,這是相等查詢。
什麼是模糊查詢呢?模糊是指只匹配某一個字符或多個字符,然後中間或兩邊為任意字符,這就是模糊查詢,如查詢姓李的學生,則就是模糊查詢。與之匹配的有李小強、李大強、李小花、李一鳴等。
2.使用模糊查詢
在SQL Server中,模糊查詢要使用like在Where條件中進行查詢。在搜索資料庫中的數據時,SQL通配符可以替代一個或多個字符。SQL通配符必須與 LIKE運算符一起使用,LIKE是關鍵字。
SQL通配符有:%、_、[]和[^]。這3個通配符非常重要,一定要清楚每個通配符的代表的具體含義。
2.1. %通配符的使用
在SQL Server中,%通配符在SQL語句中表示任意的0或多個字符。
基本語法如下:
select * fr om 表名 where 欄位名 like '%值%'
注意,在此SQL語句中,like關鍵字後面是帶有單引號的匹配模式,其中包含了2個%通配符,表示在「值」左邊和右邊可以是任意的0個或多個字符。
例如:查詢出BW_Student表中姓名中包含「一」的所有學生。
注意:當提到「包含」這2個字時,就表示模糊查詢。
如下SQL語句:
SELECT TOP 1000 [Id],[Name],[Age],[Sex]FR OM [BW_TestDB].[dbo].[BW_Student]WHERE Name LIKE '%一%'
使用了』%一%』表示在一左邊和右邊可以有任意的0個或多個字符,都可以與之匹配。
運行結果如下:
在這裡使用了:WHERE Name LIKE 『%一%』來實現模糊查詢,LIKE左邊是要進行模糊查詢的欄位名,右邊是使用單引號括起來的模糊查詢的表達式。
%通配符使用的最多,表示任意的0個或多個字符,邊界值限制比較少,因此,廣受.NET開發者喜歡。
2.2. _通配符的使用
在SQL Server中,_在SQL語句中表示任意的1個字符。
基本語法如下:
select * fr om 表名 where 欄位名 like '_值_'
例如:查詢出BW_Student表中所有年齡為20-29(包含20和29)的學生。如下SQL語句:
SELECT * FR OM BW_Student WHERE Age LIKE '2_'
運行結果如下:
由於_可以表示任意的單個字符,所以』2_』表示所有以2開頭且第2個字符為任意字符的字符串都符合要求。總體是匹配的是2個字符組成的字符串。
2.3. []通配符的使用
在SQL Server中,對於[]有兩種使用方法:
1) []表示指定範圍內。
2) [^]表示不在指定的範圍內。
[]只匹配一個字符,並且這個字符必須是[]範圍內的。
如:[0-9]表示匹配0-9之間的任意一個數字,[a-z]表示匹配a-z之間的任意字母。
例如:查詢出年齡為20、21、22、23的學生
select * fr om BW_Student where Age like '2[0,1,2,3]'
或
select * fr om BW_Student where Age like '2[0-3]'
運行一下結果:
在圖3和圖4中,分別使用了[]和[^]通配符來模糊查詢Age列的值。運行後將匹配的結果顯示出來。
2.4. 排序函數Row_Number()的使用
在SQL Server中,使用Row_Number()函數可以在查詢的結果中,為每行數據添加一個行號,這個行號從1開始,常用於序號、排名等。
基本語法如下:
select ROW_NUMBER() over(order by 欄位名desc/asc ) 別名,欄位名1,欄位名2,欄位名n fr om 表名
例如:在BW_Student表中對年齡從大到小排列,並給出一個名次。SQL語句如下:
SELECT ROW_NUMBER() OVER(order by Age desc) 名次,* FR OM BW_Student
運行一下結果:
在圖5中,查詢的結果中多了一個「名次」列,該列就是一個名次列,是一個序號,注意,這個序號是臨時的,並不真實存在資料庫中。
在.NET應用程式的後臺管理系統中,模糊查詢是少不了的,這些通配符也是經常使用的,有的時候還會在C#業務邏輯中處理後,再通過ADO.NET技術發送給用戶,這樣用戶得的結果更精準。