博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SqlServer中的Null值空值问题
阅读量:4538 次
发布时间:2019-06-08

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

原文:

sql使用的是三值谓词逻辑,所以逻辑表达式返回的结果可以为True、False或者未知,在三值逻辑中返回True与不返回False并不完全一样,

 

SQL对查询过滤条件的处理:接受TURE  拒绝FALSE和UnKnown

 

SQLCHECK约束的处理:接受FALSE 拒绝 TRUEUNKnown

 

UNKNOWN的微妙之处在于当对它取反时  结果仍是UNKNOWN

对两个Null值进行比较的表达式(Null=null),其计算的结果仍为Unknown,因为NUll值代表的是一个不可知的值,所以实际上无法判断一个不可知的值是否等于另一个,因此SQL提供了两个谓词Is NULL和IS Not NULL来取代=null和<>null, 使用not in 谓词过滤数据时,如果 in的值中包含null,则永远不会返回值(SELECT OrderNum FROM [dbo].[SalesOrder] WHERE OrderNum NOT IN ('100128054',NULL))

 

 

当进行分组和排序时 ,认为两个NULL值是相等的,就是说GROUP BY子句会在每个组中重新组织所有的NULL

 

OrderBY子句也会对所有的NULL值进行排序,T-SQL是把NULL值得排在了有效值之前

 

所有的聚合函数都会忽略NULL,只有一个例外Count(*),假设一个组有两行,其QTY分别为3null,表达式Count(*)返回2COuntQTY)返回1,因为一行是已知值

 

 

ANSI SQL有两种UNIque约束:

  1. 将多个NULL值视为相等(只允许有一个NULL值)
  1. 将多个NULL值视为不同(允许有多个NULL值)

SQLSERVER只实现了前者

 

posted on
2014-09-25 00:58 阅读(
...) 评论(
...)

转载于:https://www.cnblogs.com/lonelyxmas/p/3991898.html

你可能感兴趣的文章
SQL语句集合
查看>>
Java ——流(Stream)、文件(File)和IO
查看>>
java实验二——输出一个指定整数的所有质因数
查看>>
4104:单词翻转
查看>>
VS2012 下编译可以在 XP 上运行的条件
查看>>
android中xml设置Animation动画效果详解
查看>>
HDU 5416——CRB and Tree——————【DFS搜树】
查看>>
mysql事务及慢查询
查看>>
Erlang调度器细节探析
查看>>
转,SelectNodes + XPath
查看>>
数据库的简单操作
查看>>
java 输入
查看>>
【Windows】Windows中解析DOS的for命令使用
查看>>
MVC3: 页面向服务传参(view->controller,get,post)
查看>>
vs2008 卡一下的问题
查看>>
Windows Socket五种I/O模型——代码全攻略
查看>>
多线程相关
查看>>
处理并解决mysql8.0 caching-sha2-password问题
查看>>
JavaScript 之 对象/JSON/数组
查看>>
判断delegate是否释放
查看>>