LIKE 運算子
前面介紹的所有運算子都是針對已知值進行過濾的,不管是匹配一
個還是多個值,測驗大于還是小于已知值,或者檢查某個范圍的值,共
同點是過濾中使用的值都是已知的,但是,這種過濾方法并不是任何時
候都好用,例如,怎樣搜索產品名中包含文本anvil的所有產品?用簡單
的比較運算子肯定不行,必須使用通配符,利用通配符可創建比較特定
資料的搜索模式,在這個例子中,如果你想找出名稱包含anvil的所有產
品,可構造一個通配符搜索模式,找出產品名中任何位置出現anvil的產
品,
通配符(wildcard) 用來匹配值的一部分的特殊字符,
搜索模式(search pattern)由字面值、通配符或兩者組合構
成的搜索條件,
通配符本身實際是SQL的 WHERE 子句中有特殊含義的字符,SQL支持幾
種通配符,為在搜索子句中使用通配符,必須使用 LIKE 運算子, LIKE
指示MySQL,后跟的搜索模式利用通配符匹配而不是直接相等匹配進行比較,
謂詞 運算子何時不是運算子?答案是在它作為謂詞(predi-
cate)時,從技術上說, LIKE 是謂詞而不是運算子,雖然最終
的結果是相同的,但應該對此術語有所了解,以免在SQL檔案
中遇到此術語時不知道
百分號( % )通配符
最常使用的通配符是百分號( % ),在搜索串中, % 表示任何字符出現
任意次數,例如,為了找出所有以詞 jet 起頭的產品,可使用以下 SELECT
陳述句:

此例子使用了搜索模式 'jet%' ,在執行這條子句時,將檢索任
意以 jet 起頭的詞, % 告訴MySQL接受 jet 之后的任意字符,不
管它有多少字符
區分大小寫 根據MySQL的配置方式,搜索可以是區分大小
寫的,如果區分大小寫, 'jet%' 與 JetPack 1000 將不匹配
通配符可在搜索模式中任意位置使用,并且可以使用多個通配符,
下面的例子使用兩個通配符,它們位于模式的兩端

搜索模式 '%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通配符,
并且還說明了通配符應該細心使用,不要過度使用,
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/84227.html
標籤:MySQL
上一篇:MySQL服務意外停止
