SQL大师之路 15 条件分支

发布时间:2026/7/4 8:14:05

SQL大师之路 15 条件分支 在数据库查询中我们经常会遇到需要根据不同条件返回不同结果的场景虽然这些逻辑可以在应用层处理但在数据库层面直接处理通常能减少应用层与数据库的交互次数合并多次查询为一次从而显著提高执行效率。文章目录一、 CASE 表达式1.1 简单 CASE 模式1.2 搜索 CASE 模式二、 IF 函数三、 使用要点一、 CASE 表达式CASE是 MySQL的分支判断语句它遵循标准 SQL 规范具有极佳的通用性。下面用employees库演示其用法。1.1 简单 CASE 模式当需要进行简单的“等值匹配”时类似于编程语言中的switch-case。字段会依次与分支中的值进行比较。语法其中ELSE语句是可选的如果没有匹配的分支同时没有ELSE语句将返回nullCASEcolumn_nameWHENvalue1THENresult1WHENvalue2THENresult2ELSEdefault_resultEND案例在 dept_emp 表中部门编号如 d001, d005 并不直观通过 CASE 我们可以快速将其映射为中文名称。SELECTdept_no 部门编号,CASEdept_noWHENd001THEN市场部WHENd002THEN财务部WHENd003THEN人力资源WHENd004THEN开发部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_date1990-01-01ORt.titleIN(Senior Engineer,Manager)THEN0.8WHENe.hire_date1995-01-01THEN0.6ELSE0.4END奖金系数FROMemployees eJOINtitles tONe.emp_not.emp_no;二、 IF 函数IF()是 轻量级的三元运算符非常适合处理 SQL 查询中简单的“二选一”逻辑。语法IF(expr1, expr2, expr3)如果expr1为 TRUE 返回expr2否则返回expr3。案例将employees表中的gender包含值F,“M”转换为女/男。SELECTconcat(last_name, ,first_name)姓名,IF(genderF,女,男)性别FROMemployeesLIMIT10;三、 使用要点短路特性CASE 会按顺序评估WHEN子句。一旦某个条件为真它就会返回对应结果并停止后续评估。NULL 值的陷阱如果在WHEN条件中涉及可能为NULL的字段务必结合IS NULL或IFNULL()处理否则UNKNOWN的判断结果会导致该条数据直接滑向ELSE分支。性能与索引尽量在SELECT子句中使用如果在WHERE子句中使用会导致数据库无法利用索引进行扫描和函数类似在大数据量库中会导致性能问题。

相关新闻