mysql in() find_in_set() 函数

in常用于where表达式中,其作用是查询某个范围内的数据,not in与in作用相反。

select * from where field in (value1,value2,value3,…)
select * from where field not in (value1,value2,value3,…)

find_in_set(arg1,arg2)
arg1 要查询字符串或表字段,arg2 可为逗号分隔的字符串或表字段。


常规演示

SELECT  1 in (1,2,3); //1
SELECT  4 in (1,2,3); //0
SELECT FIND_IN_SET(2,'1,2,3')   //2  从1开始
SELECT FIND_IN_SET(4,null) //null  
SELECT FIND_IN_SET(4,'1,2,3')   //0
SELECT FIND_IN_SET(4,'') //0

建表查询演示

CREATE TABLE IF NOT EXISTS tb_student(
	id INT NOT NULL auto_increment ,
	name VARCHAR(255) NOT NULL,
	hobby VARCHAR(255) NOT NULL,
	PRIMARY KEY(`id`)
)ENGINE=INNODB DEFAULT CHARSET=utf8;
INSERT INTO `tb_student` (`name`,`hobby`) VALUES('张三','篮球,羽毛球');
INSERT INTO `tb_student` (`name`,`hobby`) VALUES('李四','篮球,足球');
INSERT INTO `tb_student` (`name`,`hobby`) VALUES('王五','足球,乒乓球');
INSERT INTO `tb_student` (`name`,`hobby`) VALUES('Lisa','篮球,羽毛球,游泳');
INSERT INTO `tb_student` (`name`,`hobby`) VALUES('Tom','网球');
	

在这里插入图片描述

mysql> SELECT * FROM tb_student WHERE id in(1,2);
+----+--------+----------------------+
| id | name   | hobby                |
+----+--------+----------------------+
|  1 | 张三   | 篮球,羽毛球          |
|  2 | 李四   | 篮球,足球,网球       |
+----+--------+----------------------+
2 rows in set (0.01 sec)

mysql> SELECT * FROM tb_student WHERE id in('1','2');
+----+--------+----------------------+
| id | name   | hobby                |
+----+--------+----------------------+
|  1 | 张三   | 篮球,羽毛球          |
|  2 | 李四   | 篮球,足球,网球       |
+----+--------+----------------------+
2 rows in set (0.00 sec)

// 当in 后跟逗号分隔字符串时 查询结果不满足要求
mysql> SELECT * FROM tb_student WHERE id in('1,2');
+----+--------+------------------+
| id | name   | hobby            |
+----+--------+------------------+
|  1 | 张三   | 篮球,羽毛球      |
+----+--------+------------------+
1 row in set, 1 warning (0.00 sec)

//find_in_set可以直接使用逗号分隔字符串参数,l此时效果同 id in(1,2)
mysql> SELECT * FROM tb_student WHERE FIND_IN_SET(id,'1,2');
+----+------+-------------------------+
| id | name | hobby                   |
+----+------+-------------------------+
|  4 | Lisa | 篮球,羽毛球,游泳        |
|  5 | Tom  | 网球                    |
+----+------+-------------------------+
2 rows in set (0.00 sec)

//find_in_set 不局限于int
mysql> SELECT * FROM tb_student WHERE FIND_IN_SET(name,'Lisa,tom');
+----+------+-------------------------+
| id | name | hobby                   |
+----+------+-------------------------+
|  4 | Lisa | 篮球,羽毛球,游泳        |
|  5 | Tom  | 网球                    |
+----+------+-------------------------+
2 rows in set (0.00 sec)


//查询hobby字段中逗号分隔符间有网球的记录
mysql> SELECT * FROM tb_student WHERE FIND_IN_SET('网球',hobby);
+----+--------+----------------------+
| id | name   | hobby                |
+----+--------+----------------------+
|  2 | 李四   | 篮球,足球,网球       |
|  5 | Tom    | 网球                 |
+----+--------+----------------------+
2 rows in set (0.00 sec)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值