MySql 匹配集合中的数据
在进行表查询的时候,有时需要在列表(集合)中进行匹配查询,这个时候一般可以用三种方法实现,分别是:
LIKE, IN,FIND_IN_SET()。
LIKE 用法
LIKE 运算符用于 WHERE 表达式中,以搜索匹配字段中的指定内容,语法如下:
WHERE field LIKE pattern
WHERE field NOT LIKE pattern
在LIKE全面加上 NOT 运算符时,表示与 LIKE 相反的意思,即选择 column 不包含 pattern 的数据记录
LIKE 通常与通配符%一起使用,% 表示通配 pattern 中出现的内容,而不加通配符 % 的 LIKE 语法,表示精确匹配,其实际效果等同于 = 等于运算符
1 | CREATE TABLE `test` ( |
IN 用法
IN 常用于 WHERE 表达式中,其作用是查询某个常量范围内的数据。用法如下:
WHERE field IN (value1,value2,value3,…)
WHERE field NOT IN (value1,value2,value3,…)
IN 后面的括号内为常量集合,且各个关键词之间用英文的逗号隔开。
FIND_IN_SET() 用法
FIND_IN_SET 常用于 WHERE 表达式中,其作用是查询某个范围(常量或者字段)内的数据。用法如下:
- WHERE FIND_IN_SET(str,strlist)
- WHERE NOT FIND_IN_SET(str,strlist)
str 既可以是字段,也可以是常量
strlist 既可以是常量集合,也可以是字段,每个关键字之间用英文逗号隔开
1 | -- 在字段集合中查找 |
最佳实践
如果待查询的条件是常量那就使用 IN,是变量则使用 FIND_IN_SET。IN 可以使用索引。
如果使用 IN 和 FIND_IN_SET 都能满足条件,则最好使用 IN,理由同上,特别是查询字段为主键时或有索引时。