来自:《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的处理方式的更多相关文章

  1. java.lang.IllegalArgumentException: The observer is null.终于解决方式

    java.lang.IllegalArgumentException: The observer is null.终于解决方式 在使用数据适配的时候的问题: java.lang.IllegalArgu ...

  2. Mysql 分区处理NULL的得方式

    MySQL分区处理NULL值得方式 一般情况下,MySQL的分区把NULL当做零值,或者一个最小值进行处理 对于range分区 create table test_null( id int ) par ...

  3. 神奇的 SQL 之温柔的陷阱 → 三值逻辑 与 NULL !

    前言 开心一刻   一个中国小孩参加国外的脱口秀节目,因为语言不通,于是找了一个翻译. 主持人问:“Who is your favorite singer ?” 翻译:”你最喜欢哪个歌手啊 ?” 小孩 ...

  4. SQL进阶系列之3三值逻辑与NULL

    写在前面 普通编程语言里的布尔型只有true和false两个值,这种逻辑体系被称为二值逻辑,而SQL语言里,还有第三个值unknown,因此SQL的逻辑体系被称为三值逻辑. Why SQL存在三值逻辑 ...

  5. 转:如何学习SQL(第三部分:SQL数据类型与三值逻辑)

    转自:http://blog.163.com/mig3719@126/blog/static/285720652010950921286/ 7. 数据类型 在数据库理论中,关系模型和数据类型这两部分内 ...

  6. 奇妙的NULL值,你知道多少

    <NULL值的多义性分析> 谈到NULL值,很多人都是很熟悉,但是深入了解后,又感觉到陌生,对其含义和用法,都无法很准确的理解.NULL在数据库和编程语言中,存在的意义和附带的含义不同. ...

  7. PHP 类型判断和NULL,空值检查

    PHP是一种宽松类型的编程语言,在函数中对传入的参数值的“类型”以及”值是否为空或者NULL“进行检查是不可缺少的步骤. 类型检查 从PHP5开始,PHP允许对函数的参数进行类型约束,即可以约束参数的 ...

  8. CheckListBox的实现方式分析

    实际项目中常常要实现有CheckBox列表框.但是WPF没有自带这样的一个控件,下面就用Style来实现这样的功能.而对于CheckBox列表框,又常常会有一个Select All的CheckBox来 ...

  9. 使用MyBatis的resultMap高级查询时常用的方式总结

    以下内容已经通过楼主测试, 从pd设计数据库到测试完成, 之前楼主也没有过Mybatis 使用resultMap觉得有点乱,最近抽出时间总结了一下也算对MyBatis的resultMap进行一次系统的 ...

随机推荐

  1. ubuntu上安装ftp

    为什么要安装ftp?为了方便在主机和虚拟机之间传文件 一般有两种做法: 一.使用VMware安装虚拟机后,可以直接继续安装VMware tools,就可以将主机上的文件拖到ubuntu虚拟机的某个目录 ...

  2. AlertWindowManager 弹出提示窗口使用帮助(下)

    //显示消息提示框 //function TdxAlertWindowManager.Show(const ACaption, AText: string; AImageIndex: TcxImage ...

  3. [QGLViewer]鼠标取点后回调

    纠结的一天:QGLViewer控件重载鼠标事件(AxMapControl类),如何在点击鼠标之后执行一个回调,通知主界面Viewer类执行一个操作. 先是考虑直接使用C风格的回调函数,在AxMapCo ...

  4. 进程理论 阻塞非阻塞 同步异步 I/O操作

    1.什么是进程 进程指的是一个正在运行的程序,进程是用来描述程序执行过程的虚拟概念 进程的概念起源于操作系统,进程是操作系统最核心的概念,操作系统其它所有的概念都是围绕进程来的 2.操作系统 操作系统 ...

  5. spark sql的agg函数,作用:在整体DataFrame不分组聚合

    .agg(expers:column*) 返回dataframe类型 ,同数学计算求值 df.agg(max("age"), avg("salary")) df ...

  6. 58A

    #include <stdio.h> #include <string.h> int main() { char hel[6]="hello"; char ...

  7. IOT-SpringBoot-angular启动

    1  D:\workspace_iot\iot-hub\src\main\angular     cmd 启动  npm  start 2  eclipse中启动springboot 3  local ...

  8. (转)Ctrl+H 浪潮Raid配置文档

    说明 本手册适用于LSI芯片Raid卡 包括但不限于Inspur 2008/2108 Raid卡.LSI 9240/9260/9261/9271 等Raid卡. 不同型号的Raid卡在某些功能上的支持 ...

  9. Python 数据结构 链表

    什么是时间复杂度 时间频度:一个算法执行所耗费的时间,从理论上是不能算出来的,必须上机运行测试才知道.但是我们不可能也没有必要对每一个算法都进行上机测试,只需要知道那个算法花费的时间多,那个算法花费得 ...

  10. vbox 相关

    1.虚拟机vbox 安装mac os 10.12 图文教程: https://www.cnblogs.com/liming2017/p/7566953.html