NULL值和ISNULL函数

NULL值
NULL 表示"没有值"。
NULL并不等同于0或者空格。
在查询过程中用两个字段进行比较时,如果出现null值,就不能再用等号进行比较。

原因是:Null 值代表的是一个缺少的值或不可知的值,所以无法判断一个不可知的值是否等于另一个。所以用等号(或者其他运算符)把任何值和null进行比较总是会返回unknown。即使对两个null值进行比较(null=null)也是会返回unknown。

如果坚持进行比较,可以尝试使用 ISNULL函数,转化后再进行比较。
ISNULL函数的语法:
用指定的替换值来替换NULL
ISNULL(check_expression,replacement_expression)
如果check_expression的表达式不为null,则返回该表达式的值,否则返回replacement_expression.
replacement_expression 的数据类型和check_expression的数据类型要一致。
例如:在查询时设置过滤条件时,
查询成绩小于70的学生
WHERE ISNULL(score,0)<70;

还比如 需要转换数据类型(ISNULL和convert结合使用)
where ISNULL(Convert(nvarchar,‘order.date’),‘unknown’)=ISNULL(Convert(nvarchar,‘sales.date’),‘unknown’);

上面有说道, Null 值代表的是一个缺少的值或不可知的值,所以无法判断一个不可知的值是否等于另一个。
所以,sql提供了连个谓词IS NULL和IS NOT NULL,来替代=NULL和<>NULL。

sql支持使用NULL来表示缺少的值,它使用的是三值谓词逻辑,意味着计算结果是True,False和Unknown。
通过一个实例来分析,在一张表里面查询region='WA’的所有客户:
select custid,region
from Sales.Customers
where region=‘WA’;
在这里插入图片描述
但是查询region不等于WA的所有客户:
select custid,region
from Sales.Customers
where region<>‘WA’;

返回的记录却不全(只有28行),因为等于null的那一部分记录没有返回。

想查找region是null的所有行,如果使用谓词region=null这个表达式,对所有行的计算结果都是Unknown,返回的则是一个空的结果集。
select custid,region
from Sales.Customers
where region=null;
在这里插入图片描述
所以想返回region列不等于WA的所有列(既包括region列有值,但不为WA的那些行,也包括region列缺少值的那些行),则需要在查询过滤条件中显示的增加一个对null值得测试。
select custid,region
from Sales.Customers
where region <>‘WA’
or region is null;

T-SQL 是把null值排在了有效值之前。要想把null值输出结果放在最后,可以对结果进行排序。
select custid,region
from Sales.Customers
where region <>‘WA’
or region is null
order by
case when region is null then 1 else 0 end,region.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值