mysql必知必會--用通配符進行過濾

LIKE 操做符

前面介紹的全部操做符都是針對已知值進行過濾的。不論是匹配一
個仍是多個值,測試大於仍是小於已知值,或者檢查某個範圍的值,共
同點是過濾中使用的值都是已知的。可是,這種過濾方法並非任什麼時候
候都好用。例如,怎樣搜索產品名中包含文本anvil的全部產品?用簡單
的比較操做符確定不行,必須使用通配符。利用通配符可建立比較特定
數據的搜索模式。在這個例子中,若是你想找出名稱包含anvil的全部產
品,可構造一個通配符搜索模式,找出產品名中任何位置出現anvil的產
品。函數

通配符(wildcard) 用來匹配值的一部分的特殊字符。
搜索模式(search pattern)由字面值、通配符或二者組合構
成的搜索條件。
通配符自己實際是SQL的 WHERE 子句中有特殊含義的字符,SQL支持幾
種通配符。爲在搜索子句中使用通配符,必須使用 LIKE 操做符。 LIKE
指示MySQL,後跟的搜索模式利用通配符匹配而不是直接相等匹配進行比較。工具

謂詞 操做符什麼時候不是操做符?答案是在它做爲謂詞(predi-
cate)時。從技術上說, LIKE 是謂詞而不是操做符。雖然最終
的結果是相同的,但應該對此術語有所瞭解,以避免在SQL文檔
中遇到此術語時不知道測試

百分號( % )通配符

最常使用的通配符是百分號( % )。在搜索串中, % 表示任何字符出現
任意次數。例如,爲了找出全部以詞 jet 起頭的產品,可以使用如下 SELECT
語句:
3d

此例子使用了搜索模式 'jet%' 。在執行這條子句時,將檢索任
意以 jet 起頭的詞。 % 告訴MySQL接受 jet 以後的任意字符,不
管它有多少字符
區分大小寫 根據MySQL的配置方式,搜索能夠是區分大小
寫的。若是區分大小寫, 'jet%' 與 JetPack 1000 將不匹配blog

通配符可在搜索模式中任意位置使用,而且可使用多個通配符。
下面的例子使用兩個通配符,它們位於模式的兩端

搜索模式 '%anvil%' 表示匹配任何位置包含文本anvil的值,而
不論它以前或以後出現什麼字符。
通配符也能夠出如今搜索模式的中間,雖然這樣作不太有用。下面
的例子找出以 s 起頭以 e 結尾的全部產品:
文檔

注意尾空格 尾空格可能會干擾通配符匹配。例如,在保存詞
anvil 時,若是它 後面有一個或多個空格,則子句 WHERE
prod_name LIKE '%anvil' 將不會匹配它們,由於在最後的 l
後有多餘的字符。解決這個問題的一個簡單的辦法是在搜索模
式最後附加一個 % 。一個更好的辦法是使用函數(第11章將會
介紹)去掉首尾空格
注意NULL 雖然彷佛 % 通配符能夠匹配任何東西,但有一個例
外,即 NULL 。即便是 WHERE prod_name LIKE '%' 也不能匹配
用值 NULL 做爲產品名的行產品

下劃線( _ )通配符

另外一個有用的通配符是下劃線( _ )。下劃線的用途與 % 同樣,但下劃
線只匹配單個字符而不是多個字符
配置


此 WHERE 子句中的搜索模式給出了後面跟有文本的兩個通配
符。結果只顯示匹配搜索模式的行:第一行中下劃線匹配 1 ,
第二行中匹配 2 。 .5 ton anvil 產品沒有匹配,由於搜索模式要求匹配兩
個通配符而不是一個。對照一下,下面的 SELECT 語句使用 % 通配符,返回
三行產品:

與 % 能匹配0個字符不同,_老是匹配一個字符,不能多也不能少搜索

使用通配符的技巧

正如所見,MySQL的通配符頗有用。但這種功能是有代價的:通配
符搜索的處理通常要比前面討論的其餘搜索所花時間更長。這裏給出一
些使用通配符要記住的技巧。技巧

  • 不要過分使用通配符。若是其餘操做符能達到相同的目的,應該
    使用其餘操做符。
  • 在確實須要使用通配符時,除非絕對有必要,不然不要把它們用
    在搜索模式的開始處。把通配符置於搜索模式的開始處,搜索起
    來是最慢的。
  • 仔細注意通配符的位置。若是放錯地方,可能不會返回想要的數
    據。
    總之,通配符是一種極重要和有用的搜索工具,之後咱們常常會用
    到它。

本章介紹了什麼是通配符以及如何在 WHERE 子句中使用SQL通配符, 而且還說明了通配符應該細心使用,不要過分使用。

相關文章
相關標籤/搜索