iis服务器助手广告
返回顶部
首页 > 资讯 > 数据库 >mysql中not in隐含陷阱详解
  • 485
分享到

mysql中not in隐含陷阱详解

2024-04-02 19:04:59 485人浏览 泡泡鱼
摘要

目录1、现象1.1、使用not int 子查询1.2、结果对吗?1.2.1、查询一下role_user的uid结果1.2.2、查询一下users表的数据1.2.3、分析查询结果2、为

1、现象

1.1、使用not int 子查询

SELECT
	* 
FROM
	`users` 
WHERE
	id NOT IN ( SELECT uid FROM role_user )

查询结果为:

1.2、结果对吗?

当然不对

1.2.1、查询一下role_user的uid结果

SELECT uid FROM role_user

查询结果为:

1.2.2、查询一下users表的数据

SELECT * FROM `users` 

1.2.3、分析查询结果

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

实际执行的sql为:

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

但是查询的结果依然为:

如果我把sql改一下:

SELECT
	* 
FROM
	`users` 
WHERE
	id NOT IN ( 1)

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

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

2.1、null属于什么?

2.2、not in 的底层实现

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

not in 多个值的实现原理为

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

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

但是为什么会这样?

我们来执行一个sql

select 1 !=null

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

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

3、结论

说明not in中如果值有null,那么将查询不到数据

到此这篇关于Mysql中not in隐含陷阱的文章就介绍到这了,更多相关mysql not in隐含陷阱内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

您可能感兴趣的文档:

--结束END--

本文标题: mysql中not in隐含陷阱详解

本文链接: https://www.lsjlt.com/news/145745.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

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

下载Word文档
猜你喜欢
  • mysql中not in隐含陷阱详解
    目录1、现象1.1、使用not int 子查询1.2、结果对吗?1.2.1、查询一下role_user的uid结果1.2.2、查询一下users表的数据1.2.3、分析查询结果2、为...
    99+
    2024-04-02
  • mysql中not in隐含陷阱是什么
    这篇文章主要讲解了“mysql中not in隐含陷阱是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“mysql中not in隐含陷阱是什么”吧!1、现象1.1、使用n...
    99+
    2023-06-30
  • MySQL(42)MySQL IN和NOT IN用法详解
    MySQL IN和NOT IN用法详解 MySQL 中的 IN 运算符用来判断表达式的值是否位于给出的列表中;如果是,返回值为 1,否则返回值为 0。 NOT IN 的作用和 IN 恰好相反,NOT IN 用来判断表达式的值是否不存在于给出...
    99+
    2023-10-26
    mysql 数据库 sql
  • MySQL中增删改查操作与常见陷阱详解
    目录本文导读一、mysql的增删改查1、insert语句2、delete语句3、update语句原理4、select二、15种MySQL数据操作语句1、REPLACE语句2、CALL语句3、TABLE语句4、W...
    99+
    2024-04-02
  • MySQL中建表与常见的类型设计陷阱详解
    目录一、mysql建表语句二、MySQL建表字符串类型设计1、CHAR2、VARCHAR3、枚举类型设计实战三、MySQL建表ID和金额的设计与实战1、ID自增的设计2、互联网企业金额字段设计原理四、MySQL建表时间类...
    99+
    2024-04-02
  • Go语言中Slice常见陷阱与避免方法详解
    目录前言slice 作为函数 / 方法的参数进行传递的陷阱slice 通过 make 函数初始化,后续操作不当所造成的陷阱性能陷阱内存泄露扩容前言 Go 语言提供了很多方便的数据类型...
    99+
    2023-02-14
    Go语言Slice常见陷阱 Go语言Slice Go Slice
  • go语言中匿名函数的作用域陷阱详解
    众所周知在go语言中函数也可以当作变量在程序中使用,我们可以使用函数字面量在任何表达式内指定函数变量。但是在编写代码的时候请注意:如果一个函数在使用不是在该函数内部定义的变量时,这个...
    99+
    2024-04-02
  • mysql中in的用法详解
    mysql in 操作符检查指定列是否包含给定值列表中的值。语法为:where column_name in (value1, value2, ..., valuen)。优点包...
    99+
    2024-04-26
    mysql
  • MySQL表结构设计中的常见陷阱与解决方案:在线考试系统案例
    MySQL表结构设计中的常见陷阱与解决方案:在线考试系统案例引言:在开发数据库应用程序时,优化和设计数据库表结构是至关重要的。一个良好的数据库设计可以提高应用程序的性能、可扩展性和稳定性。本文将以在线考试系统为例,探讨MySQL表结构设计中...
    99+
    2023-10-31
    异常处理机制 数据库索引优化 规范化数据设计
  • 如何解决MySQL中NOT IN填坑之列为null的问题
    这篇文章主要介绍了如何解决MySQL中NOT IN填坑之列为null的问题,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。在公司做一个小功能的...
    99+
    2024-04-02
  • 创建数据库中,超详细常用的MySQL命令(含解析、图解与全部代码)
    目录 系统命令行 MySQL命令行 数据库命令 数据表命令 建表并导入数据 表的其他操作 系统命令行 以下是在系统命令行,已管理员身份运行的情况下,MySQL的一些命令 这两条是关闭MySQL服务与开启MySQL服务的命令 net st...
    99+
    2023-10-18
    mysql 数据库 java sql arm
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作