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

SQL大师之路 15 条件分支

在数据库查询中,我们经常会遇到需要根据不同条件返回不同结果的场景,虽然这些逻辑可以在应用层处理,但在数据库层面直接处理通常能减少应用层与数据库的交互次数,合并多次查询为一次,从而显著提高执行效率。


文章目录

    • 一、 CASE 表达式
      • 1.1 简单 CASE 模式
      • 1.2 搜索 CASE 模式
    • 二、 IF 函数
    • 三、 使用要点

一、 CASE 表达式

CASE是 MySQL的分支判断语句,它遵循标准 SQL 规范,具有极佳的通用性。下面用employees库演示其用法。

1.1 简单 CASE 模式

当需要进行简单的“等值匹配”时,类似于编程语言中的switch-case。字段会依次与分支中的值进行比较。

语法:其中ELSE语句是可选的,如果没有匹配的分支同时没有ELSE语句,将返回null

CASEcolumn_nameWHENvalue1THENresult1WHENvalue2THENresult2ELSEdefault_resultEND

案例:在 dept_emp 表中,部门编号如 d001, d005 并不直观,通过 CASE 我们可以快速将其映射为中文名称。

SELECTdept_no 部门编号,CASEdept_noWHEN'd001'THEN'市场部'WHEN'd002'THEN'财务部'WHEN'd003'THEN'人力资源'WHEN'd004'THEN'开发部'ELSE'其他部门'END部门名称FROMdepartmentsLIMIT10;

1.2 搜索 CASE 模式

搜索型 CASE 的强大之处在于它不局限于等值匹配,可以组合 AND、OR 以及各种逻辑运算符。

语法

CASEWHENcondition1THENresult1WHENcondition2THENresult2ELSEdefault_resultEND

案例:根据入职年份确定奖金系数,如果入职早于1990或者职位是’Senior Engineer’/‘Manager’ 取最高比例。

SELECTe.emp_no,e.first_name,e.last_name,CASEWHENe.hire_date<'1990-01-01'ORt.titleIN('Senior Engineer','Manager')THEN0.8WHENe.hire_date<'1995-01-01'THEN0.6ELSE0.4END奖金系数FROMemployees eJOINtitles tONe.emp_no=t.emp_no;


二、 IF 函数

IF()是 轻量级的三元运算符,非常适合处理 SQL 查询中简单的“二选一”逻辑。

语法
IF(expr1, expr2, expr3):如果expr1为 TRUE 返回expr2,否则返回expr3

案例:将employees表中的gender(包含值"F",“M”)转换为女/男。

SELECTconcat(last_name,' ',first_name)姓名,IF(gender='F','女','男')性别FROMemployeesLIMIT10;

三、 使用要点

  1. 短路特性:CASE 会按顺序评估WHEN子句。一旦某个条件为真,它就会返回对应结果并停止后续评估。

  2. NULL 值的陷阱:如果在WHEN条件中涉及可能为NULL的字段,务必结合IS NULLIFNULL()处理,否则UNKNOWN的判断结果会导致该条数据直接滑向ELSE分支。

  3. 性能与索引
    尽量在SELECT子句中使用,如果在WHERE子句中使用会导致数据库无法利用索引进行扫描(和函数类似),在大数据量库中会导致性能问题。


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

相关文章:

  • SecGPT-14B开源镜像:永久免费、保留版权的国产安全大模型实践
  • 高效部署开源平台:AI文本生成工具技术指南
  • 从零开始学UE:手把手教你搭建个人资源库(模型/动画/音效全涵盖)
  • 手把手教你用setoolkit+gophish搭建钓鱼邮件系统(附SPF绕过实战)
  • 【底层重构】C语言100篇:从入门到天花板 第28篇
  • 突破硬件性能桎梏:Universal-x86-Tuning-Utility的精准优化解决方案
  • Z-Image-Turbo-rinaiqiao-huiyewunv 快速上手:Windows系统下本地测试与调用指南
  • LDO稳压器设计实战:从PMOS到NMOS的选型避坑指南(附小信号模型分析)
  • 2026跨境咨询及注册代办机构推荐榜:德国公司注册、新加坡公司注册、泰国公司注册、海外公司注册、海外投资备案ODI选择指南 - 优质品牌商家
  • ncmdump终极指南:3步轻松破解网易云音乐NCM加密文件
  • Nanbeige 4.1-3B惊艳案例:AI生成可直接导入GBA模拟器的像素脚本代码
  • 零基础玩转GLM-4-9B-Chat-1M:vllm一键部署,支持1M超长上下文
  • 距离矢量路由算法实战:如何用Python模拟路由器间的信息交换(附代码)
  • 地下车库一氧化碳检测系统究竟该如何安装?
  • 单细胞可视化避坑指南:为什么你的Loupe Browser总卡顿?10xGenomics工程师没告诉你的硬件配置秘密
  • 3步终极指南:如何在AnythingLLM中实现本地语音识别功能
  • PHP命令注入防护指南:从GXYCTF2019 Ping题看shell_exec的安全隐患
  • Office文档预览问题解决:vue-office的零配置集成方案
  • SAP报表设计器核心TCODE全解析:从创建到优化的完整指南
  • 从专家演示到自主操作:手把手构建分层模仿学习系统(基于HDR-IL框架)
  • CST与Matlab联合仿真:轻松搞定超材料编码与排布
  • Z-Image-Turbo-rinaiqiao-huiyewunv 效果展示:基于卷积神经网络的高质量图像生成案例
  • GraalVM native-image编译jar实战:如何将17MB的jar包瘦身到3MB?
  • 2026年房地产法律服务诚信榜单发布,这三家律所凭何脱颖而出? - 2026年企业推荐榜
  • Vivado开发中include与import常见报错解析与实战解决方案
  • MedGemma-X实战教学:三步完成肋骨骨折筛查,AI标注精准定位
  • 酒店空气检测背后的AI审核与IACheck:让客房空气质量报告更清晰可靠
  • 通义千问1.5-1.8B-Chat-GPTQ-Int4算法优化实战教程
  • 【Dify企业级私有化部署黄金架构】:5大核心组件调优清单+3类高并发场景实测TPS提升217%
  • 车辆状态估计模型EKF AEKF:基于Carsim和simulink联合仿真的自适应扩展卡尔曼...