当前位置: 首页 > news >正文

coalsece 函数简介

在 MySQL 中,COALESCE()是一个非常好用的流程控制函数。它的核心作用是按顺序检查参数列表,返回第一个非 NULL 的值


函数语法

sql

COALESCE(value1, value2, ..., valueN)
  • 参数:可以传入多个参数(至少 2 个)。

  • 返回值:返回参数列表中第一个不为 NULL的值。

  • 如果所有参数都为 NULL:则返回 NULL。


通俗理解

可以把COALESCE()想象成一个保安,他按顺序检查你给的一排人:

  1. 先问第一个人:你有值吗?

  2. 如果有,就把他带回来(返回这个值)

  3. 如果没有(是 NULL),就丢掉,继续问下一个

  4. 如果所有人都没有值(全是 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 个用于条件性地制造 NULL
IF(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 时,返回 NULL

COALESCE()是 SQL 标准函数(不仅 MySQL,Oracle、PostgreSQL、SQL Server 等都支持),非常通用,掌握它几乎是日常开发必备技能。

http://www.jsqmd.com/news/1181684/

相关文章:

  • 2026上海劳力士欧米茄卡地亚回收价格|正规门店推荐 - 奢品小当家
  • amd/gpt-oss-20b-BF16-da8w8-torchao-v0.17.0深度解析:CPU端高效部署的20B参数MoE模型来了!
  • 孤能子视角:三十六计之偷梁换柱——分辨率调控
  • Llama-3.2-1B_rai_1.7.1_npu_4K与其他Llama模型的终极对比分析指南
  • Iframe 全屏自适应: 从基础CSS到跨域动态高度的完整解决方案
  • 2026佛山名表回收标杆榜单首发|全域实测,正规变现首选 - 小蝶回收测评
  • 如何免费解锁WeMod高级功能:Wand-Enhancer终极完整指南
  • AI 3:LangChain与LangGraph介绍
  • dbrx-base-FP8-KV模型架构分析:揭秘6144维度、40层、48头注意力机制
  • QtScrcpy终极教程:如何用电脑键盘鼠标玩转手机游戏
  • 2026年昆山免熏蒸托盘生产厂家甄选:出口适配与稳定交付能力盘点 - 速递信息
  • nvfp4量化技术终极指南:Laguna-M.1模型压缩8倍性能无损的秘密
  • 找靠谱育秧土粉土机生产厂家 实体工厂选购全指南 - 热点品牌推荐
  • C++学习(11):拾遗-对9和10的复习_A
  • 合规治理落地实践:智能门锁如何解决网约房身份核验与权限管控难题
  • MySQL面试高频考点:索引优化、SQL执行计划、事务隔离级别与锁机制
  • 从零到一,实战驱动!《Python深度学习与智能车竞赛》全流程项目指南
  • League Akari:英雄联盟智能助手,3大核心功能提升游戏体验
  • LongCat-2.0架构设计原理:MoE与N-gram嵌入的协同优化策略
  • 2026安徽工贸职业技术学院单招复读班官方报名入口及操作指南 - 教育为先
  • Meta-Llama-3.1-8B-Instruct_rai_1.7.1_npu_16K实战案例:如何用16K上下文处理超长文档任务
  • AMD NPU生态发展:Mistral-7B-Instruct-v0.3_rai_1.7.1_npu_4K的未来路线图
  • DAKeyboardControl性能优化:如何高效处理键盘通知与视图更新
  • Git进阶:gh、gh-aw、worktree、Submodule
  • G-Star 精选开源项目推荐|第十九期
  • Ising-Decoder-SurfaceCode-1-Accurate:量子纠错领域的革命性表面码解码器模型
  • 2026筑宅安|嘉兴卫生间漏水专业维修,解决墙面潮湿发霉、渗水到楼下难题 - 筑宅安
  • 密钥管理层实战:基于Go实现去中心化KMS与智能合约权限控制
  • DeepSeek-R1-Distill-Qwen-7B与标准Qwen-7B对比:NPU优化的性能提升分析
  • AWQ量化技术实战:AMD Llama-3.2-1B-Instruct_rai_1.7.1_npu_4K的高效推理优化策略 [特殊字符]