今天一不小心在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()函数的两种方法。