MySQL 中 IN 的用法

Posted by dks on May 29, 2019

相关博客

基本语法

IN 运算符用于 WHERE 表达式中,以列表项的形式支持多个选择。有IN 和 NOT IN 两种运算,分别表示可选列表项和非可选的列表项。

WHERE column IN (value1,value2,value2)

常规用法

1. 固定列表项中查找或排除某些项

SELECT * FROM user WHERE uid IN (2,3,4)
SELECT * FROM user WHERE uid NOT IN (2,3,4)

2. 子查询,即列表项是 SELECT 语句

SELECT * FROM article WHERE uid IN(
				SELECT uid FROM user WHERE status=0
				)
SELECT * FROM article WHERE uid NOT IN(
				SELECT uid FROM user WHERE status=0
				)

3. 多字段查询。

一个 IN 只能对一个字段进行范围比对,如果要指定更多字段,可以使用 AND 或 OR 逻辑运。 使用 AND 或 OR 逻辑运算符后,IN 还可以和其他如 LIKE、>=、= 等运算符一起使用。

SELECT * FROM user WHERE uid IN (2,3,4) OR username IN ("aa","bb")
SELECT * FROM article WHERE uid NOT IN(
				SELECT uid FROM user WHERE status=0
				)
        AND uid IN (2,3,4)

补充说明

  • 如果列表项是确定的,即没有子查询,IN 运算可以用来简化 OR 语句。对于子查询,一般认为OR 效率更高。
  • 尽管效率不及 OR ,对于列表项不确定的时候(如需要子查询得到结果),就必须使用 IN 运算符。
  • 对于子查询表数据小于主查询的时候,也是适用 IN 运算符的。

参考