coalsece 函数简介
在 MySQL 中COALESCE()是一个非常好用的流程控制函数。它的核心作用是按顺序检查参数列表返回第一个非 NULL 的值。函数语法sqlCOALESCE(value1, value2, ..., valueN)参数可以传入多个参数至少 2 个。返回值返回参数列表中第一个不为 NULL的值。如果所有参数都为 NULL则返回 NULL。通俗理解可以把COALESCE()想象成一个保安他按顺序检查你给的一排人先问第一个人你有值吗如果有就把他带回来返回这个值如果没有是 NULL就丢掉继续问下一个如果所有人都没有值全是 NULL就空手回来返回 NULL简单示例sql-- 第一个值是 NULL取第二个 SELECT COALESCE(NULL, hello, world); -- 结果hello -- 前两个都是 NULL取第三个 SELECT COALESCE(NULL, NULL, world, test); -- 结果world -- 全为 NULL SELECT COALESCE(NULL, NULL, NULL); -- 结果NULL实际业务场景1. 为 NULL 字段提供默认值查询时如果某个字段是 NULL用默认值替代sql-- 如果 nickname 是 NULL显示为 匿名用户 SELECT id, COALESCE(nickname, 匿名用户) AS display_name, email FROM users;2. 在计算中处理 NULL计算时NULL 参与任何运算结果都是 NULL用COALESCE可以规避sql-- 如果 commission 是 NULL按 0 计算 SELECT name, salary COALESCE(commission, 0) AS total_income FROM employees;3. 多字段优先级取值从多个字段中取第一个有值的常见于电话号码、地址等场景sql-- 优先取手机号没有则取固定电话再没有取紧急联系人电话 SELECT name, COALESCE(mobile_phone, home_phone, emergency_phone, 无联系方式) AS contact FROM customers;4. 结合其他函数使用sql-- 结合 NULLIF如果为空字符串也转为默认值 SELECT COALESCE(NULLIF(remark, ), 无备注) AS remark FROM orders;这里NULLIF(remark, )的作用是如果remark是空字符串就转为NULL然后COALESCE再把它替换为无备注。5. 在更新语句中使用sql-- 更新时如果新值为空则保留原值 UPDATE products SET price COALESCE(new_price, price), -- 新价格为空则不变 discount COALESCE(new_discount, discount) -- 新折扣为空则不变 WHERE id 100;与其他函数的区别函数作用参数数量区别COALESCE()返回第一个非 NULL多个通用、灵活IFNULL(expr1, expr2)如果 expr1 是 NULL返回 expr2否则返回 expr12 个MySQL 特有只能处理 2 个值NULLIF(expr1, expr2)如果 expr1 expr2返回 NULL否则返回 expr12 个用于条件性地制造 NULLIF(condition, true_val, false_val)条件判断返回不同值3 个类似三目运算符sql-- IFNULL 只能处理两个参数 SELECT IFNULL(nickname, 匿名用户) FROM users; -- COALESCE 可以处理多个 SELECT COALESCE(wechat, mobile, email, 无联系方式) FROM users;性能说明COALESCE()是短路函数它会从第一个参数开始依次判断一旦找到非 NULL 的值就不会再计算后面的参数。sql-- 如果 name 不为 NULL后面的子查询不会执行 SELECT COALESCE(name, (SELECT COUNT(*) FROM huge_table)) FROM users;总结要点说明功能返回第一个非 NULL 的值语法COALESCE(value1, value2, ...)场景空值替换、默认值、多字段优先级取值、计算防 NULL优点简洁、可读性强、支持多参数、短路求值注意所有参数都为 NULL 时返回 NULLCOALESCE()是 SQL 标准函数不仅 MySQLOracle、PostgreSQL、SQL Server 等都支持非常通用掌握它几乎是日常开发必备技能。