MySQL高级函数-流程控制函数(if/ifnull/case)

1、if 函数

if函数作用:

根据表达式的某个条件或值结果来执行一组 sql 语句

if 函数的语法格式:

IF(expr,v1,v2)
语法格式说明:

expr:表达式,返回 true、false、null
v1:当expr = true时返回 v1
v2:当expr = false、null 时返回v2

例子:

emp表
SQL分析
  • 查询员工的name、在职状态
  • 在职状态通过 if 函数去判断,返回【在职】or【离职】
select name,if(is_enable = 1,"在职","离职") "在职状态" from emp;
result

2、ifnull函数

ifnull函数的作用

可以判断某个字段的值是否为 null,为 null 则返回预先设定的值;有点像编程里面的三元表达式(只可意会不可言传,不懂三元表达式就忽略吧~)

ifnull的语法格式:

IFNULL(v1,v2)
语法格式说明:
  • 如果 v1 不为 NULL,则 IFNULL 函数返回 v1,否则返回 v2
  • v1、v2 均可以是值或表达式

例子

emp表
SQL分析

若员工的 dept_id 为 null ,则显示【无部门】

select id,name,ifnull(dept_id,"无部门") "部门" from emp;
result

3、case函数

case 函数的作用

  • if 的高级版,类似Java 里面的 switch ... case
  • 通过条件表达式匹配 case 对应的值,然后执行对应的操作

第一种用法:简单的 case 的语法格式

只有一个条件表达式

CASE  <表达式>
   WHEN <值1> THEN <操作>
   WHEN <值2> THEN <操作>
   ...
   ELSE <操作>
END;
语法格式说明:
  • 将 <表达式> 的值 逐一和 每个 when 跟的 <值> 进行比较
  • 如果跟某个<值>相等,则执行它后面的 <操作> ,如果所有 when 的<值>都不相等,则执行 else 的<操作>
  • 如果 when 的<值>都不相等,且没写 else,则会报错!!
  • 语法中end不能缺少

重点注意:如果有多个when,只要<值/表达式>满足,就进行<操作>,就不会继续向下执行了!无法case穿透!无法case穿透!无法case穿透!

例子

emp表
SQL分析

根据部门id进行判断部门名称

-- 注意:以下sql没有case穿透这一说!!!
SELECT name,dept_id,
CASE
        dept_id 
        WHEN 0 THEN  "实习生" 
        WHEN 1 THEN  "销售部" 
        WHEN 2 THEN  "信息部" 
        WHEN 2 THEN  "财务部" 
    ELSE "没有部门" 
    END AS "部门" 
FROM
    emp;
result

第二种用法:可搜索 case 的语法格式

CASE
    WHEN <条件1.1> and <条件1.2> and ... THEN <操作>
    WHEN <条件2.1> and <条件2.2> and ... THEN <操作>
    ...
    ELSE <操作>
END;
语法格式说明
  • 每个 <条件> 都是独立的,可以用 and 来连接多个查询条件
  • 不同 <条件> 是互不关联且互不影响的

例子

emp表
SQL分析

每个条件都是不一样的,可以任意指定查询条件,可简单可复杂

select name,dept_id,
case 
when dept_id=1 and leader != 0 and is_enable !=0 then "销售部在职员工"
when dept_id =2 and leader = 0 and is_enable =0 then "信息部大佬"
when leader = 8 then "任我行大佬"
else "啥都不是"
end
from emp;
result

你可能感兴趣的:(MySQL高级函数-流程控制函数(if/ifnull/case))