经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 数据库/运维 » MS SQL Server » 查看文章
sql server 2008 NULL值
来源:cnblogs  作者:浮糊人生  时间:2019/7/22 10:42:45  对本文有异议

SQL支持用NULL符号来表示缺少的值,它使用的是三值谓词逻辑,计算结果可是以TURE、FALSE或UNKNOWN。

SQL中不同语言元素处理NULL和UNKNOWN的方式也有所不同,如果逻辑表达式只涉及已经存在的值,那么最终的计算结果只有二种,要么TRUE要么FALSE。但是当逻辑表达式涉及缺少的值时,其计算结果就是UNKNOWN。如,当谓词salary>0:当salary等于1000时,表达式结果为TRUE,查询过滤条件(WHERE和HAVING子句)能够让表达式计算结果为TRUE的那些行或组被返回;当salary等于-100时,表达式计算结果为FALSE,查询过滤条件(WHERE和HAVING子句)能够让表达式计算结果为FALSE的那些行或组被返回;当salary是NULL时,表达式的计算结果就是UNKNOWN,查询过滤条件(WHERE和HAVING子句)不返回任何行。

在不同的语言元素中,SQL对UNKNOWN的处理也有所不同。SQL对查询过滤条件处理的正确定义是:“接受TRUE”就意味着要过滤掉FALSE和UNKNOWN。反之,对SQL对CHECK约束处理的正确定义是:“拒绝FALSE”就意味着接受TRUE和UNKNOWN。如果SQL使用的是二值谓词逻辑,那么“接受TRUE”和“拒绝FALSE”就不会有什么区别。但在三值谓词逻辑中,“接受TRUE”则会拒绝UNKNOWN和FALSE,而拒绝FALSE则会接受UNKNOWN和TRUE。前面的例子使用了谓词salary>0,一个取值为NULL的salary将导致表达式计算结果为UNKNOWN。如果这个谓词出现在查询的WHERE子句中,则salary列取值为NULL的行也将会过滤掉。如果在表的CHECK约束中也包含这个谓词条件,则salary列取值为NULL的行也将被过滤掉。

UNKNOWN对它取反时,结果还是UNKNOWN。两个NULL值进行比较的表达式,其计算结果还是UNKNOWN。因为NULL值代表一个缺少的值或不可知的值,为此SQL提供了两个谓词IS NULL和IS NOT NULL,用来取代=NULL和<>NULL。

在用于比较和排序目的的不同元素中,SQL处理NULL的方式也有所不同,一些元素认为两个NULL值彼此相等,而另一些则认为这它们不相等。

例如,当进行分组和排序时,认为二个NULL值是相等的。也就是说GROUP BY子句会在每个组中重新组织所有的NULL值,就像有具体值的列一样;

原文链接:http://www.cnblogs.com/jxsjlzg/p/11212380.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号