记录精彩的程序人生

关于 Oracle 中 null 值的踩坑记录(刚才测试,不仅仅存在与 oracle)

前言

在平时的工作中,我们或多或少都会遇到大大小小的坑,有的是我们自己不仔细造成了,有的是所使用工具本身存在的 bug ,还有的则是 所使用的工具对某个问题的处理方式与我们想当然的处理方式不同导致的。无论是哪一种坑,都会为我们的工作带来不必要的错误 与困扰,所以需要我们将其纳入自己的经验包中,多积累经验,努力打怪升级,才能迈向巅峰。

发现问题

  • 数据库值比较的时候(以前只在使用 oracle 的时候发现,目前实测 mysql 也有同样的问题)

imagepng
首先看这个图,大家觉得 查询语句 a 查出来的结果会有几条呢?
一开始的时候,我觉得查出来是会有两条数据
但是请看结果:

imagepng
很明显,这个 age 为 null 的这条数据是没有被查出来的,应该是判断的时候,直接忽略了这条数据
(Oracle 和 mysql 是同样的结果)
大家再来看这条 sql 语句

select * from test111 where age in (select age from test111)

乍一看,这不就是查询出所有的数据了吗?
其实不然,那条 age 为 null 的数据也没有被包括进来

imagepng

一个可菜可菜的码农

15 评论
kim • 2019-01-14
回复 删除

efe

kim • 2019-01-14
回复 删除

ewf

lwl • 2019-01-14
回复 删除

啥?

Eddie • 2019-01-14
回复 删除

不等于用 <>

lwl • 2019-01-14
回复 删除

两个我都试过,你可以去试试

Eddie • 2019-01-14
回复 删除

<> 是标准的 sql 语句,!<> 只能用在 oracle 上,不好移植到其他数据库上。

lwl • 2019-01-14
回复 删除

trollface

Eddie • 2019-01-14
回复 删除

你这个是什么客户端?

lwl • 2019-01-14
回复 删除

这个是 mac 上的

Eddie • 2019-01-14
回复 删除

你歧视我用不起 mac???

lwl • 2019-01-14
回复 删除

你不是问嘛~ 我要怎么回答你

Eddie • 2019-01-14
回复 删除

我是问这个连接 oracle 的客户端叫啥名字。

lwl • 2019-01-14
回复 删除

imagepng
这是 mysql

jingxuetao • 2019-01-16
回复 删除

聊天对话吸引了我的注意力,😄😄😄

zhujinlong • 2019-01-28
回复 删除

test