我的编程空间,编程开发者的网络收藏夹
学习永远不晚

mysql中not in隐含陷阱是什么

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

mysql中not in隐含陷阱是什么

这篇文章主要讲解了“mysql中not in隐含陷阱是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“mysql中not in隐含陷阱是什么”吧!

    1、现象

    1.1、使用not int 子查询

    SELECT* FROM`users` WHEREid NOT IN ( SELECT uid FROM role_user )

    查询结果为:

    mysql中not in隐含陷阱是什么

    1.2、结果对吗?

    当然不对

    1.2.1、查询一下role_user的uid结果
    SELECT uid FROM role_user

    查询结果为:

    mysql中not in隐含陷阱是什么

    1.2.2、查询一下users表的数据
    SELECT * FROM `users`

    mysql中not in隐含陷阱是什么

    1.2.3、分析查询结果

    role_user表的数据uid只有一个1和null,所以说应该能查询到users表的id=2的数据

    实际执行的sql为:

    SELECT* FROM`users` WHEREid NOT IN ( 1,null )

    但是查询的结果依然为:

    mysql中not in隐含陷阱是什么

    如果我把sql改一下:

    SELECT* FROM`users` WHEREid NOT IN ( 1)

    mysql中not in隐含陷阱是什么

    所以可以看到是由于not in 中的结果有null 导致无法查询出数据的

    2、为什么会产生这样的结果?

    2.1、null属于什么?

    2.2、not in 的底层实现

    SELECT* FROM`users` WHEREid NOT IN ( 1,null )

    not in 多个值的实现原理为

    SELECT* FROM`users` WHEREid != 1and id != null

    第一反应是不是觉得是符合的啊?users表的id是主键,所以说都不为空值啊

    但是为什么会这样?

    我们来执行一个sql

    select 1 !=null

    mysql中not in隐含陷阱是什么

    可以看到查询结果为Null,所以说上面的sql里面的id!=null的结果也是null

    由于Null无法参与boolean运算,默认为false,所以说上面的条件中and后面的id!=null永远是false

    感谢各位的阅读,以上就是“mysql中not in隐含陷阱是什么”的内容了,经过本文的学习后,相信大家对mysql中not in隐含陷阱是什么这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

    免责声明:

    ① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

    ② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

    mysql中not in隐含陷阱是什么

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档

    猜你喜欢

    mysql中not in隐含陷阱是什么

    这篇文章主要讲解了“mysql中not in隐含陷阱是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“mysql中not in隐含陷阱是什么”吧!1、现象1.1、使用not int 子查询
    2023-06-30

    Java中常见的几个陷阱分别是什么

    这篇文章给大家介绍Java中常见的几个陷阱分别是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。java 中有很多,新手经常遇到的陷阱,下面主要包含自动装箱与拆箱不可变的String内存泄漏自增类型使用使用 “==”
    2023-06-16

    mysql中restrict的含义是什么

    本篇内容介绍了“mysql中restrict的含义是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!在mys
    2023-04-19

    mysql中filtered的含义是什么

    在MySQL中,filtered表示查询时返回的数据行在所有数据行中的比例。它表示查询结果集经过过滤后实际返回的数据行占总数据行的比例。该值是一个介于0和1之间的小数,可以用来衡量查询条件的效率和准确性。filtered的值越接近1,表示查
    mysql中filtered的含义是什么
    2024-04-09

    mysql中的in是什么意思

    mysql 中的 in 运算符用于检查一个值是否包含在一个指定列表中,语法为:select column_name from table_name where column_name in (value1, value2, ..., val
    mysql中的in是什么意思
    2024-04-26

    mysql中limit 1的含义是什么

    在 MySQL 中,LIMIT 1 是一种用于限制查询结果行数的语句。当使用 LIMIT 1 时,表示只返回查询结果集中的第一行数据。这个功能通常在需要查询单个特定行或者只对结果集中的第一行进行操作时非常有用。通过结合其他条件和排序方式,
    mysql中limit 1的含义是什么
    2024-04-09

    mysql中using btree的含义是什么

    在MySQL中,使用USING BTREE表示创建一个基于B-tree索引的索引。B-tree是一种常见的数据结构,用于在数据库中快速查找数据。当创建一个USING BTREE索引时,MySQL会使用B-tree算法来组织和存储索引值,以便
    mysql中using btree的含义是什么
    2024-04-09

    MySQL中not exists的用法是什么

    在MySQL中,"NOT EXISTS"是一种用于判断某个条件是否不存在的运算符。它的使用语法如下:```SELECT column_name(s)FROM table_nameWHERE NOT EXISTS (SELECT column
    2023-09-26

    编程热搜

    目录