当前位置: 首页 > 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.dtcms.com/a/295773.html

相关文章:

  • vscode 的 settings.json
  • Go语言管道Channel通信教程
  • Lua(table)
  • 数据库集群环境漏洞修复
  • Vue-23-通过flask接口提供的数据使用plotly.js绘图(二)
  • Python爬虫实战:与dominoup.com平台结合的域名数据分析系统
  • 【数据可视化-72】苏超第七轮战罢:黑金大屏下的足球数据洞察(含完整代码、数据和大屏)
  • Windows 如何更改 ModelScope 的模型下载缓存位置?
  • 低功耗设计双目协同画面实现光学变焦内带AI模型
  • 几个常用的Oxygen编辑器插件
  • Python进阶第三方库之Matplotlib
  • Jenkins最新版本的安装以及集成Allure生成测试报告
  • “适应度”简介
  • 【牛客刷题】和零在一起
  • SQL基础⑫ | 视图篇
  • 学习设计模式《十九》——享元模式
  • ​Excel——SUMPRODUCT 函数
  • LeetCode 2322:从树中删除边的最小分数
  • J2EE模式---业务代表模式
  • 后信创时代,融合数据库成为国产数据库的新锚点
  • MongoDB的操作
  • skywalking应用性能监控
  • 内网穿透的应用-分布式系统观测革命:SigNoz与cpolar的技术协同之道
  • Java从入门到精通!第十三天(IO 流)
  • Web前端:JavaScript every()迭代方法
  • 闲庭信步使用图像验证平台加速FPGA的开发:第三十四课——车牌识别的FPGA实现(6)叠加车牌识别的信息
  • 认识单片机
  • Centos新增磁盘,进行根目录扩容
  • SkyWalking异步采集spring gateway日志
  • 基于Qt和OpenCV的图片与视频编辑器