【MySQL】FIND_IN_SET、LIKE、IN的区别

现在有张新闻表,里面有新闻名称name字段,有新闻类型type字段,1代表头条,2代表推荐,11代表热点,22代表最新,现在表中有两条记录,存储形式如下,现在的需求是查找头条新闻,及type中包含1的:


LIKE函数
【MySQL】FIND_IN_SET、LIKE、IN的区别_第1张图片

  可以看出,把包含11的数据也查出来了,因为它符合查询条件,包含1,所以使用like就不满足这种需求了

IN()函数
【MySQL】FIND_IN_SET、LIKE、IN的区别_第2张图片

   这样查询的结果也不符合要求

【MySQL】FIND_IN_SET、LIKE、IN的区别_第3张图片

  这样查找的结果不符合预期, in 后面应该是真实的数据,只有 数组 在 in后面能找到才行, 不能用字段代替,这也是一大区别


FIND_IN_SET()函数
【MySQL】FIND_IN_SET、LIKE、IN的区别_第4张图片

  可看出,准确查找出了type包含1的记录,完全符合需求(没有把包含11的记录查询出来)

【作用】

  FIND_IN_SET(‘str,’strList’),查找strList字段中包含str结果,返回null或记录

【使用方法】

【MySQL】FIND_IN_SET、LIKE、IN的区别_第5张图片
  • 返回值所在字段的索引位置,索引从1开始;如果没有符合的值,返回0
  • strList中间的值必须以,分隔
  • 当某个字段为NULL时,无论FIND_IN_SET()条件是何种查询条件,字段有为NULL的记录都符合
三者区别
  1. like是广泛的模糊匹配,字符串中没有分隔符
  2. IN 后面是变量,且是模糊查询
  3. Find_IN_SET 是精确匹配,字段值必须以英文”,”分隔,Find_IN_SET查询的结果要小于like查询的结果

你可能感兴趣的:(数据库)