首页/数据/SQL 速查/IN 列表条件
本包目录(311 条)

IN 列表条件

IN 命中一组离散值,等价于若干 OR 但更简洁;列表很长时优化器代价上升,NOT IN 遇到 NULL 是经典陷阱。

SQL 速查数据更新于 2026-10-12

示例

示例
SELECT * FROM orders WHERE status IN (1, 3, 5);
SELECT * FROM users  WHERE city IN ('Beijing', 'Shanghai');

-- 等价写法
SELECT * FROM orders WHERE status = 1 OR status = 3 OR status = 5;
等价x IN (a,b) 即 x = a OR x = b
NULL 规则列表含 NULL 时:命中仍命中,不命中变 UNKNOWN
列表长度值很多时建议改用临时表 INNER JOIN
IN 的值按常量处理,优化器可改写为多点等值查找(range 访问)。

易错点

  • NOT IN 列表或子查询含 NULL 时结果可能整体为空,判断“不在集合中”优先用 NOT EXISTS
  • IN 里放几百上千个常量会让 SQL 文本巨大、解析变慢,改用 JOIN(临时表/值列表)更稳

数据来源与参考

  • MySQL 8.0 Reference Manual · IN Operator
  • PostgreSQL Documentation · IN Predicate
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌