首页/数据/SQL 速查/NOT EXISTS 反连接
本包目录(311 条)

NOT EXISTS 反连接

NOT EXISTS 找“没有对应匹配”的行:与 NULL 无关,是反连接的推荐写法;配合内表索引效率稳定。

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

示例

示例
SELECT u.id, u.name
FROM users u
WHERE NOT EXISTS (
        SELECT 1 FROM orders o WHERE o.user_id = u.id
      );

与 NOT IN 的差异

与 NOT IN 的差异
-- user_id 含 NULL 时,下面这条可能一条都不返回
SELECT * FROM users
WHERE id NOT IN (SELECT user_id FROM orders);
NULLNOT EXISTS 不受子查询 NULL 影响
索引内表连接键索引决定效率
改写与 LEFT JOIN ... IS NULL 结果一致,选可读性好的

易错点

  • NOT EXISTS 的外层行很多时优化器可能选择反连接哈希,注意临时表与内存开销
  • 迁移时把 NOT IN 改成 NOT EXISTS 要连带核对 NULL 语义变化,结果行数可能变多

数据来源与参考

  • MySQL 8.0 Reference Manual · Subqueries · NOT EXISTS
  • PostgreSQL Documentation · EXISTS
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌