MySQL模糊查询

        数据库查询时,分为精确查询和模糊查询,但是在某些查询,如商品搜索中,精确查询可能查询不到或者类似商品无法搜索到商品,我们往往也记不清商品的全名,此时就需要用到模糊查询了。

一般的模糊查询的SQL语句如下:

select 字段 from 表名 where 列名 like 所需查询的条件;

对于具体的条件匹配方式分为以下几种:
数据库数据如下:
                        在这里插入图片描述

一.’%’:表示0-N个字符

'%'该符号表示在查询时,可以表示0-N个其他的字符。
例如,在上边数据表中我们需要查询姓张的用户,我们可以这样写SQL语句:

select * from test where name like '张%';

查询结果如下:
                        在这里插入图片描述
该SQL语句表示从test这个表中根据name列的信息查询,查询条件为首字符为张的数据。
如果按名字中间的字符进行查询,比如查询名字中间的字符为“二”的信息,SQL语句如下:

select * from test where name like '%二%';

查询结果如下:
                        在这里插入图片描述
如果我们想查询名字中带张和王的信息,可以使用and条件查询,SQL语句如下:

select * from test where name like '%张%' and name like '%王%';

查询结果如下:
在这里插入图片描述
有人会说,查询的时候为什么不写成:

select * from test where name like '%张%王%';

这样的执行结果为:
                        在这里插入图片描述
如果将and两边的条件合并,查询含义为“…张…王…”,查询张在前,王在后的数据,而不是查询名字中含有张并且含有王的数据。
'%'适合当我们只知道所需要查询的数据的部分关键字,并且不知道这些关键字所在位置的时候,方便查询数据。

二、’_’:表示任意单个字符

和’%‘能表示0-N个符号不同,’_'只表示单个的符号。
例如,当我们需要查询姓张用户的数据时,如果写成:

select * from test where name like '张_';

查询结果为:
                        在这里插入图片描述
此时没有查询出任何数据,这是因为我们数据库name列数据都是三个长度,而这个查询只能查询张,然后后面跟一个字符的数据。当把后边面的’_‘改为’__'后:

select * from test where name like '张__';

此时查询结果为:
                        在这里插入图片描述
'_'符号使用时必须清楚所需要查询数据的长度,才可以查询到所需要的数据。

三、’[]’:匹配时从’[]'中的关键字进行匹配

我们在匹配字符串时,经常用到正则表达式,’[]'使用方式和正则表达式方式基本上一样,例如,我们需要同时查询姓张、王、李的用户时,同时限制后二个字为’一张’时,SQL语句如下:

select * from test where name regexp '[张王李]一张';

查询结果如下:
                        在这里插入图片描述

四、’[^]’:匹配不在括号之内的单个字符

‘[^]’ 和上边 ‘’[]’ 用法一样,但是’[]‘匹配的是在’[]'内的字符,而 '[^] '匹配的是不在 ‘[^]’ 内的字符。如,当我们需要查询数据库中非姓张的用户时,同时限制后二个字为’一张’时,SQL语句如下:

select * from test where name regexp '[^张]一张';

查询结果如下:
                        在这里插入图片描述

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值