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

目录
前言
有时候数据库你接触多了,就会知道一些技巧,说实在有时候博主没有接触到,我可能还是会用普通方式去判断,这样就会存在漏数据的情况。
所以,平时去积累一些技巧还是非常有必要的。
ISNULL用法
在 SQL Server 中,ISNULL
函数只接受两个参数,不支持三个参数的情况。
博主刚开始是这么用的 ISNULL(t11.ItemCode,'Y','N')
,这种写法是错误的。
ISNULL
函数的正确语法是:
sql
ISNULL(check_expression, replacement_value)
case when用法
如果需要实现类似三个参数的功能(当字段为 NULL 时返回 'Y',否则返回 'N'),可以使用 CASE WHEN
表达式:
sql
CASE WHEN t11.ItemCode IS NULL THEN 'Y' ELSE 'N' END
iif
或者使用更简洁的 IIF
函数(SQL Server 2012 及以上版本支持):
sql
IIF(t11.ItemCode IS NULL, 'Y', 'N')
查询小技巧
技巧一
使用 CONCAT
安全地拼接字符串
问题: 传统的用加号 +
拼接字符串时,如果任何一个字段为 NULL
,整个结果都会变成 NULL
。
旧方法(有风险):
sql
SELECT FirstName + ' ' + LastName AS FullName
FROM Employees;
-- 如果 FirstName 或 LastName 为 NULL,FullName 就会显示为 NULL
小技巧(使用 CONCAT
):
sql
SELECT CONCAT(FirstName, ' ', LastName) AS FullName
FROM Employees;
好处:
CONCAT
函数会自动将NULL
值视为空字符串''
来处理。- 即使
FirstName
或LastName
为 NULL,其他部分依然会正常拼接,最终结果不会是 NULL。 - 代码更简洁易读。
技巧二
使用 EXISTS
代替 IN
来检查存在性
问题: 当使用 IN
子查询时,数据库需要先执行整个子查询,返回所有结果集,然后再进行主查询和子查询结果的匹配,如果子查询结果集很大,性能会较差。
旧方法(可能低效):
sql
SELECT *
FROM Customers
WHERE CustomerID IN (
SELECT DISTINCT CustomerID
FROM Orders
WHERE OrderDate > '2023-01-01'
);
小技巧(使用 EXISTS
):
sql
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三种方式的使用和空值判断
【数据库】如何使用一款轻量级数据库SqlSugar进行批量更新,以及查看最终的Sql操作语句
【数据库】使用Sql Server将分组后指定字段的行数据转为一个字段显示,并且以逗号隔开每个值,收藏不迷路
【数据库】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】新手一分钟看懂在已有表基础上修改字段默认值和数据类型
总结:温故而知新,不同阶段重温知识点,会有不一样的认识和理解,博主将巩固一遍知识点,并以实践方式和大家分享,若能有所帮助和收获,这将是博主最大的创作动力和荣幸。也期待认识更多优秀新老博主。