in作为查询条件,一般典型有两种用法:
创新互联建站专注于企业全网营销推广、网站重做改版、通渭网站定制设计、自适应品牌网站建设、H5建站、商城开发、集团公司官网建设、外贸营销网站建设、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为通渭等各大城市提供网站开发制作服务。
一是IN常量,例如下面语句查询一、三年级的学生:
SELECT * FROM student WHERE grade IN ('一','三');
二是使用子查询,也就是IN(SQL语句),例如下面的语句查询不及格的班级的所有学生:
SELECT * FROM student WHERE classno IN (
select classno from scores where score60
);
1.in 后面是记录集,如:
select * from table where uname in(select uname from user);
2.in 后面是字符串,如:
select * from table where uname in('aaa',bbb','ccc','ddd','eee',ffff'');
注意:这里一定要将字符串用单引号'' 标注起来;
3.in 后面是数组,用如下方法,请参考:
//$pieces是含数据的数组
for($i=0;$icount($pieces);$i++){
$uname=$uname."'".$pieces[$i]."',";
}
$the_uname ="uname in(".$uname."'')";
select * from table where ".$the_uname." ;
备注:这种方法的原理其实很简单,二就是把数组编程上面“第2种情况”的形式。
mysql的in条件查询,是括号里拼接逗号相隔的字串,这个字长里的个数还有限制,网上的说法是1000个,为了避免超出该范围,可专门封装一个方法
1.使用exists写法替代in写法,exists写法是使用条件查询替代in写法里的一长串字串,这个有时候没法使用,比如使用第三方接口查学校一年级2千个学生的考试成绩,你只知道这些学生的id,没有更多的关联条件
2.使用or的写法,将in条件过长的字串拆开,mysql支持以下写法:
方法封装:
测试效果:
1、创建mysql测试表,create table test_city(cityid varchar(20));
2、插入测试数据,
insert into test_city values(1);
insert into test_city values('1,2,3');
insert into test_city values('1,2,3,4');
insert into test_city values(2);
insert into test_city values(3);
3、编写sql,查询cityid为3的记录,
select * from test_city where cityid in ('1','2','3','4','5','6')
4、编写sql,查询cityid为'1,2,3'的记录,
select * from test_city where cityid in ('1,2,3')