mysql中in的⽤法详解
mysql中in的⽤法详解
⼀、基础⽤法
mysql中in常⽤于where表达式中,其作⽤是查询某个范围内的数据。
select * from where field in (value1,value2,value3,…)
当 IN 前⾯加上 NOT 运算符时,表⽰与 IN 相反的意思,即不在这些列表项内选择
select * from where field not in (value1,value2,value3,…)
⼆、IN ⼦查询
pbootcms插件更多情况下,IN 列表项的值是不明确的,⽽可能是通过⼀个⼦查询得到的:
SELECT * FROM article WHERE uid IN(SELECT uid FROM user WHERE status=0)
在这个 SQL 例⼦⾥,我们实现了查出所有状态为 0 的⽤户(可能是被禁⽌)的所有⽂章。⾸先通过⼀个查询得到所有所有 status=0 的⽤户:
SELECT uid FROM user WHERE status=0
然后将查询结果作为 IN 的列表项以实现最终的查询结果,注意在⼦查询中返回的结果必须是⼀个字段列表项。
在in的⼦查询中常常会遇到查询效率太低问题,解决⽅法如下:
1、仍使⽤in⼦查询,多查询⼀次
SELECT * FROM basic_zdjbxx WHERE suiji IN ( SELECT zdcode FROM ( SELECT zdcode FROM basic_h WHERE zdcode !="") AS h )
2、使⽤LEFT JOIN
SELECT zd.* FROM ( SELECT DISTINCT zdcode FROM basic_h WHERE zdcode !="") AS h LEFT JOIN basic_zdjbxx zd ON zd.suiji = h.zdcode
三、IN 运算符补充说明
quizzes
IN 列表项不仅⽀持数字,也⽀持字符甚⾄时间⽇期类型等,并且可以将这些不同类型的数据项混合排列⽽⽆须跟 column 的类型保持⼀致:
SELECT * FROM user WHERE uid IN(1,2,'3','c')
⼀个 IN 只能对⼀个字段进⾏范围⽐对,如果要指定更多字段,可以使⽤ AND 或 OR 逻辑运算符:
SELECT * FROM user WHERE uid IN(1,2) OR username IN('admin','manong')
使⽤ AND 或 OR 逻辑运算符后,IN 还可以和其他如 LIKE、>=、= 等运算符⼀起使⽤。
意大利罗马遇害四、关于 IN 运算符的效率问题turtleneck
如果 IN 的列表项是确定的,那么可以⽤多个 OR 来代替:
SELECT * FROM user WHERE uid IN (2,3,5)
等效为:易语言教程谁讲得好
SELECT * FROM user WHERE (uid=2 OR aid=3 OR aid=5)mysql语句分类
⼀般认为:
1、如果是对索引字段进⾏操作,使⽤ OR 效率⾼于 IN,但对于列表项不确定的时候(如需要⼦查询
得到结果),就必须使⽤ IN 运算符。另外,对于⼦查询表数据⼩于主查询的时候,也是适⽤ IN 运算符的。
2、in或or在字段没有添加索引的情况下,所连接的字段越多(1 or 2 or 3 or 4 or…),or⽐in的查询效率低很多。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。