《SQL必知必會》筆記(MySQL實現(xiàn))---通配符的使用

本文主要講的是SQL中通配符的相關知識和使用方法。

之前介紹的所有的數(shù)據(jù)過濾操作都是針對已知值進行?的。但是,這種過濾方法不是任何時候都好用。比如當需要搜索產品名中包含文本“Hello”的所有產品,用簡單的比較操作符肯定沒法做到,這時就需要用到本文講的通配符。? 通配符 是用來匹配值的一部分的特殊字符,利用通配符,可以創(chuàng)建比較特定數(shù)據(jù)的搜索模式。關于搜索模式需要解釋一下, 搜索模式 指的是由字面值、通配符或兩者組合構成的?搜索條件。

通配符本身實際上是SQL的WHERE子句中有特殊含義的字符,SQL支持幾種通配符。在句子中使用通配符的時候,需要配合LIKE操作符。LIKE操作符指示DBMS,后跟的搜索模式是利用通配符匹配而不是簡單的相等匹配進行比較。

?嚴格意義上來說,LIKE是 謂詞 而不是操作符。這種說法有點像我們學語文的時候分析句子的結構里的”謂語“,所以,LIKE也不能單獨使用。還有一點需要注意的是,通配符搜索只能用于文本字段(字符串),非文本字段不能使用通配符搜索。

MySQL支持百分號(%)和下劃線(_)這兩種通配符,下面來看看這兩種通配符的用法和區(qū)別。

百分號( % )通配符

在一般的使用中,百分號( % )通配符是最常用的。在搜索串中,% 表示任何字符出現(xiàn)任意次數(shù)。下面來看下如何使用,現(xiàn)在要找出所有以“Fish”起頭的產品:

SELECT prod_id, prod_name
FROM Products
WHERE prod_name LIKE 'Fish%';

結果如下:

百分號通配符-1.png

可以看到,這條語句檢索了任意以"Fish"起頭的?產品名稱,并且 % 匹配的是任意字符,不管有多少個。

根據(jù)DBMS的不同以及其配置,搜索可以是區(qū)分大小寫的,如果是區(qū)分大小寫的話,上面的查詢語句就不會返回值了。MySQL是不區(qū)分大小寫的。

通配符可以在搜索模式?中的任意位置使用,并且可以使用多個通配符。下面的例子來看一下使用兩個通配符的情況:

SELECT prod_id, prod_name
FROM Products
WHERE prod_name LIKE '%bean bag%';

結果如下:

百分號通配符-2.png

這條語句會搜索任何位置上包含文本'bean bag'的值,不論它之前或者之后出現(xiàn)什么字符。

在日常的使用中,通過通配符來匹配Email地址是一個非常有效的方法,比如 WHERE email LIKE 'a%@example.com'。

需要特別注意的是,% 不僅可以匹配1個或者多個字符,還可以匹配0個字符。還有一點就是,% 號無法匹配 NULL,就像之前說過的一樣,DBMS不知道NULL將會代表什么。

下劃線( _ )通配符

另一個需要介紹的是下劃線 _ 通配符。_ 的用法和 % 一樣?,區(qū)別在于它只匹配單個字符。

?先看下面這個例子:

SELECT prod_id, prod_name
FROM Products
WHERE prod_name, LIKE '__ inch teddy bear';

結果如下:

下劃線通配符-1.png

這個SQL語句檢索出了開頭?是兩個字符的prod_name,?需要注意的地方就是需要匹配多少個字符就用多少個下劃線。可以使用 % 通配符對照一下效果:

SELECT prod_id, prod_name
FROM Products
WHERE prod_name LIKE '% inch teddy bear';

結果如下:

下劃線通配符-2.png

這個結果可以充分的說明? _ 和 % 的區(qū)別。

以上簡單的介紹了一下這兩種通配符的用法和區(qū)別。

SQL的通配符使用起來很方便,功能也很強大,但是代價就是通配符搜索一般來說會比之前介紹過的搜索耗費更長的時間。所以有一些通配符的使用技巧需要了解:

  • 不要刻意的使用通配符。如果其他操作符能達到相同目的,應該使用其它操作符。
  • 當必須使用通配符時,盡量不要把它們放在搜索模式開始的地方,因為把通配符放在開始的地方,搜索的效率是最慢的。
  • 最后需要注意的,也是最重要的,就是一定要注意通配符的位置和數(shù)量,因為一旦出了什么問題,返回的結果可能和預期會有很大的出入。

以上就是本文的所有內容,下一篇文章將會介紹SQL中有關計算字段的知識。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容