

新闻资讯
技术学院EXISTS用于判断子查询是否返回至少一行,返回TRUE或FALSE,具短路特性且对NULL安全;常用于存在性检查,效率通常优于IN,需确保关联字段有索引。
MySQL 中 EXISTS 用于判断子查询是否返回至少一行结果,它不关心具体数据,只返回 TRUE 或 FALSE,常用来做存在性检查,效率通常优于 IN(尤其当子查询结果集较大时)。
EXISTS 后面跟一个子查询,只要子查询能查出任意一行(哪怕只有一列、值为 NULL),整个 EXISTS 表达式就返回 TRUE;否则返回 FALSE。注意:子查询中的 SELECT 列名无关紧要,习惯上写 SELECT 1 或 SELECT * 即可,MySQL 会自动忽略实际字段内容。
查找有订单的客户信息(客户表 customer,订单表 orders):
SELECT * FROM customer c WHERE EXISTS ( SELECT 1 FROM orders o WHERE o.customer_id = c.id );
查找没有订单的客户(用 NOT EXISTS):
SELECT * FROM customer c WHERE NOT EXISTS ( SELECT 1 FROM orders o WHERE o.customer_id = c.id );
配合其他条件组合使用(如限定订单金额大于 100):
SELECT * FROM customer c WHERE EXISTS ( SELECT 1 FROM orders o WHERE o.customer_id = c.id AND o.amount > 100 );
三者语义不同,不能简单互换:
o.customer_id)上有索引,否则性能急剧下降写 EXISTS 容易忽略的细节: