萬用字元過濾
到目前為止,我們講解的資料過濾方式都是針對特定值的過濾,比如“檢索所有年齡為25的所有員工資訊”、“檢索所有工資介於2500元至3800元之間的所有記錄”,但是這種過濾方式並不能滿足一些模糊的過濾方式。比如,檢索所有姓名中含有“th”的員工或者檢索所有姓“王”的員工,實現這樣的檢索操作必須使用萬用字元進行過濾。
SQL中的萬用字元過濾使用LIKE關鍵字,可以像使用OR、AND等操作符一樣使用它,它是一個二元操作符,左表示式為待匹配的欄位,而右表示式為待匹配的萬用字元表示式。萬用字元表示式由萬用字元和普通字元組成,主流資料庫系統支援的萬用字元有單字元匹配和多字元匹配,有的資料庫系統還支援集合匹配。
- 單字元匹配
進行單字元匹配的萬用字元為半形下劃線“”,它匹配單個出現的字元。比如萬用字元表示式“b_d”匹配第一個字元為b、第二個字元為任意字元、第三個字元為d的字串,“bed”、“bad”都能匹配這個表示式,而“bd”、“abc”、“build”等則不能匹配這個表示式;萬用字元表示式“_oo”匹配第一個字元為任意字元、第二個字元為o、第三個字元為o、第四個字元為任意字元的字串,“look”、“took”、“cool”都能匹配這個表示式,而“rom”、“todo”等則不能匹配這個表示式。
下面來演示一下單字元匹配的用法。我們來檢索T_Employee表中FName欄位匹配如下規則的資料行:以任意字元開頭,剩餘部分為“erry”。根據萬用字元表示式語法,我們得知這個匹配規則對應的萬用字元表示式為“_erry”,因此編寫如下的SQL:
SELECT * FROM T_Employee WHERE FName LIKE "_erry"
執行完畢我們就能在輸出結果中看到下面的執行結果:
“Jerry”、“Kerry”兩個字串能夠匹配萬用字元表示式“_erry”,所以被顯示到了結果集中,而其他資料行則由於不匹配此萬用字元表示式,所以被過濾掉了。
單字元匹配在萬用字元表示式中可以出現多次,比如我們要檢索長度為4、第三個字元為“n”、其它字元為任意字元的姓名。根據萬用字元表示式語法,我們得知這個匹配規則對應的萬用字元表示式為“_n”(注意前兩個字元為連續的兩個下劃線),那麼需要編寫如下的SQL:
SELECT * FROM T_Employee WHERE FName LIKE "__n_"
執行完畢我們就能在輸出結果中看到下面的執行結果:
- 多字元匹配
使用下劃線可以實現“匹配長度為5、以ab開頭、剩餘字元任意”的功能,而對於“匹配以k開頭,長度不限,剩餘字元任意”這樣的需求則無法滿足,這時就需要使用多字元匹配了。進行多字元匹配的萬用字元為半形百分號“%”,它匹配任意次數(零或多個)出現的任意字元。比如萬用字元表示式“k%”匹配以“k”開頭、任意長度的字串,“k”、“kerry”、“kb”都能匹配這個表示式,而“ark”、“luck”、“3kd”等則不能匹配這個表示式;配符表示式“b%t”匹配以“b”開頭、以“t”結尾、任意長度的字串,“but”、“bt”、“belt”都能匹配這個表示式,而“turbo”、“tube”、“tb”等則不能匹配這個表示式。
下面來演示一下多字元匹配的用法。我們來檢索T_Employee表中FName欄位匹配如下規則的資料行:以“T”開頭長度,長度任意。根據萬用字元表示式語法,我們得知這個匹配規則對應的萬用字元表示式為“T%”,因此編寫如下的SQL:
-
SELECT * FROM T_Employee WHERE FName LIKE "T%"
執行完畢我們就能在輸出結果中看到下面的執行結果:
接著我們來檢索姓名中包含字母“n”的員工資訊,編寫如下SQL:
*
SELECT * FROM T_Employee WHERE FName LIKE "%n%"
執行完畢我們就能在輸出結果中看到下面的執行結果:
單字元匹配和多字元匹配還可以一起使用。我們來檢索T_Employee表中FName欄位匹配如下規則的資料行:最後一個字元為任意字元、倒數第二個字元為“n”、長度任意的字串。
根據萬用字元表示式語法,我們得知這個匹配規則對應的萬用字元表示式為“%n_”,因此編寫如下的SQL:
-
SELECT * FROM TEmployee WHERE FName LIKE "%n"
```
執行完畢我們就能在輸出結果中看到下面的執行結果: