mysql有数据但筛选值为空(解决从集合运算到mysql的not like找不出NULL的问题)
mysql有数据但筛选值为空
解决从集合运算到mysql的not like找不出NULL的问题记一次有趣的发现:
有一个表,总记录数是1000条,现在有一条查询语句:
|
#查询语句1 #找出表中id中含有‘A '或‘B' 或‘C '的字段 select * from table1 where id like ' %A% ' or id like ' %B% ' or id like ' %C%' ; #成功查出300条 |
嗯查询正常,有300条记录呢。
然后我随便再敲一次查询语句…:
|
#查询语句2 #找出表中id中不含有‘A '且不含有‘B' 且不含有‘C '的字段 select * from table1 where id not like ' %A% ' and id not like ' %B% ' and id not like ' %C%' ; #成功查出400条 |
嗯查出了400条呢…什么?!只有400条??不是应该700条吗!!!
我如雷轰顶——哪里不对了??
按道理,“找出表中id中含有‘A'或‘B'或‘C'的字段” 应该等价于 “找出表中id中不含有‘A'且不含有‘B'且不含有‘C'的字段” 的啊!这是由集合运算决定的啊!
“找出表中id中含有‘A'或‘B'或‘C'的字段”>>看作>> A∪B∪C
“找出表中id中不含有‘A'且不含有‘B'且不含有‘C'的字段”>>看作>> ∁UA∩∁UB∩∁UC
然而我们根据运算规则可知:∁U(A∪B∪C) = ∁UA ∩ ∁UB ∩ ∁UC
那就也是说,两条查询语句查出来的结果,不应该是互补的吗??理论上行数相加应该等于1000的呀,那现在怎么缺了300条呢?
奇了怪了。到底哪里错了呢??
于是换一条查询语句:
|
#查询语句3 #找出表中id中不含有‘A '或‘B' 或‘C '的字段 select * from table1 where id not in (select * from table1 where id like ' %A% ' or id like ' %B% ' or id like ' %C%' ); #成功查出700条 |
咦??怎么这样查,才是查询语句1的互补集呢?
我将查询语句2和查询语句3得到的结果一比较,发现:原来缺少的300条记录,是id 为NULL的情况!
也就是说,not like ‘%A%' 是不能查出NULL的记录的!
经过了解,发现:
又发现了一个细节知识~
补充:注意mysql的not in查询值中存在null值时返回的查询结果会一直为空
现在有数据库表是
当我们使用这样的查询语句时:
|
select * from user where username not in ( select username from user where id != 2 ) |
这时子查询的结果包含了null值,所以结果会一直返回空查询,而不会返回预期的id为2这一行
我们可以稍微修改一下查询形式:
|
select * from user where username not in ( select username from user where id != 2 and username is not null ) |
这时排除了username为空的列,就可以得到预期的结果了
以上为个人经验,希望能给大家一个参考,也希望大家多多支持开心学习网。如有错误或未考虑完全的地方,望不吝赐教。
原文链接:https://blog.csdn.net/IKnowNothinglee/article/details/99972632
- mysql的使用步骤(MySQL infobright的安装步骤)
- php考试复习题(php+mysql开发的最简单在线题库在线做题系统完整案例)
- mysql一主两从架构(MySQL主从搭建多主一从的实现思路与步骤)
- python与mysql的联系(MySQL和Python交互的示例)
- mysql 内置函数
- docker中mysql连接命令(docker 如何修改mysql的root密码)
- mysql主键自增策略(MySQL的主键命名策略相关)
- mysql数据库简单优化(MySQL数据类型优化原则)
- MYSQL中GROUP BY不包含所有的非聚合字段时的注意事项
- mysql出现的问题及解决方法(mysql升级到5.7时,wordpress导数据报错1067的问题)
- mysql中innodb的特性(Mysql InnoDB的锁定机制实例详解)
- mysql的索引及其介绍总结(浅析MysQL B-Tree 索引)
- mysql锁类型大全(简单了解 MySQL 中相关的锁)
- mysql提高分页效率(MySQL优化教程之超大分页查询)
- mysql用户授权的步骤(mysql创建用户并赋予用户权限详细操作教程)
- mysql日志使用(MySQL 日志相关知识总结)
- 英语难学吗(法语比英语难学吗)
- 今天要吃什么(今天要吃什么菜好)
- 网红直播可以赚很多钱吗(网红直播可以赚很多钱吗)
- 今天是什么日子(今天是什么日子有什么特殊意义吗)
- 这里输入关键词(怎么输入关键词搜索)
- 34岁的舒畅,就这样走到了末路,不知会不会后悔15年前的草率决定(就这样走到了末路)
热门推荐
- python多线程有两个参数怎么传(python从子线程中获得返回值的方法)
- django参数配置(详解重置Django migration的常见方式)
- php 抽象类和接口(php抽象类和接口知识点整理总结)
- vio更新后怎么是黑页面(vite2.0 踩坑实录)
- mysqlsql语句的优化(MySQL优化之如何写出高质量sql语句)
- php逐行读写文件(PHP实现读取文件夹及批量重命名文件操作示例)
- pythonselenium怎么设置元素(Python2 Selenium元素定位的实现8种)
- 谷歌浏览器调试模式下搜索小技巧
- mysql 查询json(MySQL处理JSON常见函数的使用)
- mysql 索引举例(MySQL 各个索引的使用详解)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9