你真的理解T-sql中的NULL吗?
NULL不表示什么?
NULL不表示空字符串,不表示0。
NULL表示什么?
NULL表示不知道是什么,就是说NULL的原意是不知道是什么,表示可能什么都是。
NULL与?做比较
PRINT (Case When NULL!='Value' Then 'true' else 'false' end)
PRINT (Case When NULL!=NULL Then 'true' else 'false' end)
PRINT (Case When NULL=NULL Then 'true' else 'false' end)
大家猜一下上面的4行表达式会返回什么?,答案在下面

为什么会有这样的结果呢?
答案在MSDN上:
A value of NULL indicates that the value is unknown. A value of NULL is different from an empty or zero value. No two null values are equal. Comparisons between two null values, or between a NULL and any other value, return unknown because the value of each NULL is unknown.
既然如此,那我们应该怎样与NULL值做比较呢,答案是用ISNULL函数,T-sql中ISNULL函数有两个参数,第一个参数是要检查是否为NULL的表达式,第二个参数是如果要检查表达式为NULL时函数的返回值。
NULL与其他数值做运算
PRINT 1 + NULL;
PRINT 'yukaizhao' + NULL;
DECLARE @d datetime;
SET @d = GETDATE();
PRINT @d + NULL;
大家猜一下上面的语句会PRINT出来什么?
答案是什么都没有,所有运算都和PRINT NULL是相同结果,结果还是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()函数的两种方法。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架