博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
转:三值逻辑与NULL的处理方式
阅读量:5370 次
发布时间:2019-06-15

本文共 952 字,大约阅读时间需要 3 分钟。

来自:《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值是相等的。

转载于:https://www.cnblogs.com/lusunqing/p/3292884.html

你可能感兴趣的文章
python-flask学习
查看>>
Controller与View数据传递 多Model传递
查看>>
arm 汇编小练习
查看>>
RegQueryValueEx函数
查看>>
漫谈数据库索引
查看>>
【NOIP2004】合唱队形
查看>>
spring面试题
查看>>
python使用pickle,json等序列化dict
查看>>
php进行文件的强制下载
查看>>
每日python(6)
查看>>
Python正则表达式中的re.S的作用
查看>>
ubuntu15.10运行android studio出错unable to run mksdcard sdk tool
查看>>
HashMap面试知多少
查看>>
Effective C# 学习笔记(二十七)使你的类型可被序列化
查看>>
LDAP客户端配置
查看>>
(转)NAT原理与NAT穿越
查看>>
13.内存原理
查看>>
24.函数信号机制(本质上就是函数指针)
查看>>
The dependency `xxx` is not used in any concrete target.
查看>>
Bootstrap 中 下拉菜单和滚动监听插件(十一)(持续更新中。。。)
查看>>