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.数据库的完整性: ①数据库的完整性是指数据的正确性和相容性 ②数据库完整性是防止不合语义或不正确的数据进入数据库 ③完整性体现了是否真实地反映现实世界 例: 学 ...
随机推荐
- Win10商店芒果TV UWP版更新,新增后台视频下载
湖南卫视旗下唯一官方视频平台<芒果TV>近日向Win10商店提交了芒果TV UWP V3.0.0版,这次为广大Win10平台用户带来了期待已久的重大功能和更新,可谓是良心厂商,值得鼓励和支 ...
- mysql 配置 explicit_defaults_for_timestamp
在之前的配置中,除了目录之外,唯独添加了这一项配置,为什么? 因为mysql中timestamp类型和其他的类型不一样: 在之前先了解一下current timestamp和on update cur ...
- Caliburn.Micro 自定义View和ViewModel的匹配规则
使用TypeMappingConfiguration类 //Override the default subnamespaces var config = new TypeMappingConfigu ...
- UWP实现时钟
UWP现在的开发确实很方便,不过资料真的好少啊... 前些天看到同学有实实现自定义的时钟,这东东挺简单的,就自己也写个,没成想,遇到个坑,费了好长时间,记下来一下. 效果图: 画个圆,三条线就好.XA ...
- Docker Explanation and Apache Image
https://blog.sajjan.com.np/2017/02/05/docker-getting-started-containers-ubuntu/ https://blog.sajjan. ...
- Qt4.7.4下单独编译QtWebkit
最近编译出了Qt4.7.4的嵌入式版本,但没有编译QtWebkit库.在编译一个使用Webkit的工程时出错,而根据工程的需要,要单独编译QtWebkit库. 由于不想再次编译整个的Qt库,于是 ...
- MYSQL的全局变量和会话变量
系统变量又分为全局变量与会话变量. 全局变量在MYSQL启动的时候由服务器自动将它们初始化为默认值,这些默认值可以通过更改my.ini这个文件来更改. 会话变量在每次建立一个新的连接的时候,由MYSQ ...
- Spark学习之路(十二)—— Spark SQL JOIN操作
一. 数据准备 本文主要介绍Spark SQL的多表连接,需要预先准备测试数据.分别创建员工和部门的Datafame,并注册为临时视图,代码如下: val spark = SparkSession.b ...
- Java 添加、修改PPT幻灯片中的表格
本文将介绍通过Java编程在PPT操作表格的方法.包括添加表格到PPT幻灯片,并设置表格样式.单元格对齐方式.单元格背景色.边框样式.字体.字号.合并单元格等:同时,通过加载已有表格的幻灯片也可以对表 ...
- Java学习笔记——三层架构
Layer: UI层: user interface 用户接口层 Biz层: service business login layer 业务逻辑层 DAO层: Date Access Obje ...