首页/数据/SQL 速查/ANY / ALL 子查询比较

ANY / ALL 子查询比较

比较运算符配合 ANY/SOME/ALL 表达“与任意一个比较 / 与所有值比较”:= ANY 等价 IN,<> ALL 等价 NOT IN,NULL 规则相同。

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

示例

示例
SELECT * FROM products
WHERE price > ALL (SELECT price FROM products WHERE category = 'A');
-- 比 A 类商品都贵

SELECT * FROM users
WHERE id = ANY (SELECT user_id FROM orders WHERE amount > 1000);
-- 与 IN 等价
= ANY等价 IN
<> ALL等价 NOT IN(同样有 NULL 陷阱)
PostgreSQL 扩展支持数组:id = ANY(ARRAY[1,2,3])
MySQLANY/SOME 同义,用于子查询比较

易错点

  • NULL 参与比较时结果可能是 UNKNOWN,<> ALL 的子查询含 NULL 时与 NOT IN 一样可能返回空
  • PostgreSQL 的 ANY(array) 与 ANY(subquery) 括号内容不同,迁移时别混写

数据来源与参考

  • MySQL 8.0 Reference Manual · ANY / ALL Subqueries
  • PostgreSQL Documentation · ANY/SOME/ALL
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌