sql server 2008 NULL值
SQL支持用NULL符号来表示缺少的值,它使用的是三值谓词逻辑,计算结果可是以TURE、FALSE或UNKNOWN。
SQL中不同语言元素处理NULL和UNKNOWN的方式也有所不同,如果逻辑表达式只涉及已经存在的值,那么最终的计算结果只有二种,要么TRUE要么FALSE。但是当逻辑表达式涉及缺少的值时,其计算结果就是UNKNOWN。如,当谓词salary>0:当salary等于1000时,表达式结果为TRUE,查询过滤条件(WHERE和HAVING子句)能够让表达式计算结果为TRUE的那些行或组被返回;当salary等于-100时,表达式计算结果为FALSE,查询过滤条件(WHERE和HAVING子句)能够让表达式计算结果为FALSE的那些行或组被返回;当salary是NULL时,表达式的计算结果就是UNKNOWN,查询过滤条件(WHERE和HAVING子句)不返回任何行。
在不同的语言元素中,SQL对UNKNOWN的处理也有所不同。SQL对查询过滤条件处理的正确定义是:“接受TRUE”就意味着要过滤掉FALSE和UNKNOWN。反之,对SQL对CHECK约束处理的正确定义是:“拒绝FALSE”就意味着接受TRUE和UNKNOWN。如果SQL使用的是二值谓词逻辑,那么“接受TRUE”和“拒绝FALSE”就不会有什么区别。但在三值谓词逻辑中,“接受TRUE”则会拒绝UNKNOWN和FALSE,而拒绝FALSE则会接受UNKNOWN和TRUE。前面的例子使用了谓词salary>0,一个取值为NULL的salary将导致表达式计算结果为UNKNOWN。如果这个谓词出现在查询的WHERE子句中,则salary列取值为NULL的行也将会过滤掉。如果在表的CHECK约束中也包含这个谓词条件,则salary列取值为NULL的行也将被过滤掉。
UNKNOWN对它取反时,结果还是UNKNOWN。两个NULL值进行比较的表达式,其计算结果还是UNKNOWN。因为NULL值代表一个缺少的值或不可知的值,为此SQL提供了两个谓词IS NULL和IS NOT NULL,用来取代=NULL和<>NULL。
在用于比较和排序目的的不同元素中,SQL处理NULL的方式也有所不同,一些元素认为两个NULL值彼此相等,而另一些则认为这它们不相等。
例如,当进行分组和排序时,认为二个NULL值是相等的。也就是说GROUP BY子句会在每个组中重新组织所有的NULL值,就像有具体值的列一样;
sql server 2008 NULL值的更多相关文章
- SQL SERVER 2008 字段值合并
/** * 通过 FOR XML PATH 语句,可以将字段的值进行合并. **/ CREATE TABLE tb_child ( name ), hobby ) ) go INSERT INTO t ...
- SQL SERVER 2008 设置字段默认值为当前时间
在某些情况下需要对某条记录添加上时间戳,比如用户注册,需要记录用户的注册时间,在SQL SERVER 2008中可以通过 1. 添加新字段 2. 数据类型设置为smalldatetime 3. 默认值 ...
- SQL Server 2008 各种DateTime的取值范围
SQL Server 2008除了DateTime和SmallDateTime之外,又新增了四种时间类型,分别为:date,time,datetime2和datetimeoffset. 各时间类型范围 ...
- Sql Server 2008和2000查询表的字段和注释
-- SQL Server 2008 SELECT 表名 = d.name, 表说明 = case when a.colorder=1 then isnull(f.value,'') else '' ...
- SQL SERVER 2008向ORACLE 11G迁移示例
来源于:http://www.cnblogs.com/hiizsk/ 由SQL SERVER 2008向ORACLE 11G迁移过程记录之一-表 使用Oracle Sql Developer将SQL ...
- MS Sql server 2008 学习笔记
数据库中常用的概念 Sql本身是一个服务器,没有界面,Management Studio 只是一个SQL Server管理工具而已,不是服务器. Sql server 在管理工具下面的服务SQL S ...
- SQL Server 2008 FILESTREAM特性管理文件
在SQL Server 2008中,新的FILESTREAM(文件流)特性和varbinary列配合,你可以在服务器的文件系统上存储真实的数据,但可以在数据库上下文内管理和访问,这个特性让SQL Se ...
- SQL Server 2008 R2——学习/练习/错误/总结/搜集
==================================声明================================== 本文原创,转载在正文中显要的注明作者和出处,并保证文章的完 ...
- sql server 2008 数据库的完整性约束
一.数据库完整性概述 1.数据库的完整性: ①数据库的完整性是指数据的正确性和相容性 ②数据库完整性是防止不合语义或不正确的数据进入数据库 ③完整性体现了是否真实地反映现实世界 例: 学 ...
随机推荐
- Flot Reference flot参考文档
Consider a call to the plot function:下面是对绘图函数plot的调用: var plot = $.plot(placeholder, data, options) ...
- uniDAC使用sqlite3作为 IOS APP 的数据库存在的问题
前面有写,可以利用uniConnection的ForceCreateDatabase参数,强制建立sqlite本地数据库, uniConnection1.SpecificOptions.Values[ ...
- 腾讯移动Web整体解决方案Spirit
Spirit(勇气号),美国航天局NASA派往Mars(火星)的第一艘探测器.移动Web开发是一块新的领域,甚至有很多坑,这一点与人类从未踏上的Mars(火星)相似.为了避免开发者重复遇到相同的问题, ...
- IT++数学、信号、通讯类库,Blitz++数学,Armadillo 线性代数,Dlib网络,线程,图形,数学,图像,数据挖掘/机器学习,XML等等
https://en.wikipedia.org/wiki/Blitz%2B%2B https://en.wikipedia.org/wiki/IT%2B%2B https://en.wikipedi ...
- request的跳转
使用request.getRequestDispather(url).forword(request,response)方法跳转页面 地址栏的路径不会发生改变,在后续的ajax调用 使用window. ...
- ORACLE(student)表习题与答案
因为答案都是小编自己写的,解法可能有多种,如果您觉得我的解法有误,希望您有时间给我留言. 题目:1. 查询student表中的所有记录的sname.ssex和class列. SELECT sname, ...
- Spring Boot的学习之路(02):和你一起阅读Spring Boot官网
官网是我们学习的第一手资料,我们不能忽视它.却往往因为是英文版的,我们选择了逃避它,打开了又关闭. 我们平常开发学习中,很少去官网上看.也许学完以后,我们连官网长什么样子,都不是很清楚.所以,我们在开 ...
- Linux常用实用命令
Linux是我们开发人员必不可少的系统,也是经常接触到的.然而,Linux命令比较多,有些不常用也难记住.那么,我们如何更高效的使用Linux命令,而又不必全面地学习呢?今天就给大家分享一下我在开发过 ...
- Python自学day-11
一.RabbitMQ概述 RabbitMQ是一种消息队列,是一个公共的消息中间件,用于不同进程之间的通讯. 除了RabbitMQ以外,还有ZeroMQ.ActiveMQ等等. 前面学习了两种队列: 线 ...
- 【工具】读取proprtties工具类
获取properties内容: 基本的使用看网络上大多是这样的,使用时注意线程安全以及读写的实时性问题. 1.直接通过流读取(反射): InputStream inStream = this.get ...