Microsoft SQL Server 2008 技术内幕:T-SQL 查询读书笔记 2

SQL特性:

三值逻辑: 在SQL中谓词(逻辑表达式)的可能取值为 TRUE、FALSE、UNKNOWN,是SQL的特有属性

UNKONW逻辑值 通常出现在涉及 null 值得逻辑比较表达式结果中 

null 值和任何一个值包括其本身相比较得到的结果都是 UNKONW

True的反面是False ,但 UNKNOWN 的反面(NOT UNKNOWN)任然是UNKNOWN 

 

所有查询筛选器 (ON、WHERE、HAVING)都把UNKNOWN当作 FALSE 来处理,但是 CHECK约束中的UNKNOWN值实际上被当作TRUE对待,假设表中包含一个CHECK约束,要求salary 列的值必须大于0,向表中插入salary 为null 的时候可以成功 因为 null>0 等于UNKNOWN ,在CHECK约束中当作TRUE来处理

 

在筛选器(ON、WHERE、HAVING) 中,认为 两个null值是不想等的,因为在筛选器中认为( 两个null值比较等于UNKNOWN)UNKNOWN是false,但是UNIQUE约束、集合运算(如 UNION 和EXCEPT)、以及排序和分组操作中,认为 两个null值是不相等的

如:如果表中一列定义了UNIQUE约束,将无法向表中插入该列值为NULL的两行

GROUP BY 子句会将所有的NULL值分到一个组

ORDER BY子句会将所有NULL值排列在一起

比较两个集合中的行时,集合运算符认为不同的NULL值是相等的。

 

 

SQL的另外一个特性:多个运算符是同时进行计算的

交换两个变量的值,在大多数编程环境中,需要使用一个临时变量,而在SQL中交换两个列的值时,可以使用:

UPDATE TABLE SET C1=C2 

以下UPDATE语句将更新TABLE 中所有的行,为C1列加上更新表操作之前表中C1列中最大的值

UPDATE TABLE SET C1=C1+(SELECT MAX(C1) FROM TABLE)

 

以上操作,从逻辑上讲,应该假设所有的操作都是同事发生的,就好像是在整个操作完成之前,没有修改过表,接着再用计算结果替换原来的值

 

2016/02/04  路过北京 随笔

你可能感兴趣的:(Microsoft SQL Server 2008 技术内幕:T-SQL 查询读书笔记 2)