在SQL中,NOT EXISTS 是一个逻辑运算符,用于检查子查询是否没有返回任何行。
当子查询的结果集为空时,NOT EXISTS 返回 TRUE;否则返回 FALSE。
它常与关联子查询配合使用,用于筛选出 “不存在满足特定条件的关联记录” 的主表数据。
SELECT 主表字段
FROM 主表
WHERE NOT EXISTS (
-- 子查询:检查是否存在满足条件的记录
SELECT 1
FROM 子表
WHERE 子表.关联字段 = 主表.关联字段
AND 其他条件
);
SELECT 列名
FROM 表名
WHERE NOT EXISTS (
SELECT 1 -- 这里的 1 只是占位符,也可以用其他值如 0 或列名
FROM 子查询表
WHERE 关联条件
);
在 SQL 中,NOT EXISTS 通常与子查询结合使用,用于判断子查询是否没有返回任何结果。
SELECT 1 在子查询中是一种常见的写法,它并不实际返回数据,只用于判断是否存在满足条件的记录。
作用说明:
当子查询 SELECT 1 ... 没有返回任何行时,NOT EXISTS 条件为 TRUE,此时主查询会返回相应的记录。
示例:
假设我们有 customers(客户表)和 orders(订单表),要查询没有下过订单的客户:
这个查询会返回所有在 orders 表中没有对应订单记录的客户信息。SELECT 1 在这里的作用只是检查是否存在满足条件的订单记录,并不关心具体的订单数据。
SELECT customer_id, name
FROM customers c
WHERE NOT EXISTS (
SELECT 1
FROM orders o
WHERE o.customer_id = c.customer_id -- 关联条件
);
12万+

被折叠的 条评论
为什么被折叠?



