还不懂COALESCE函数吗,这篇文章带你理解透彻

231 阅读3分钟

在实际的开发中,有一个经常被我们被低估了的SQL函数,COALESCE,它主要用于处理数据中的NULL值。

这个函数强在哪点呢?它能够接受多个参数,并返回第一个非NULL的参数值。如果所有参数都是NULL,则返回NULL。这样一看,是不是就方便许多了,和我们Stream流中的Optional.empty()有异曲同工之妙了!

在这里插入图片描述

COALESCE函数的语法

首先,COALESCE函数的语法非常简单:

COALESCE(value1, value2, value3, ...)

在上面我们列出的语法中,value1, value2, value3, ... 是要检查的多个值。COALESCE函数会按照参数的顺序依次检查每个值,如果其中某个值不为NULL,就立即返回这个值。如果所有参数都是NULL,则返回NULL。非常容易理解,其实这个函数在实际的开发中也有很多应用场景。举个栗子大家一起复习一下!

在这里插入图片描述

COALESCE函数的应用场景

我经常使用这个函数用来做数据填充:

在我们的数据库表中,某些列可能存在NULL值。使用COALESCE函数,我们可以方便地用一个默认值来填充这些NULL值。拿我的课设来说,我们现在有一个employees表,其中bonus列可能存在NULL值,我们想要用默认值0来填充这些NULL值,就可以这样写:

SELECT id, name, COALESCE(bonus, 0) AS new_bonus FROM employees;

上面是我们很普遍的用法,同时,它也可以让我们处理更加复杂查询条件。

同样以毕设为例,我们还有一个orders表,其中delivery_date和order_date列都可能存在NULL值。如果我们想要查找所有在2025年1月1日之后交付或者下单的订单,可以这样写:

SELECT * FROM orders WHERE COALESCE(delivery_date, order_date) > '2025-01-01';

这样写我们就可以获取多个值中的第一个非NULL值!!!

在看完上面的骚操作后我们也能发现,COALESCE函数的一个显著优势在于它能够接受多个参数,并返回第一个非NULL的值。这个功能在处理包含多个可能为空值的列时非常有用。

COALESCE函数与其他类似函数的比较

在Oracle 和SQL中,还有一些其它的判空函数。与NVL或者ISNULL这些函数相比,COALESCE函数的优势在于它能够接受多个参数,提供给我们更灵活的处理方式。

举个栗子,ISNULL函数只接受两个参数,而COALESCE函数可以接受任意数量的参数。这样看来COALESCE函数在处理包含多个可能为空值的列时更加有用。何乐而不为呢铁铁!!!

使用COALESCE注意事项

虽然COALESCE这个函数好用,但是在使用COALESCE这个函数时,一定一定要注意确保参数类型一致(我就没注意到哈哈哈),应确保所有参数的数据类型一致。如果参数类型不一致,会导致函数返回错误的结果且抛出异常。

虽然COALESCE函数能够处理多个参数,但是在实际的使用中,避免将不必要的计算或函数调用作为参数传递给COALESCE函数。这样可以提高查询性能并减少不必要的资源消耗。

文章总结

COALESCE函数是SQL中一个非常有用的函数,在公司实际的开发中,它简化了我NULL值处理的过程,大家在写SQL的时候也可以多使用下。

本篇文章到这里就结束了,后续会继续分享相关的知识,感谢各位小伙伴们的支持!

在这里插入图片描述