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

解决从集合运算到mysql的not like找不出NULL的问题

短信预约 信息系统项目管理师 报名、考试、查分时间动态提醒
省份

北京

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

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

看不清楚,换张图片

免费获取短信验证码

解决从集合运算到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为空的列,就可以得到预期的结果了

以上为个人经验,希望能给大家一个参考,也希望大家多多支持自学编程网。如有错误或未考虑完全的地方,望不吝赐教。

免责声明:

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

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

解决从集合运算到mysql的not like找不出NULL的问题

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

下载Word文档

猜你喜欢

解决从集合运算到mysql的not like找不出NULL的问题

记一次有趣的发现: 有一个表,总记录数是1000条,现在有一条查询语句:#查询语句1 #找出表中id中含有‘A'或‘B'或‘C'的字段 select * from table1 where id like '%A%' or id like
2022-05-28

编程热搜

目录