MySQL - COALESCE() 函数

你好,有抱负的数据库爱好者!今天,我们将深入探讨 MySQL 中一个非常实用的函数——COALESCE()。如果你之前从未听说过它——别担心,在本教程结束时,你将能够像专业人士一样使用它!

MySQL - Coalesce() Function

COALESCE() 函数是什么?

COALESCE() 函数在 MySQL 世界中就像一个超级英雄。它的超能力是什么?在列表中找到第一个非 NULL 值。想象你正在寻找车钥匙,你有一个可能放置的位置列表。COALESCE() 函数就像按顺序检查每个位置直到找到钥匙。一旦找到,它停止查找并返回那个值。

语法

COALESCE(value1, value2, ..., valueN)

这个函数接受任意数量的参数,并返回第一个非 NULL 值。如果所有值都是 NULL,它返回 NULL。

COALESCE() 的基本用法

让我们从一个简单的例子开始:

SELECT COALESCE(NULL, 1, 2, 'three');

结果:1

在这种情况下,COALESCE() 从左到右查看每个值:

  1. 首先,它看到 NULL 并继续。
  2. 然后它找到 1,这不是 NULL,所以它停止并返回 1。

它甚至没有到达 2 或 'three',因为它之前找到了一个非 NULL 值。

现实世界场景

场景 1:默认值

想象你正在构建一个用户配置系统。一些用户可能没有提供所有信息。下面是如何使用 COALESCE() 来帮助:

SELECT
username,
COALESCE(full_name, username) AS display_name,
COALESCE(email, '未提供邮箱') AS contact
FROM users;

这个查询做了两件聪明的事情:

  1. 如果 full_name 是 NULL,它使用用户名作为显示名称。
  2. 如果 email 是 NULL,它显示 '未提供邮箱'。

场景 2:多个后备选项

假设你正在运营一个在线商店并希望显示产品信息:

SELECT
product_name,
COALESCE(sale_price, regular_price, '价格不可用') AS displayed_price
FROM products;

这个查询:

  1. 检查是否有 sale_price。
  2. 如果没有,它查找 regular_price。
  3. 如果两者都是 NULL,它显示 '价格不可用'。

COALESCE() 与计算

COALESCE() 不仅适用于简单值;你还可以用它进行计算!

SELECT
employee_name,
COALESCE(salary * 1.1, base_rate * 40 * 52) AS yearly_income
FROM employees;

这个查询:

  1. 尝试计算工资的 10% 加薪。
  2. 如果 salary 是 NULL,它根据小时工资(假设每周 40 小时,每年 52 周)计算年收入。

COALESCE() 在 WHERE 子句中的使用

你还可以在 WHERE 子句中使用 COALESCE() 来过滤数据:

SELECT * FROM orders
WHERE COALESCE(shipping_date, order_date) < '2023-01-01';

这会找到所有在 2023 年之前发货或下单(如果尚未发货)的订单。

COALESCE() 与 IFNULL()

MySQL 还有一个 IFNULL() 函数,它与 COALESCE() 类似但参数限制为两个:

SELECT
IFNULL(column1, '默认') AS result1,
COALESCE(column1, column2, column3, '默认') AS result2
FROM my_table;

COALESCE() 更灵活,因为它可以处理多个后备选项。

常见错误和小贴士

  1. 顺序很重要:始终将你偏好的值放在前面。
  2. 类型一致性:尽量保持数据类型一致以获得更清晰的结果。
  3. 性能:尽管功能强大,但在大型数据集上广泛使用 COALESCE() 可能会影响查询性能。

实践练习

让我们通过一些练习来巩固你的理解:

  1. 创建一个名为 students 的表,包含以下列:id, name, math_score, science_score, history_score。
  2. 插入一些数据,留一些分数为 NULL。
  3. 编写一个查询来找到每个学生在所有科目中的最高分。
  4. 使用 COALESCE() 显示任何 NULL 分数的 '未尝试'。

结论

COALESCE() 函数是 MySQL 中一个强大的工具,可以帮助你优雅地处理 NULL 值并创建更健壮的查询。记住,它都是关于找到第一个非 NULL 值,就像首先在最可能的地方找到你的钥匙一样!

在你继续 MySQL 之旅时,你会发现 COALESCE() 成为你工具箱中不可或缺的一部分。继续练习,很快你将能够像数据库巫师一样进行合并!

快乐编码,愿你的查询总是返回你期望的结果!

Credits: Image by storyset