转:三值逻辑与NULL的处理方式
来自:《Microsoft SQL SERVER 2008技术内幕 T-SQL查询》P7
在SQL中谓词(逻辑表达式)的可能值为TRUE、FALSE和UNKNOWN。这就是所谓的三值逻辑,是SQL特有的属性。
大多数编程语言中的逻辑表达式只有TRUE或FALSE两种取值。SQL中的UNKNOWN逻辑值通常出现在涉及NULL值
的逻辑表达式中(如,以下三个表达式的逻辑值都是UNKNOWN:NULL>42、NULL=NULL和X+NULL>Y)。NULL这个符
号代表一种缺失的值。当把一个缺失的值和另一个值(这个值也可能是NULL)进行比较时,逻辑结果将总是UNKNOWN。
UNKNOWN逻辑结果和NULL的处理非常容易引起混淆。虽然NOT TRUE等于FALSE,NOT FALSE等于TRUE,当UNKNOWN的反面(NOT UNKNOWN)仍然是UNKNOWN。
在不同的语言元素中,UNKNOWN 逻辑结果和NULL的处理方式也不尽相同。如:
1、在筛选器中比较两个NULL值将得到UNKNOWN,而UNKNOWN按FALSE来处理,就好像其中两个NULL不相等一样。所有的查询筛选器(ON、WHERE和HAVING)都把UNKNOWN当作FALSE处理。使筛选器取值为UNKNOWN的行会被排除在结果集之外。
2、在UNIQUE约束、集合运算(如UNION和EXCEPT)、排序和分组操作中,认为两个NULL值是相等的。CHECK约束中的UNKNOWN值实际上被当作TRUE对待。假设表中包含一个CHECK约束,要求salary列的值必须大于0,向该表插入salary为NULL的行时也可以成功,因为(NULL>0)等于UNKNOWN,在CHECK约束中按TRUE来处理。
(1)、如果表中有一列定义了UNIQUE约束,将无法向表中插入该列值为NULL的两行。T-SQL在这点上与标准不符。
(2)、GROUP BY子句会将所有的NULL值分到一组。
(3)、ORDER BY子句会将所有的NULL值排列在一起。
(4)、当比较两个集合中的行时,集合运算认为不同的NULL值是相等的。
转:三值逻辑与NULL的处理方式的更多相关文章
- java.lang.IllegalArgumentException: The observer is null.终于解决方式
java.lang.IllegalArgumentException: The observer is null.终于解决方式 在使用数据适配的时候的问题: java.lang.IllegalArgu ...
- Mysql 分区处理NULL的得方式
MySQL分区处理NULL值得方式 一般情况下,MySQL的分区把NULL当做零值,或者一个最小值进行处理 对于range分区 create table test_null( id int ) par ...
- 神奇的 SQL 之温柔的陷阱 → 三值逻辑 与 NULL !
前言 开心一刻 一个中国小孩参加国外的脱口秀节目,因为语言不通,于是找了一个翻译. 主持人问:“Who is your favorite singer ?” 翻译:”你最喜欢哪个歌手啊 ?” 小孩 ...
- SQL进阶系列之3三值逻辑与NULL
写在前面 普通编程语言里的布尔型只有true和false两个值,这种逻辑体系被称为二值逻辑,而SQL语言里,还有第三个值unknown,因此SQL的逻辑体系被称为三值逻辑. Why SQL存在三值逻辑 ...
- 转:如何学习SQL(第三部分:SQL数据类型与三值逻辑)
转自:http://blog.163.com/mig3719@126/blog/static/285720652010950921286/ 7. 数据类型 在数据库理论中,关系模型和数据类型这两部分内 ...
- 奇妙的NULL值,你知道多少
<NULL值的多义性分析> 谈到NULL值,很多人都是很熟悉,但是深入了解后,又感觉到陌生,对其含义和用法,都无法很准确的理解.NULL在数据库和编程语言中,存在的意义和附带的含义不同. ...
- PHP 类型判断和NULL,空值检查
PHP是一种宽松类型的编程语言,在函数中对传入的参数值的“类型”以及”值是否为空或者NULL“进行检查是不可缺少的步骤. 类型检查 从PHP5开始,PHP允许对函数的参数进行类型约束,即可以约束参数的 ...
- CheckListBox的实现方式分析
实际项目中常常要实现有CheckBox列表框.但是WPF没有自带这样的一个控件,下面就用Style来实现这样的功能.而对于CheckBox列表框,又常常会有一个Select All的CheckBox来 ...
- 使用MyBatis的resultMap高级查询时常用的方式总结
以下内容已经通过楼主测试, 从pd设计数据库到测试完成, 之前楼主也没有过Mybatis 使用resultMap觉得有点乱,最近抽出时间总结了一下也算对MyBatis的resultMap进行一次系统的 ...
随机推荐
- 8.0-uC/OS-III单任务应用
1.单任务应用 app.c文件: (1).APP_CFG.H 是用于配置的头文件.例如, APP_CFG.H 中包含的#define常量确定了任务优先级,堆栈大小,以及其他特性. BSP.H 是 BS ...
- ntpdata 同步时间
ntpdate用来同步时间 [root@localhost ~]# yum install -y ntp [root@localhost ~]# ntpdate time.windows.com # ...
- 两个js冲突怎么解决?试试这四个方法
两个js冲突很让前端头疼,虽然jquery是通用的,但调用不同经常会出问题.jQuery是目前流行的JS封装包,简化了很多复杂的JS程序,JQuery讲浏览器DOM树定义为$,通过$来获取各个子节点. ...
- 【微软2014实习生及秋令营技术类职位在线測试】题目2 : K-th string
时间限制:10000ms 单点时限:1000ms 内存限制:256MB Description Consider a string set that each of them consists of ...
- [资料] Ceph存储系统,关于Redhat和Suse企业版存储知识汇总
版权声明:很多其它内容,请关注[架构师技术联盟]公众号 https://blog.csdn.net/BtB5e6Nsu1g511Eg5XEg/article/details/81117091 wx_f ...
- MACD回零轴有三种方式
MACD回零轴三种方式 MACD上双线回抽或者回档到0轴附近: 第一主动回零轴. 第二被动回零轴. 第三单N回零轴. 随后的走势第二种涨幅最猛.第三种级别最大. 这里要正确理解背离.背离有三种.1,指 ...
- vue中让input框自动聚焦
created(){ this.changfouce(); }, methods: { //在vue生命周期的created()钩子函数进行的DOM操作要放在Vue.nextTick()的回调函数中, ...
- js神秘的电报密码---哈弗曼编码
哈夫曼编码,根据每个单词在文本中出现的次数频率为权值,频率高的权值大.然后每次取两个频率最小的生成树,最后生成一颗大树.从根节点到该单词的路径,左边为0,右边为1, function HFM(){ v ...
- heapy() :python自带的堆排序
堆是一个二叉树,其中每个父节点的值都小于或等于其所有子节点的值.整个堆的最小元素总是位于二叉树的根节点.python的heapq模块提供了对堆的支持. 堆数据结构最重要的特征是heap[0]永远是最小 ...
- cocos2d-x JS 四人麻将中的服务器位置与客户端位置转换相关
前言:在写各类游戏编程中,都会遇到一个问题,就是位置问题,服务端的位置是与客户端的位置是不同的,这中间需要进行一个转化,客户端一套代码运行,不管是任何人登陆,该位置始终都是在屏幕正下方,所以这样就要进 ...