MsSql

关注公众号 jb51net

关闭
首页 > 数据库 > MsSql > sqlserver isnull、iif、case when

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

作者:全栈小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;

好处:

技巧二

使用 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'
);

好处:

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

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

您可能感兴趣的文章:
阅读全文