本文主要讲的是SQL中通配符的相关知识和使用方法。
之前介绍的所有的数据过滤操作都是针对已知值进行�的。但是,这种过滤方法不是任何时候都好用。比如当需要搜索产品名中包含文本“Hello”的所有产品,用简单的比较操作符肯定没法做到,这时就需要用到本文讲的通配符。� 通配符 是用来匹配值的一部分的特殊字符,利用通配符,可以创建比较特定数据的搜索模式。关于搜索模式需要解释一下, 搜索模式 指的是由字面值、通配符或两者组合构成的�搜索条件。
通配符本身实际上是SQL的WHERE子句中有特殊含义的字符,SQL支持几种通配符。在句子中使用通配符的时候,需要配合LIKE操作符。LIKE操作符指示DBMS,后跟的搜索模式是利用通配符匹配而不是简单的相等匹配进行比较。
�严格意义上来说,LIKE是 谓词 而不是操作符。这种说法有点像我们学语文的时候分析句子的结构里的”谓语“,所以,LIKE也不能单独使用。还有一点需要注意的是,通配符搜索只能用于文本字段(字符串),非文本字段不能使用通配符搜索。
MySQL支持百分号(%)和下划线(_)这两种通配符,下面来看看这两种通配符的用法和区别。
百分号( % )通配符
在一般的使用中,百分号( % )通配符是最常用的。在搜索串中,% 表示任何字符出现任意次数。下面来看下如何使用,现在要找出所有以“Fish”起头的产品:
SELECT prod_id, prod_name
FROM Products
WHERE prod_name LIKE 'Fish%';
结果如下:
可以看到,这条语句检索了任意以"Fish"起头的�产品名称,并且 % 匹配的是任意字符,不管有多少个。
根据DBMS的不同以及其配置,搜索可以是区分大小写的,如果是区分大小写的话,上面的查询语句就不会返回值了。MySQL是不区分大小写的。
通配符可以在搜索模式�中的任意位置使用,并且可以使用多个通配符。下面的例子来看一下使用两个通配符的情况:
SELECT prod_id, prod_name
FROM Products
WHERE prod_name LIKE '%bean bag%';
结果如下:
这条语句会搜索任何位置上包含文本'bean bag'的值,不论它之前或者之后出现什么字符。
在日常的使用中,通过通配符来匹配Email地址是一个非常有效的方法,比如 WHERE email LIKE 'a%@example.com'
。
需要特别注意的是,% 不仅可以匹配1个或者多个字符,还可以匹配0个字符。还有一点就是,% 号无法匹配 NULL,就像之前说过的一样,DBMS不知道NULL将会代表什么。
下划线( _ )通配符
另一个需要介绍的是下划线 _ 通配符。_ 的用法和 % 一样�,区别在于它只匹配单个字符。
�先看下面这个例子:
SELECT prod_id, prod_name
FROM Products
WHERE prod_name, LIKE '__ inch teddy bear';
结果如下:
这个SQL语句检索出了开头�是两个字符的prod_name,�需要注意的地方就是需要匹配多少个字符就用多少个下划线。可以使用 % 通配符对照一下效果:
SELECT prod_id, prod_name
FROM Products
WHERE prod_name LIKE '% inch teddy bear';
结果如下:
这个结果可以充分的说明� _ 和 % 的区别。
以上简单的介绍了一下这两种通配符的用法和区别。
SQL的通配符使用起来很方便,功能也很强大,但是代价就是通配符搜索一般来说会比之前介绍过的搜索耗费更长的时间。所以有一些通配符的使用技巧需要了解:
- 不要刻意的使用通配符。如果其他操作符能达到相同目的,应该使用其它操作符。
- 当必须使用通配符时,尽量不要把它们放在搜索模式开始的地方,因为把通配符放在开始的地方,搜索的效率是最慢的。
- 最后需要注意的,也是最重要的,就是一定要注意通配符的位置和数量,因为一旦出了什么问题,返回的结果可能和预期会有很大的出入。
以上就是本文的所有内容,下一篇文章将会介绍SQL中有关计算字段的知识。