SQL语句中find_in_set、like、in的区别及使用方法

find_in_set(str,strlist)函数

    str  要查询的字符串

      strlist  字段名, 参数以“,”分割  如(1,2,3,4)

     查询字段(strlist)中包含(str)的结果,返回结果为null,或者记录。

基本语法使用

   1、in查询相当于多个or条件的叠加。例如:

         select  *  from  user  where  user_id  in  (1,2,3);

        等效于

         select  *  from  user  where  user_id = 1 or user_id = 2 or user_id = 3

        not  in 与 in相反

     2、+---+--------+

          | id | follow_id |

          +----+-------+

          |   1 | 14,15 |

           | 2  |  13       |

         这时,select  * from  test where  find_in_set('5',follow_id);这样是查不到的,返回值为null,因为follow_id中没有“5”这个值,它不同于like模糊查询,它是以“,”来分割。

         如果使用like查询,查询结果为id=1的一条记录。

sql中like用法,可以参考 :http://blog.sina.com.cn/s/blog_a74f39a201018jal.html

总结:

find_in_set与like的区别

     like是广泛的模糊匹配,字符串中没有分隔符,find_in_set是精确匹配,字段值以英文“,”分隔,find_in_set查询的结果要小于like查询的结果。

find_in_set与in的区别

     select * from table_name  where  'test' in (list);

        select * from table_name  where  find_in_set('test',list);

        所以如果list是常量,则直接用in;如果list是变量,则要使用find_in_set()函数。


 

    



  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
FIND_IN_SET和LIKE都是MySQL常用的字符串匹配函数,但它们的匹配方式不同。 FIND_IN_SET函数用于在一个逗号分隔的字符串列表查找一个字符串,并返回它在列表的位置。它的语法如下: ``` FIND_IN_SET(str, strlist) ``` 其,str是要查找的字符串,strlist是逗号分隔的字符串列表。如果找到了,返回值是该字符串在列表的位置(从1开始),否则返回0。 举个例子,假设有一个表t,其有一个字段name,它的值是逗号分隔的字符串列表,如下所示: ``` id name 1 apple,banana,orange 2 banana,pear 3 orange,grape,apple ``` 如果我们要查找name字段包含"apple"的记录,可以使用FIND_IN_SET函数,如下所示: ``` SELECT * FROM t WHERE FIND_IN_SET('apple', name) > 0; ``` 这条SQL语句的意思是,在表t查找name字段包含"apple"的记录。由于"apple"在第1个位置,所以返回的结果是id为1和3的两条记录。 而LIKE函数则是用于模糊匹配的,它可以在字符串查找指定的模式。它的语法如下: ``` SELECT * FROM table WHERE column LIKE pattern; ``` 其,table是要查询的表名,column是要查询的字段名,pattern是要匹配的模式。pattern可以使用通配符%,表示任意字符,可以出现0次或多次;也可以使用下划线_,表示任意单个字符。 举个例子,假设有一个表t,其有一个字段name,它的值是字符串,如下所示: ``` id name 1 apple 2 banana 3 orange ``` 如果我们要查找name字段以"a"开头的记录,可以使用LIKE函数,如下所示: ``` SELECT * FROM t WHERE name LIKE 'a%'; ``` 这条SQL语句的意思是,在表t查找name字段以"a"开头的记录。由于"apple"和"orange"都以"a"开头,所以返回的结果是id为1和3的两条记录。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值