MySQL 学习笔记 ——5、用通配符进行过滤

LIKE 操作符

通配符(wildcard):用来匹配值的一部分的特殊字符

搜索模式(search pattern):由字面值、通配符或者两者组合构成的搜索条件

不管是匹配一个值还是多个值,检验大于还是小于已知值,或者检查某个范围的值,其共同特点是过滤中使用的值都是已知的
但是有时侯,已知条件并不是这么明确,需要模糊一点匹配条件;这时候就需要使用通配符

利用通配符,可以创建比较特定数据的搜索模式

通配符本身实际上,是 SQL 的 WHERE 子句中含有特殊含义的字符
为了在搜索子句中使用通配符,必须使用 LIKE 操作符
LIKE 操作符指示 DBMS,后跟的搜索模式利用通配符匹配,而不是简单的相等匹配进行比较

通配符搜索只能用于文本字段(字符串),非文本数据类型字段不能使用通配符搜索

谓语(predicate):操作符何时不是操作符?当它作为谓语时。

从技术上说,LIKE 是谓语而不是操作符


百分号(%)通配符

在搜索串中,% 表示任何字符出现任意次数
任意次数指,除了表示一个或者多个字符外,还可以表示 0 个字符

图1

这里使用了搜索模式 ‘TNT%’ ;在执行这条子句时,将检索任意以 TNT 开头的词,% 告诉 DBMS 接受 TNT 之后的任意字符,不管它有多少字符

在 mysql 中,搜索时不区分大小写的,但是根据 DBMS 的不同及其配置,搜索是可以区分大小写的

通配符可以在搜索模式中的任意位置使用,并且可以使用多个通配符

例如,在模式的两端使用两个通配符

图2

注意 NULL
通配符 % 看起来可以匹配任何东西,但是不包括 NULL

例如,子句 WHERE prod_name LIKE ‘%’ 不会匹配产品名称为 NULL 的行

注意空格:
尾空格可能会干扰通配符匹配

例如,在保存词 anvil 时,如果它后面有一个或多个空格,则子句 WHERE prod_name LIKE ‘%anvil’ 将不会匹配,因为后面有多余的字符;可以在后面再加一个 % 或者去掉首尾空格


下划线(_)通配符

下划线的用途与 % 是一样的,但是它只匹配单个字符,而不是多个字符

可以比较下面两个代码

SELECT prod_id, prod_name
FROM products
WHERE prod_name LIKE '_ ton anvil';
SELECT prod_id, prod_name
FROM products
WHERE prod_name LIKE '% ton anvil';

tu


方括号([])通配符

方括号用来指定一个字符集,它必须匹配指定位置(通配符的位置)的一个字符
但并不是所有的 DBMS 都支持创建集合的 []

如下子句中,模式为 '[JM]%' ,使用了两个不同的通配符
[JM] 匹配方括号中任意一个字符,它也只能匹配单个字符;任何多于一个字符的名字都不匹配
[JM] 之后的 % 通配符匹配第一个字符之后的任意数目的字符,返回所需的结果

此通配符可以使用前缀字符 ^ (脱字号)来否定
[^JM] 匹配 J和M 之外的任意字符开始的任意联系人名;作用同 NOT

图4


使用通配符的技巧

使用通配符一般比前面说的搜索需要耗费更长的时间,因此

  • 不要过度使用通配符,如果其他操作符可以达到相同的目的,就使用其他的操作符
  • 在确实需要使用通配符时,尽量不要把它们用在搜索模式的开始处,把通配符置于开始处,搜索最慢
  • 注意通配符的位置,一旦放错,返回数据会出错
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值