当前位置: 首页 > news >正文

MYSQL中NOT IN和NOT EXISTS

    NOT INNOT EXISTS 是 MySQL 中用于排除某些数据的两种常见查询方式。它们的功能相似,都用于返回不满足某一条件的结果,但是它们在内部的实现方式以及某些特定场景下的行为有所不同。

1. NOT IN

    NOT IN 是用来排除在指定值集合中存在的值。通常用来与子查询结合,在查询中排除某些值。

SELECT column_name
FROM table_name
WHERE column_name NOT IN (subquery);

假设有两个表:orderscustomers,我们要找出那些没有下过订单的客户。

SELECT customer_id
FROM customers
WHERE customer_id NOT IN (SELECT customer_id FROM orders);

这个查询会返回所有没有出现在 orders 表中的客户 customer_id

如果子查询结果包含 NULLNOT IN 会返回不准确的结果,因为 NULL 代表“未知”,任何与 NULL 比较的结果都会是“未知”(UNKNOWN)。因此,如果子查询结果中包含 NULLNOT IN 可能会导致意外的结果。 

2. NOT EXISTS

    NOT EXISTS 用于检查子查询是否没有返回任何记录。它通常用于子查询中,通过判断子查询是否返回结果来决定是否排除某些数据。

SELECT column_name
FROM table_name
WHERE NOT EXISTS (subquery);

这个查询会返回所有没有在 orders 表中找到相关记录的客户。

NOT EXISTS 不会受 NULL 的影响,因为它仅检查子查询是否返回任何记录。在某些场景下,NOT EXISTS 可以比 NOT IN 更高效,尤其是在子查询中包含 NULL 的情况下,NOT EXISTS 可以避免出现不正确的结果。 

3. 异同总结

    相同点
  • 都是用来排除满足某个条件的数据。
  • 都可用于子查询,返回那些不满足子查询条件的记录。
    不同点

   NOT IN

           如果子查询返回 NULL,可能会影响查询结果,导致意外的“未知”结果。

    NOT IN 通常会将整个结果集加载到内存中,可能导致性能问题,特别是在处理大数据量时。

    NOT EXISTS

           对 NULL 处理更为健壮,不会受到 NULL 的影响。

           通常在处理大数据集时性能更好,尤其是在使用关联子查询时,NOT EXISTS 可以避免不必要的全表扫描。 

    性能差异:

    NOT IN 通常在小数据集上表现良好,但在包含 NULL 或大数据集的情况下,可能会出现性能问题。

    NOT EXISTS 更适用于复杂查询,尤其是在大数据集和 NULL 值的场景下,能够更高效地执行。

http://www.lryc.cn/news/598432.html

相关文章:

  • 【Guava】1.1.我的报告
  • 宝塔通过docker部署JupyterHub指南【常见错误处理】
  • 从java到vue3:第二天
  • Vue3 面试题及详细答案120道(91-105 )
  • 个人笔记GUI
  • 【Python】Python多线程爬虫实战:从基础原理到分布式架构实现
  • Linux 基本命令整理
  • #来昇腾学AI 【十天成长计划】大模型LLM Prompt初级班
  • 详解力扣高频 SQL 50 题-1757.可回收且低脂的产品【入门】
  • 保障工业核心命脉:深度解读工业交换机QoS的“智能流量治理”之道
  • docker设置字体及时间,映射到宿主机上
  • rustfs/rustfs基于 Rust 的高性能分布式存储系统
  • 数字系统自动设计:从C++到门级网表
  • EXCEL——INDEX和MATCH傻傻分不清?
  • 基于QT(C++)实现(图形界面)选课管理系统
  • 网易大模型算法面经总结第一篇
  • 【News】同为科技亮相首届气象经济博览会
  • Qt 元对象系统(Meta-Object System)解析
  • 【C#补全计划:类和对象(六)】
  • 【Linux基础知识系列】第六十三篇 - 文件编辑器基础:vim
  • Windows11 本地安装docker Desktop 部署dify 拉取镜像报错
  • 告别下载中断:深入解析Tomcat JSP中的“远程主机强迫关闭连接”与“软件中止连接”
  • BI 系统数据看板全解析:让数据可视化驱动业务决策
  • k8s之ingress定义https访问方式
  • 使用Claude Code从零到一打造一个现代化的GitHub Star项目管理器
  • QT项目-仿QQ音乐的音乐播放器(第二节)
  • 【初识数据结构】CS61B 中的归并排序和选择排序
  • [网安工具] 自动化威胁检测工具 —— D 盾 · 使用手册
  • kubernetes集群中部署CoreDNS服务
  • OceanBase 4.3.5 解析:DDL性能诊断