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 ...
随机推荐
- 把nc v6的源码看懂
看懂nc v6的源码! 碧桂园全部的正式环境的补丁都在我手里. 2015-11-18 2:33 谢谢两位一起努力的兄弟 谢谢超哥,谢谢祈冰哥,谢谢连老师,陈明大哥,谢谢龙哥,珍玉,谢谢廖生哥,谢谢林春 ...
- LINQ高级编程 笔记
相关资料:http://www.cnblogs.com/lifepoem/archive/2011/12/16/2288017.html 1.什么是LINQ 语言集成查询是一系列标准查询操作符的集合, ...
- Android ListView 嵌套 ImageView,如何响应ImageView的点击和长按事件
http://www.tuicool.com/articles/EZv2Uv 1.先说下嵌套在ListView中的ImageView如何响应点击事件 方法:在imageView中设置onClick属性 ...
- sid超过8个字符处理步骤
服务端配置如下: [oracle@p3 admin]$ cat listener.ora # listener.ora Network Configuration File: /home/oracle ...
- Codeforces 474F - Ant colony
注意到每个区间生存下来的蚂蚁的长度等于区间的gcd 于是可以先预处理出区间的gcd 然后二分查找就好了 预处理gcd我这里用的是倍增法 总的时间复杂度O(NlogN) /* Cf 271F 倍增求区间 ...
- 15_RHEL7挂载NTFS分区
1.下载ntfs-3g wget https://tuxera.com/opensource/ntfs-3g_ntfsprogs-2015.3.14.tgz 2.安装 tar -zxvf ntfs-3 ...
- angular post发送请求和GET发送请求,服务器端接收不到信息的问题
参数可能因为编码原因,服务器端无法接收到传递的值, 这时需要用到补丁来解决这个问题 1,下载一个http.patch.js文件,放入YII框架中的js/ng文件架内 2angularjs 创建模型部分 ...
- YII session存储 调用login方法
当要进行用户的session存储的时候,可以调用里面的login方法进行存储
- C#操作xml的3种方式
C#操作Xml有很多种方式,这里写出个人常使用的三种方式 XmlDocument DataSet linq to xml 首先声明本次操作使用的xml文件:books.xml:内容如下 <?x ...
- APUE《UNIX 环境高级编程》读后感
今天终于把APUE前17章全部看完了,基本上主要知识就在这些章节里. 之前看完<unix/linux编程实践教程>时,有一种豁然开朗.心旷神怡的感觉,在代码级别了解了linux很多系统机制 ...