SQL中的NULL值
除is [not] null之外,空值不满足任何查找条件。
–如果null参与算术运算,则该算术表达式的值为null。
–如果null参与比较运算,则结果可视为false。在SQL-92中可看成unknown。
–如果null参与聚集运算,则除count(*)之外其它聚集函数都忽略null。
例:select sum(SAL)
from PROF
例:select count(*)
from PROF
–
详细分析
SQL中的NULL值,表示不知道(UNKNOWN)的数据,用作不知道数据的具体值,或者不知道数据是否存在,或者数据不存在等情况。
因为引入了NULL值,故此SQL的逻辑系统是三值逻辑系统——FALSE、TRUE、NULL三种值构成的逻辑系统。
1、OR、AND、NOT真值表
A B A OR B A AND B NOT A
FALSE FALSE FALSE FALSE TRUE
FALSE TRUE TRUE FALSE -
FALSE NULL NULL FALSE -
TRUE FALSE TRUE FALSE FALSE
TRUE TRUE TRUE TRUE -
TRUE NULL TRUE NULL -
NULL FALSE NULL FALSE NULL
NULL TRUE TRUE NULL -
NULL NULL NULL NULL -
因为NULL当UNKNOWN来理解,因此,当值为NULL时,它既有可能是FALSE也有可能是TRUE。如果计算结果只有一种可能,则取该种可
能;如果计算结果既有可能是FALSE,也有可能是TRUE,那么结果便为NULL。例如,NOT NULL,其结果也有两种可能,因此NOT NULL
的结果是NULL。再例如,NULL AND TRUE,则其结果也有两种可能,因此NULL AND TRUE的结果是NULL。但是,NULL OR TRUE,或是
NULL AND FALSE,前者结果为TRUE,单是一个TRUE出现,便足以知道结果为TRUE;后者结果为FALSE,单是一个FALSE出现,便足以
知道结果为FALSE。这是OR和AND的特性决定的。
2、比较运算符及算术运算符中的NULL
比较运算符及算术运算符中的NULL,会导致运算结果也为NULL。如3+NULL的结果为NULL,NULL>=5的结果为NULL,等等。
3、BETWEEN AND、IN中的NULL
A BETWEEN B AND C意为A>=B AND A<=C,因此其产生NULL值的情况,可以参照后者判断。A NOT BETWEEN B AND C相应等价于
NOT(A>=B AND A<=C)。
A IN(B,C,D)意为A=B OR A=C OR A=D,因此其产生NULL值的情况,可以参照后者判断。A NOT IN(B,C,D)相应等价于NOT(A=B OR
A=C OR A=D)。当集合为空时,IN的结果为FALSE,NOT IN的结果则为TRUE。
4、EXISTS、IS NULL
EXISTS(以及NOT EXISTS)、IS NULL(以及IS NOT NULL),均只产生FALSE或TRUE,而不产生NULL。
5、ANY、ALL
在一个值与一个集合(一组值)比较时,比较运算符可以加上ANY(或SOME,作用相同)或ALL。
A>ANY(B,C,D)意为A>B OR A>C OR A>D,因此其产生NULL值的情况,可以参照后者判断。当集合为空时,ANY的结果为FALSE。
A>ALL(B,C,D)意为A>B AND A>C AND A>D,因此其产生NULL值的情况,可以参照后者判断。当集合为空时,ALL的结果为TRUE。
6、WHERE、HAVING、ON条件筛选,与完整性约束检查
在WHERE、HAVING、ON条件筛选中,只保留结果为TRUE的,而不处理FALSE及NULL的。但在完整性约束检查中,只有结果为FALSE
的,才违反约束检查,NULL并不违反。
和NULL值相关的两个函数
NULLIF:需要两个参数
例子:NULLIF(a,b)
说明:如果a和b是相等的,那么返回NULL,如果不相等返回a
select NULLIF('eqeqweqwe','1') 结果是eqeqweqwe
select NULLIF(1,1) 结果是NULL
a和b的类型要一致
ISNULL:需要两个参数
例子:ISNULL(a,b)
说明:如果a和b同时为NULL,返回NULL,如果a为NULL,b不为NULL,返回b,如果a不为NULL,b为NULL返回a,如果a和b都不为NULL
返回a
select ISNULL(null,null)结果是null
select ISNULL(null,33)结果是33
select ISNULL('ddd',null)结果是ddd
select ISNULL(44,33)结果是44
转载自:http://blog.sina.com.cn/s/blog_6a6eb42d0100ka56.html
SQL中的NULL值的更多相关文章
- sql 中的null值
1.包含null的表达式都为空 select salary*12+nvl(bonus,0) nvl是虑空函数 2. null值永远!=null select * from emp where bo ...
- SQL中的Null深入研究分析
SQL中的Null深入研究分析 虽然熟练掌握SQL的人对于Null不会有什么疑问,但总结得很全的文章还是很难找,看到一篇英文版的, 感觉还不错. Tony Hoare 在1965年发明了 null 引 ...
- 深入详解SQL中的Null
深入详解SQL中的Null NULL 在计算机和编程世界中表示的是未知,不确定.虽然中文翻译为 “空”, 但此空(null)非彼空(empty). Null表示的是一种未知状态,未来状态,比如小明兜里 ...
- 深入具体解释SQL中的Null
NULL 在计算机和编程世界中表示的是未知,不确定.尽管中文翻译为 "空", 但此空(null)非彼空(empty). Null表示的是一种未知状态.未来状态,比方小明兜里有多少钱 ...
- 数据库 SQL :有关 NULL 值引发 TRUE、FALSE、UNKNOW 三值逻辑
在 Java.C# 中,相信如果是 boolean 类型值,只有两种选择 true.false.然而,在 SQL 查询中,NULL 值的引入,使得新增了 UNKNOW ,因此,就产生了 TRUE.FA ...
- (转) SQL 中的 NULL 你真的懂了吗?【数据库|SQL】
注:转载自下面链接 https://blog.csdn.net/lnotime/article/details/104847946 SQL 中的 NULL (译自 NULL Values in SQL ...
- java中,null值可以被强制转换为任何类型
java中,null值可以被强制转换为任何类型
- 参数中传Null值
参数中传Null值虽然不是一种优雅的方式,但有时候可以省时间.不过不推荐.
- SqlServer中的Null值空值问题
sql使用的是三值谓词逻辑,所以逻辑表达式返回的结果可以为True.False或者未知,在三值逻辑中返回True与不返回False并不完全一样, SQL对查询过滤条件的处理:接受TURE 拒绝FAL ...
随机推荐
- 原生JS+tween.js模仿微博发布效果
转载请注明出处:http://www.cnblogs.com/zhangmingze/p/4816865.html 1.先看效果吧,有效果才有动力: 2.html结构: <!DOCTYPE ht ...
- 了解php面向对象
php 三大特性:封装.继承.多态,一直以来只知道其字,却不大了解其意思和具体使用,只是对继承有大概的了 解,优点是代码的重用性,oop概念,记得有一次我去面试,人家问我什么是oop,然后我答了很多什 ...
- linux工具问题,tail -f 失效
最近发现一个很奇怪问题: tail -f 不能实时的输出日志
- 解决win service 2003 IIS发布Gis网站后,访问地图服务出错,无法正常打开而且 事件查看器出现错误提示。
错误详情: 应用程序-特定 权限设置未将 COM 服务器应用程序(CLSID 为{379376DB-AEA6-40D1-9491-9345E61EF6BE})的 本地 激活 权限授予用户 NT AUT ...
- MyEclipse起步Tomcat报错“A configuration error occurred during…” MyEclipse起步Tomcat报错“A configuration error occurred during…”
- Xcode 7:Storyboard Reference、Strong IBOutlet以及Scene Dock
本文由CocoaChina译者小袋子(博客)翻译原文:Storyboard Reference, Strong IBOutlet, Scene Dock in iOS 9 在这个教程中,我想要聊一些有 ...
- linux 日常命令(磁盘空间)
df –hl 在windows下可以很方便的查看磁盘空间的.但是到了Linux查看磁盘空间,你可能就有点摸不着头脑了,呵呵.不要急,我这就要给你解决这个问题. Df命令是Linux查看磁盘空间系统以磁 ...
- centos lnmp 安装笔记
[root@host]# chkconfig nginx on [root@host]# service nginx start [root@host]# service nginx stop [ro ...
- 《学习OpenCV》 第四章 习题六
实现的是一个图像标签编辑器,其间遇到了些问题还未解决或者可能解决方法上不是最优,若你有更好的思路可以提供给我,大恩不言谢啦!!☆⌒(*^-゜)v. #include "stdafx.h&qu ...
- C语言知识总结
明白一些变量 熟悉一些语句 组合一些函数 C语言——>库 帮你写好放在库中 魔数 凭空变出来的数字,不知道 数字表示的含义,影响代码的可读性. C语音的参数传递 非常特殊,传递的是一个替身. ...