数据库查询时,分为精确查询和模糊查询,但是在某些查询,如商品搜索中,精确查询可能查询不到或者类似商品无法搜索到商品,我们往往也记不清商品的全名,此时就需要用到模糊查询了。
一般的模糊查询的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 '[^张]一张';
查询结果如下: