SQL中 not exists 的使用方法

在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  -- 关联条件
);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值