文章目录
通配符wildcard
- 是SQL语句的where子句的特殊字符。
- 要在搜索子句中用通配符,就必须使用like操作符。。牛逼。因为like可以告诉DBMS,后面的搜索模式要用通配符匹配,而不是相等匹配。
- 操作符作为谓词时,就不再是操作符。还不懂,后面说。
- 通配符只可以用于文本,不可以用于数值
%通配符(最常用)
示例1
select prod_id, prod_name
from products
where prod_name like 'Fish%';
而且用小写'fish%'
也搜度成功了,说明mysql不区分大小写,但是别的DBMS也许需要区分哦,根据实现而异
示例2:多次使用通配符
select prod_id, prod_name
from products
where prod_name like '%bean bag%';
示例3:通配符出现在搜索模式中间(不太常用,但是找电子邮件地址很有用)
select prod_id, prod_name
from products
where prod_name like 'F%y';
上图最后一段说的问题在这里没有出现,成功匹配到了fish bean bag toy。可能还是和实现有关,也许mysql自己先去掉了末尾的空格再匹配的。
示例4
select prod_id, prod_name
from products
where prod_name like '%';
而是匹配出来所有的产品了。注意最后一行的那个null是本身显示原因,表示是表的末尾,并不是有一行数据且数据的值为null
_通配符(下划线,只匹配单个字符)
示例1
用了两个通配符_哈
不加空格
select prod_id, prod_name
from products
where prod_name like '__inch teddy bear';
加空格
select prod_id, prod_name
from products
where prod_name like '__ inch teddy bear';
[]通配符(方括号)
搞了半天,原来mysql根本不支持这种集合形式,即下面的代码不报错,但是得不到结果
select cust_contact
from Customers
where cust_contact like '[JM]%'
order by cust_contact;
那就不能练习相关示例了
通配符的使用技巧
- 能不用尽量不用,因为慢
- 用的话,不要把通配符放在搜素模式的起始处,这是最慢的
- 总之,使用通配符应该细心,且不能过度使用。但它真的极其有用