带有EXISTS 谓词的子查询算是 SQL 里一个挺实用的小技巧。它不关心你查出来的具体数据,只在乎有没有结果——有就返回 true,没有就是 false。用的时候目标列一般写*就好,因为它压根不返回数据,反正只是判断一下。

写业务逻辑的时候,EXISTS适合做条件过滤,比如你想筛选出那些订单里有某个商品的用户,就能用它。语句像这样:

SELECT name FROM users u
WHERE EXISTS (
  SELECT 1 FROM orders o
  WHERE o.user_id = u.id AND o.product_id = 1001
);
这样写比用JOIN省事,响应也快,尤其是在只需要判断存在性的场景下。

还有NOT EXISTS,用法一样,只不过是反着判断,没有就返回 true。比如想找出没下单的用户,就能这么搞。嗯,记得内层查询的条件要写严谨,不然结果一锅粥。

如果你常在 SQL 里做条件判断,EXISTS 和 NOT EXISTS 绝对是值得多用的工具,尤其是比IN更灵活、更高效的时候。