sql中NULL之恨

今天一不小心在sql中写出以下脚本

select defaultPositionId from TableName where UserId=1100528 and defaultPositionId =null 

执行之后大惊怎么没有结果,使用select * from tableName 该列确实为null怎么查补出来难道自己人品问题于是自己又写了以下判断

if(null=null)
BEgin
  print 'fff'
end
else
begin
  print 'gggg'
end

输出结果如下:

无语难道null与null还有区别。

于是找搜索引擎,在sql中null是一种数据类型,null不能与任何列或者变量使用"="或者"!="去比较

判断某列或者变量为null是只能用is (not) null 去判断这样他的返回值才是true或者false

       关于null的运用

NULL值与索引
如果一个列中有NULL值,那么不可以在这个列上建唯一索引,可以建立非唯一索引;但是如果一个字段有很多行有NULL值,那么在这个字段上建索引效果不佳。所以建议不在在一个频繁出现NULL值的字段上建索引(有待证实)

NULL与排序
NULL参与排序时总是作为最小值存在,即ORDER BY COL ASC时COL为NULL的行在最前面,反之在最后面。

附注:t-sql中三个关于NULL的函数:
ISNULL(check_expression, replacement_value)

check_expression 与 replacement_value 数据类型必须一致 
如果 check_expression 为 NULL,则返回 replacement_value 
如果 check_expression 不为 NULL,则返回 check_expression
 

NULLIF 用于检查两个表达式,语法:
NULLIF(expression, expression)

如果两个 expression 相等,则返回 NULL,该 NULL 为第一个 expression 的数据类型 
如果两个 expression 不相等,则返回第一个 expression

COALESCE()函数可以接受一系列的值,如果列表中所有项都为空(null),那么只使用一个值。然后,它将返回第一个非空值。这一技巧描述了创造性使用SQL Server 中COALESCE()函数的两种方法。

帮助连接:http://msdn.microsoft.com/zh-cn/library/ms172138.aspx

原文地址:https://www.cnblogs.com/Minghao_HU/p/2697085.html