Sql Server数据库中isnull、iif、case when三种方式的用法和空值判断

 更新时间:2025年09月04日 11:04:11   作者:全栈小5  
文章介绍SQL Server中ISNULL的正确用法及CONCAT、EXISTS两大查询技巧,ISNULL仅支持双参数,CONCAT处理NULL避免拼接失效,EXISTS替代IN提升性能,二者分别优化数据可靠性与查询效率,是实用的开发利器,感兴趣的朋友跟随小编一起看看吧

前言

有时候数据库你接触多了,就会知道一些技巧,说实在有时候博主没有接触到,我可能还是会用普通方式去判断,这样就会存在漏数据的情况。
所以,平时去积累一些技巧还是非常有必要的。

ISNULL用法

在 SQL Server 中,ISNULL 函数只接受两个参数,不支持三个参数的情况。
博主刚开始是这么用的 ISNULL(t11.ItemCode,'Y','N') ,这种写法是错误的。

ISNULL 函数的正确语法是:

ISNULL(check_expression, replacement_value)

case when用法

如果需要实现类似三个参数的功能(当字段为 NULL 时返回 ‘Y’,否则返回 ‘N’),可以使用 CASE WHEN 表达式:

CASE WHEN t11.ItemCode IS NULL THEN 'Y' ELSE 'N' END

iif

或者使用更简洁的 IIF 函数(SQL Server 2012 及以上版本支持):

IIF(t11.ItemCode IS NULL, 'Y', 'N')

查询小技巧

技巧一

使用 CONCAT 安全地拼接字符串

问题: 传统的用加号 + 拼接字符串时,如果任何一个字段为 NULL,整个结果都会变成 NULL

旧方法(有风险):

SELECT FirstName + ' ' + LastName AS FullName
FROM Employees;
-- 如果 FirstName 或 LastName 为 NULL,FullName 就会显示为 NULL

小技巧(使用 CONCAT):

SELECT CONCAT(FirstName, ' ', LastName) AS FullName
FROM Employees;

好处:

  • CONCAT 函数会自动将 NULL 值视为空字符串 '' 来处理。
  • 即使 FirstNameLastName 为 NULL,其他部分依然会正常拼接,最终结果不会是 NULL。
  • 代码更简洁易读。

技巧二

使用 EXISTS 代替 IN 来检查存在性

问题: 当使用 IN 子查询时,数据库需要先执行整个子查询,返回所有结果集,然后再进行主查询和子查询结果的匹配,如果子查询结果集很大,性能会较差。

旧方法(可能低效):

SELECT *
FROM Customers
WHERE CustomerID IN (
    SELECT DISTINCT CustomerID 
    FROM Orders 
    WHERE OrderDate > '2023-01-01'
);

小技巧(使用 EXISTS):

SELECT *
FROM Customers c
WHERE EXISTS (
    SELECT 1 
    FROM Orders o 
    WHERE o.CustomerID = c.CustomerID 
    AND o.OrderDate > '2023-01-01'
);

好处:

  • 性能更高EXISTS 是一种关联子查询,一旦找到一条满足条件的记录就会立即返回 True 并停止搜索,避免了处理整个子查询结果集。
  • 语义更清晰EXISTS 直接表达了“是否存在”的逻辑意图。
  • 在子查询结果集很大时,性能提升尤为明显。

这两个技巧一个侧重于数据的可靠性和整洁性,另一个侧重于查询的性能优化,都是日常开发中非常实用的“利器”。

到此这篇关于Sql Server数据库中isnull、iif、case when三种方式的用法和空值判断的文章就介绍到这了,更多相关sqlserver isnull、iif、case when内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 积分获取和消费的存储过程学习示例

    积分获取和消费的存储过程学习示例

    这篇文章主要介绍了积分获取和消费的存储过程学习示例,这个只是学习一下存储过程的使用方法,需要的朋友可以参考下
    2014-03-03
  • SQL Server身份验证模式步骤和示例代码

    SQL Server身份验证模式步骤和示例代码

    SQL Server是一个广泛使用的关系数据库管理系统,通常使用两种身份验证模式:Windows身份验证和SQL Server身份验证,本文将详细介绍身份验证方式的概念以及如何更改SQL Server的身份验证方式,并提供示例步骤和代码,感兴趣的朋友一起看看吧
    2025-05-05
  • Linux环境安装SQL Server数据库以及使用方法详解

    Linux环境安装SQL Server数据库以及使用方法详解

    很多朋友在安装SQL Server的过程中会碰到一些小状况,下面这篇文章主要给大家介绍了关于Linux环境安装SQL Server数据库以及使用方法的相关资料,需要的朋友可以参考下
    2024-02-02
  • 如何得到数据库中所有表名 表字段及字段中文描述

    如何得到数据库中所有表名 表字段及字段中文描述

    最近做一个项目,客户希望可以自己选择想要查看的列表,这样就不好办了,选择列表的名字他们也想自定义,没办法这就需要查看数据表中字段,中文说明,默认标志了
    2011-12-12
  • SQLServer2014故障转移群集的部署的图文教程

    SQLServer2014故障转移群集的部署的图文教程

    本文主要介绍了SQLServer2014故障转移群集的部署的图文教程,文中通过图文介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • sqlSQL数据库怎么批量为存储过程/函数授权呢?

    sqlSQL数据库怎么批量为存储过程/函数授权呢?

    在工作当中遇到一个类似这样的问题:要对数据库账户的权限进行清理、设置,其中有一个用户Test,只能拥有数据库MyAssistant的DML(更新、插入、删除等)操作权限,另外拥有执行数据库存储过程、函数的权限,但是不能进行DDL操作(包括新建、修改表、存储过程等...),于是需要设置登录名Test的相关权限
    2013-08-08
  • MSSQL ISQL命令详解

    MSSQL ISQL命令详解

    MSSQL有简单方便又高效的管理界面,还用ISQL干什么?什么是ISQL工具?ISQL是用于交互式执行Transact-SQL语句和脚本的数据库工具,ISQL同微软的OSQL是差不多的工具。
    2009-10-10
  • 按日期选择最晚日期与最早日期对应的数的差值

    按日期选择最晚日期与最早日期对应的数的差值

    想得到当天的最早时间与最晚时间的number的差值,需要的朋友可以参考下。
    2009-11-11
  • 创建动态MSSQL数据库表

    创建动态MSSQL数据库表

    下面是利用SQL语句创建数据库、表、存储过程、视图、索引、规则、修改表、查看数据等的方法。
    2009-06-06
  • SQL DML数据操作方法

    SQL DML数据操作方法

    这篇文章主要介绍了SQL DML数据操作语言,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2025-05-05

最新评论