流程处理函数可以根据不同的条件,执行不同的处理流程,可以在sQL语句中实现不同的条件选择。MySQL中的流程处理函数主要包括lF()、IFNULL()和CASE()函数。
| 函数 | 用法 |
|---|---|
| IF(value,value1,value2) | 如果value的值为TRUE,返回value1,否则返回value2 |
| IFNULL(value1,value2) | 如果value1不为NULL,返回value1,否则返回value2 |
| CASE WHEN 条件1 THEN 结果1 WHEN 条件2 THEN 结果2……[ELSE resultn] END | 相当于Java的if..else if…else… |
| CASE expr WHEN 常量值1 THEN 值1 WHEN 常量值1 THEN 值1……[ELSE 值n] END | 相当于Java的switch…case… |
# 流程控制函数# IF(VALUE,VALUE1,VALUE2)SELECT last_name,salary,IF(salary >= 6000,'高工资','低工资') "details"FROM employees;SELECT last_name,commission_pct,IF(commission_pct IS NOT NULL,commission_pct,0) "details",salary * 12 * (1 + IF(commission_pct IS NOT NULL,commission_pct,0)) "annual_sal"FROM employees;# IFNULL(VALUE1,VALUE2):看做是IF(VALUE,VALUE1,VALUE2)的特殊情况SELECT last_name,commission_pct,IFNULL(commission_pct,0) "details"FROM employees;# CASE WHEN ... THEN ...WHEN ... THEN ... ELSE ... END# 类似于java的if ... else if ... else if ... elseSELECT last_name,salary,CASE WHEN salary >= 15000 THEN '白骨精'WHEN salary >= 10000 THEN '潜力股'WHEN salary >= 8000 THEN '小屌丝'ELSE '草根' END "details",department_idFROM employees;SELECT last_name,salary,CASE WHEN salary >= 15000 THEN '白骨精'WHEN salary >= 10000 THEN '潜力股'WHEN salary >= 8000 THEN '小屌丝'END "details"FROM employees;# CASE ... WHEN ... THEN ... WHEN ... THEN ... ELSE ... END# 类似于java的swich ... case.../*练习1查询部门号为 10,20, 30 的员工信息,若部门号为 10, 则打印其工资的 1.1 倍,20 号部门, 则打印其工资的 1.2 倍,30 号部门,打印其工资的 1.3 倍数,其他部门,打印其工资的 1.4 倍数*/SELECT employee_id,last_name,department_id,salary,CASE department_id WHEN 10 THEN salary * 1.1WHEN 20 THEN salary * 1.2WHEN 30 THEN salary * 1.3ELSE salary * 1.4 END "details"FROM employees;/*练习2查询部门号为 10,20, 30 的员工信息,若部门号为 10, 则打印其工资的 1.1 倍,20 号部门, 则打印其工资的 1.2 倍,30 号部门打印其工资的 1.3 倍数*/SELECT employee_id,last_name,department_id,salary,CASE department_id WHEN 10 THEN salary * 1.1WHEN 20 THEN salary * 1.2WHEN 30 THEN salary * 1.3END "details"FROM employeesWHERE department_id IN (10,20,30);
