SQLSERVER TRUE、FALSE、UNKNOWN
null和其他值比较都是unknown
在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在不同的语言元素中被区别对待。例如,所有的查询筛选器(ON、WHERE 、HAVING)都把UNKNOWN当作FALSE处理。使筛选器为UNKNOWN的行会被排除在结果集之外。而CHECK约束中的UNKNOWN值被当 作TRUE对待。假设表中包含一个CHECK约束,要求salary列的值必须大于0。向该表插入salary为NULL的行时可以被接受,因为 (NULL>0)等于UNKNOWN,在CHECK约束中被视为和TRUE一样。
在筛选器中比较两个NULL值将得到UNKNOWN,会被当作FALSE处理,就好像其中一个NULL不等于另一个NULL。而UNIQUE约束、排序操作和分组操作认为两个NULL值是相等的。
- 如果表中有一列定义了UNIQUE约束,将无法向表中插入该列值为NULL的两行。
- GROUP BY子句把所有的NULL值分到一组。
- ORDER BY子句把所有NULL值排列在一起。
总之,了解UNKNOWN逻辑结果和NULL在不同语言元素中被处理的方式是有好处的,这样可以避免以后出现麻烦。
SQLSERVER TRUE、FALSE、UNKNOWN的更多相关文章
- 数据库 SQL :有关 NULL 值引发 TRUE、FALSE、UNKNOW 三值逻辑
在 Java.C# 中,相信如果是 boolean 类型值,只有两种选择 true.false.然而,在 SQL 查询中,NULL 值的引入,使得新增了 UNKNOW ,因此,就产生了 TRUE.FA ...
- angularjs指令中scope参数 true、false、{} 的区别详解
scope 有三个参数 true.false.{} scope 默认是 false,当 scope设置为true时,会从父作用域继承并创建一个新的作用域对象, 按照true .false的反向思维,我 ...
- php中NULL、false、0、" "有何区别?
php中很多还不懂php中0,"",null和false之间的区别,这些区别有时会影响到数据判断的正确性和安全性,给程序的测试运行造成很多麻烦.先看一个例子: <? $str ...
- this 、typeof、false、parseInt()、this、arguments、Array和object判断
typeof typeof (undefined) 不会报错 undefined object Number boolean function String 返回值为字符串类型 false .fals ...
- Python3中真真假假True、False、None等含义详解
概述 在Python中,不仅仅和类C一样的真假类似,比如1代表真,0代表假.Python中的真假有着更加广阔的含义范围,Python会把所有的空数据结构视为假,比如[](空列表).{}(空集合).'' ...
- Number (float bool complex)浮点型、bool 布尔型 True、False 、complex 复数类型
# Number (float bool complex) # ### float 浮点型 就是小数 # (1) 表达形式一 floatvar = 3.14 print(floatvar) #获取类型 ...
- null、undefined、false、0相等性比较
之前在看<JavaScript权威指南>的时候看到三个相等性比较的式子: null == undefined ;// ==>true undefined == false;// == ...
- empty和is_null以及isset函数在0、”0”、‘空串’、NULL、false、array()的计算值
1empty:只要是非空或者非零的值都返回false,换句话说‘’.‘0’.0.null.false都返回true: 2is_null: 当参数满足下面三种情况时,is_null()将返回TRUE,其 ...
- JAVAWEB 遍历mysql结果集时 字段为0、false、null的问题
foreach遍历查询mysql中的tinyint字段时一直查都是各种0,false,null 发现原来是实体类中的变量名和mysql中的列名不一样出的bug 所以说列名和实体类中的相关变量名是要保持 ...
随机推荐
- POJ 2635 The Embarrassed Cryptographer(大数求余)
题意:给出一个大数,这个大数由两个素数相乘得到,让我们判断是否其中一个素数比L要小,如果两个都小,输出较小的那个. 分析:大数求余的方法:针对题目中的样例,143 11,我们可以这样算,1 % 11 ...
- 我终于有案例库啦(github 提供的)
穷逼一个,一直在纠结要不要买个服务器什么的. 后来在慕课网看 git 教程时看到 github 可以帮你展示网页哟,于是我便有了这个案例库. 网址:https://foreverz133.github ...
- STM32F2系列时钟的配置
前一节详细介绍了系统默认的时钟配置,及各路时钟输出是多少,这是默认配置的,但实际使用的时钟默认的时钟并不符合要求,所以就得知道如何调用库函数进行配置. 最好的资料就是查阅stm32f2xx_rcc.c ...
- 一个web项目在myeclipse中add deployment时无法被识别出来的原因
当我们一个web项目,在myeclipse中,add deployment时,可能发现,根本无法被识别成web项目,可能的原因有: 1. 项目的properties ->Myeclipse ...
- RAS、AES、DES加密
---------------------------------------------------------------------------------------------------- ...
- Ubuntu系统如何卸载并安装新版本的jdk(permission denied问题)
1.如果是自带的openjdk运行下面可以删除: sudo apt-get purge openjdk* 但是这种情况又不一定成功,有时候运行java -version发现还是可以运行的.证明删除不成 ...
- bLock 回调 就是这么简单!
转载自:http://blog.csdn.net/mobanchengshuang/article/details/11751671 我们在开发中常常会用到函数回调,你可以用通知来替代回调,但是大多数 ...
- Eclipse和PyDev搭建完美Python开发环境 Windows篇
1,安装Python Python是一个跨平台语言,Python从3.0的版本的语法很多不兼容2版本,官网找到最新的版本并下载:http://www.python.org, 因为之前的一个项目是2版本 ...
- java中创建多线程的方式
在java中比较常用的有三种创建多线程的方式. 方式一:继承Thread类,要重写run方法. 在MyThread类 public class MyThread extends Thread { @O ...
- Java去除字符串中的空格
特别注意了 Strim或者Trip都是只能去除头部和尾部的空字符串.中间的部分是不能够去除的! 推荐使用ApacheCommonse的StringUtils.deleteWhitespace(&quo ...