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