前面介紹的所有操作符都是針對已知值進行過濾的。不管是匹配一
個還是多個值,測試大於還是小於已知值,或者檢查某個範圍的值,共
同點是過濾中使用的值都是已知的。但是,這種過濾方法並不是任何時
候都好用。例如,怎樣搜尋產品名中包含文字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萬用字元,
並且還說明了萬用字元應該細心使用,不要過度使用。
mysql必知必會 mysql必知必會(四)
十四 理解子查詢 1 通過子查詢過濾 這本書在所有的章節都關連到了資料庫表,訂單資料是儲存在兩個表中,orders表儲存著 訂單號碼 顧客id和訂單日期。個人的訂單列表關連著orderitems表,訂單表沒有儲存顧客資訊,它只是儲存著顧客id,這實際的顧客資訊是儲存在customers表中。現在假設...
mysql的必知必會 mysql 必知必會 筆記
好久沒有寫了。1 show columns from table 等同於describe table顯示的是表的結構。而select from table 則顯示的是整個表中插入的資料。2 select distinct c1,c2 from table除非列不相同,否則所有行將被檢索出來,即不能對...
mysql必知必會
一周了,總想寫點什麼,有的時候進步真的很難在一周顯示出來,週三的時候,我跟我的領導說,好快啊,又週三了,不知不覺,他說是啊,現在對於他來說,有時候他過一天可能跟我過一周的感覺差不多,每天都在忙,時間過的特別快,也沒有感覺做出來點什麼,當然實際肯定是怎麼做了一些東西的,是否我以後也會如此呢?說說技術把...