【数据库】SQL Server 查询条件小技巧:ISNULL 函数的使用,有请DeepSeek来辅助讲解下

大家好,我是全栈小5,欢迎来到《小5讲堂》。
这是《Sql Server》系列文章,每篇文章将以博主理解的角度展开讲解。
温馨提示:博主能力有限,理解水平有限,若有不对之处望指正!

在这里插入图片描述

前言

有位朋友反馈,直接使用等于值条件查询发现无法把null空筛选出来,今天试了下确实是如此,刚好看到isnull函数可以将null设置成某个默认值进行查询,比如?还是有请DeepSeek来辅助讲解下。

实例

select * from(
	select 1 as ID,null as Field1
	union all
	select 2 as ID,'Y' as Field1
	union all
	select 3 as ID,'N' as Field1
	union all
	select 4 as ID,null as Field1
	union all
	select 5 as ID,'Y' as Field1
	union all
	select 6 as ID,'' as Field1
) as a
where isnull(a.Field1,'N')<>'Y'

在这里插入图片描述

在这里插入图片描述

ISNULL 函数的使用

这个查询使用了 SQL Server 中的 ISNULL 函数来处理可能为 NULL 的字段值:

SELECT * FROM TableName WHERE ISNULL(Field, 'N') <> 'Y'

解释

这个查询的目的是从 TableName 表中选择所有记录,其中 Field 字段的值不等于 ‘Y’,包括那些 Field 为 NULL 的记录。

  • ISNULL(Field, 'N'):如果 Field 为 NULL,则返回 ‘N’,否则返回 Field 的实际值
  • <> 'Y':不等于 ‘Y’ 的条件

等效的其他写法

  1. 使用 COALESCE(标准 SQL 函数,在多个数据库中通用):

    SELECT * FROM TableName WHERE COALESCE(Field, 'N') <> 'Y'
    
  2. 使用 CASE 语句:

    SELECT * FROM TableName WHERE CASE WHEN Field IS NULL THEN 'N' ELSE Field END <> 'Y'
    
  3. 使用 OR 条件:

    SELECT * FROM TableName WHERE Field <> 'Y' OR Field IS NULL
    

使用场景

这种技巧常用于处理业务逻辑中的三态标志:

  • ‘Y’ 表示"是"
  • NULL 或其他值表示"否"
  • 查询需要找出所有非"是"的记录

性能考虑

在大型表上,这种表达式可能会阻止索引的使用。如果 Field 上有索引,更高效的写法可能是:

SELECT * FROM TableName WHERE Field IS NULL OR Field <> 'Y'

这样可以更好地利用索引。

文章推荐

【数据库】SQL Server 查询条件小技巧:ISNULL 函数的使用,有请DeepSeek来辅助讲解下

【Sql Server】在SQL Server中生成雪花ID(Snowflake ID)

【Sql Server】使用row_number over方式进行表分页,数据量达到五千多条记录后,查询变慢需要20多秒的解决方案

【Sql Server】随机查询一条表记录,并重重温回顾下自定义函数的封装和使用

【Sql Server】锁表如何解锁,模拟会话事务方式锁定一个表然后进行解锁

【Sql Server】通过Sql语句批量处理数据,使用变量且遍历数据进行逻辑处理

【新星计划回顾】第六篇学习计划-通过自定义函数和存储过程模拟MD5数据

【新星计划回顾】第四篇学习计划-自定义函数、存储过程、随机值知识点

【Sql Server】Update中的From语句,以及常见更新操作方式

【Sql server】假设有三个字段a,b,c 以a和b分组,如何查询a和b唯一,但是c不同的记录

【Sql Server】新手一分钟看懂在已有表基础上修改字段默认值和数据类型

总结:温故而知新,不同阶段重温知识点,会有不一样的认识和理解,博主将巩固一遍知识点,并以实践方式和大家分享,若能有所帮助和收获,这将是博主最大的创作动力和荣幸。也期待认识更多优秀新老博主。

评论 47
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

全栈小5

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值