欢迎光临
我们一直在努力

coalsece 函数简介

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


函数语法

sql

COALESCE(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,否则返回 expr1 2 个 MySQL 特有,只能处理 2 个值
    NULLIF(expr1, expr2) 如果 expr1 = expr2,返回 NULL,否则返回 expr1 2 个 用于条件性地制造 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 等都支持),非常通用,掌握它几乎是日常开发必备技能。

    赞(0)
    未经允许不得转载:171主机测评 » coalsece 函数简介
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址