码迷,mamicode.com
首页 > 数据库 > 详细

T-SQL:是NULL不是NULL(七)

时间:2018-07-21 17:19:32      阅读:465      评论:0      收藏:0      [点我收藏+]

标签:image   false   strong   取反   避免   计算   技术   另一个   规则   

首先SQL SERVER 是一个三值逻辑 即谓词计算结果为TRUE,FALSE,UNKNOWN 

标准的谓词都是遵循这种规则的

如 slary>0  会返回计算结果为TRUE 结果的行拒绝FALSE和UNKNOWN 结果

   但不是所有的谓词处理都是这样的  如果出现在CHECK约束中   计算结果为不为FALSE 拒绝FALSE 意味着接受TRUE和UNKNOWN

TRUE 和FALSE 我们都知道什么意思 那 UNKNOWN 具体怎么避免呢?

1.UNKNOWN 

IS UNKNOWN  得到结果 NULL  这很正常   NOT IS 取反结果 还NULL  这让人很费解 NOT UNKNOWN依旧等于UNKNOWN

NULL=NULL 计算结果为UNKNOWN  NULL表示缺失,简单点说就是 一未知的值不可能等于另一个未知的值

所以 SQL 提供两个谓词 来判断是不是NULL  IS NULL 和 IS NOT NULL  替代=NULL <>NULL

记住  <>    计算结果不包括空 例如

SELECT custid, country, region, city
FROM Sales.Customers
WHERE region <> NWA;

技术分享图片

技术分享图片

可以看到第一幅图并无NULL 行

接着我们查询为NULL的

SELECT custid, country, region, city
FROM Sales.Customers
WHERE region = NULL;

技术分享图片

所以我们用 IS NULL 代替 =

SELECT custid, country, region, city
FROM Sales.Customers
WHERE region IS NULL;

技术分享图片

如果想反回 不等于 wa 包括NULL 

SELECT custid, country, region, city
FROM Sales.Customers
WHERE region <> NWA
   OR region IS NULL;

技术分享图片

奇怪的是 在分组和排序谓词中 NULL=NULL 是成立的

在 唯一约束中 NULL 也是被认为相等的

 

T-SQL:是NULL不是NULL(七)

标签:image   false   strong   取反   避免   计算   技术   另一个   规则   

原文地址:https://www.cnblogs.com/yuanzijian-ruiec/p/9346713.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!