SQL NULL值的比较

2023-12-18 16:36:32

关注公众号:『AI学习星球
算法学习4对1辅导论文辅导核心期刊可以通过公众号CSDN滴滴我
在这里插入图片描述


举例

数据库中,对于NULL的比较一致都是让人头疼的事,一不小心就被坑了。比如下面这句sql:

select * from table where field1 = field2;

这句话咋一看没啥毛病,但是如果field1和field2中有个NULL值,就gg了。
下面是几个会出现意想不到的结果

SQL结果
select 1 from table where null = null什么都没有
select 1 from table where null <> null什么都没有
select 1 from table where 1 = null什么都没有
select 1 from table where 1 <> null什么都没有

所以,字段中一旦有NULL,就会出现各种神奇的结果

正确的做法

当在表中对字段进行比较的时候,要先对字段是否为NULL先进行一次判断。比较的方法用NVL。比如下面这个sql:

select * from table where NVL(field1 , default) = NVL(field2 , default)

再配合之前的表格再查看结果

SQL结果
select 1 from table where NVL( field1 , -1 ) = NVL( field2 , -1 )1
select 1 from table where NVL( field1 , -1 ) <> NVL( field2 , -1 )什么都没有
select 1 from table where 1 = NVL( field2 , -1 )什么都没有
select 1 from table where 1 <> NVL( field2 , -1 )1

扩展

在判断字段是否为NULL中,不仅可以用刚说的NVL()还有ISNULL()COALESCE()也可以达到同样效果

SQL Server 中用ISNULL()

-- SQL Server用ISNULL()
select ISNULL(field1 , 0) from table;

Oracle中用NVL()函数,因为没有ISNULL()函数

-- Oracle用NVL()
select NVL(field1 , 0) from table;

MySQL有类似与ISNULL()的函数,用IFNULL(),还支持COALESCS()函数

-- MySQL中支持IFNULL()和COALESCS()

-- IFNULL()
select IFNULL(field1 , 0) from table;

-- COALESCS() 
select COALESCS(field1 , 0) from table;

关注公众号:『AI学习星球
算法学习4对1辅导论文辅导核心期刊可以通过公众号CSDN滴滴我
在这里插入图片描述

文章来源:https://blog.csdn.net/weixin_42363541/article/details/135058350
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。