关注公众号:『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
滴滴我