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

MySQL IF 和 IFNULL 用法详解

在 MySQL 开发中,条件判断空值处理是非常常见的需求。其中,IFIFNULL是最常用的两个函数。


文章目录

    • 一、IF 函数详解
      • 1. 基本语法
      • 2. 基础示例
      • 3. 实战示例
        • 示例1:判断成绩是否及格
        • 示例2:根据金额分类
      • 4. IF 的嵌套使用
    • 二、IFNULL 函数详解
      • 1. 基本语法
      • 2. 基础示例
      • 3. 实战示例
        • 示例1:处理 NULL 值
        • 示例2:计算时避免 NULL
    • 三、IF vs IFNULL 核心区别
    • 四、组合使用示例
    • 五、常见坑点总结
      • 1. NULL 参与计算问题
      • 2. IF 不是流程控制语句
      • 3. 嵌套过多影响可读性
    • 六、扩展:CASE WHEN(推荐)
    • 参考

一、IF 函数详解

1. 基本语法

IF(condition,value_if_true,value_if_false)

含义:

如果 condition 为真,返回 value_if_true,否则返回 value_if_false。


2. 基础示例

SELECTIF(1>0,'yes','no');

结果:

yes

3. 实战示例

示例1:判断成绩是否及格
SELECTname,score,IF(score>=60,'及格','不及格')ASresultFROMstudent;

示例2:根据金额分类
SELECTamount,IF(amount>1000,'高消费','普通消费')ASlevelFROMorders;

4. IF 的嵌套使用

SELECTscore,IF(score>=90,'优秀',IF(score>=60,'及格','不及格'))ASlevelFROMstudent;

说明:

IF 可以嵌套实现多条件判断。


二、IFNULL 函数详解

1. 基本语法

IFNULL(expr1,expr2)

含义:

如果 expr1 不为 NULL,返回 expr1,否则返回 expr2。


2. 基础示例

SELECTIFNULL(NULL,'默认值');

结果:

默认值

3. 实战示例

示例1:处理 NULL 值
SELECTname,IFNULL(phone,'未填写')ASphoneFROMuser;

示例2:计算时避免 NULL
SELECTprice*IFNULL(quantity,0)AStotalFROMorders;

说明:

防止 NULL 参与计算导致结果为 NULL。


三、IF vs IFNULL 核心区别

对比维度IFIFNULL
功能条件判断空值处理
参数个数3 个2 个
判断方式任意条件是否为 NULL
使用场景分支逻辑默认值处理

IF 用来“做判断”,IFNULL 用来“补空值”。


四、组合使用示例

在实际开发中,经常会组合使用:

SELECTname,IF(IFNULL(score,0)>=60,'及格','不及格')ASresultFROMstudent;

逻辑:

  1. 先用 IFNULL 处理空值
  2. 再用 IF 判断

五、常见坑点总结

1. NULL 参与计算问题

SELECT1+NULL;

结果:

NULL

解决:

SELECT1+IFNULL(NULL,0);

2. IF 不是流程控制语句

注意:

  • IF 是函数(表达式)
  • 不是存储过程里的 IF 语句

3. 嵌套过多影响可读性

建议:

多条件优先使用 CASE WHEN。


六、扩展:CASE WHEN(推荐)

SELECTscore,CASEWHENscore>=90THEN'优秀'WHENscore>=60THEN'及格'ELSE'不及格'ENDASlevelFROMstudent;

优点:

  • 可读性更强
  • 更适合复杂逻辑

参考

https://dev.mysql.com/doc/refman/8.0/en/flow-control-functions.html#function_if

https://dev.mysql.com/doc/refman/8.0/en/flow-control-functions.html#function_ifnull

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

相关文章:

  • 抢抓AI发展红利,钧略AIGEO助力企业高效获客 - 企业推荐官【官方】
  • springboot+vue基于web的线上超市团购系统的设计与实现
  • AI安全:从技术加固到体系化防御的实战演进
  • 别再只查基因列表了!深度解析MSigDB中Hallmark基因集的生物学意义与科研应用场景
  • 实战react项目:基于快马ai快速构建包含图表与导航的用户数据仪表盘
  • 字符串(字符数组) 速览功能
  • 优先选择钧略AI:携手合作伙伴,共拓AI搜索优化新未来 - 企业推荐官【官方】
  • PDF转Markdown神器MinerU 2.5:支持多栏、表格、公式,效果实测
  • OpCore-Simplify:从3天到15分钟的黑苹果配置革命
  • springboot+vue基于web的咖啡点单程序设计
  • 实战应用:基于编译原理,利用快马AI构建你的首个代码压缩工具
  • 「Elasticsearch 底层原理与性能调优全攻略」
  • ArcGIS Desktop图例设置避坑指南:为什么你的图例总对不齐?从布局视图到符号系统的全流程解析
  • 扎根合肥,老钱全屋定制工厂以实力服务万家 - 企业推荐官【官方】
  • Alibaba DASD-4B Thinking 对话工具与.NET生态集成:开发企业级智能应用
  • 让Agent真正“行动”起来,Agent Skill开发者大赛正式启动!
  • 别再只看CPU跑分了!用Stream实测内存带宽,教你给服务器/PC内存性能“把把脉”
  • 京东科技重磅发布ClawTip,为AI Agent生态打造新型支付基础设施
  • 用C语言实现唐诗输入输出
  • 轻断食期间吃什么代餐不掉肌肉?2026年五款低脂减脂代餐产品实测与选购建议 - 企业推荐官【官方】
  • 软件测试员避坑指南:从‘不可复现的Bug’上报到‘风险测试’实战
  • Topologically Advanced Ultrahigh-Q Guided Reson...
  • 通义千问3-VL-Reranker-8B效果惊艳:文化符号(如‘龙’‘灯笼’)跨模态语义理解
  • Qwen3-TTS伦理指南:负责任使用语音克隆技术
  • 开源语音识别模型选型:SenseVoice-Small ONNX vs Paraformer轻量版对比
  • 面试录音复盘:SQL 去重被追问到卡壳,distinct / group by / row_number 到底差在哪?
  • 揭秘Cuvil官方未文档化的--enable-unsafe-fp16标志:实测提速33%但引发梯度爆炸的隐藏代价
  • 钧略AIGEO:以专业AI搜索优化 打造企业智能获客新引擎 - 企业推荐官【官方】
  • 如何高效配置Windows安卓子系统:完整的专业开发指南
  • Kong Manager 实战指南:从安装到配置全流程解析