流程处理函数可以根据不同的条件,执行不同的处理流程,可以在SQL语句中实现不同的条件选择。 MySQL中的流程处理函数主要包括IF()、IFNULL()和CASE()函数。
图片.png

IF(VALUE,VALUE1,VALUE2)

  1. SELECT last_name,salary,IF(salary >= 6000,'高工资','低工资') "details"
  2. FROM employees;
  3. SELECT last_name,commission_pct,IF(commission_pct IS NOT NULL,commission_pct,0) "details",
  4. salary * 12 * (1 + IF(commission_pct IS NOT NULL,commission_pct,0)) "annual_sal"
  5. FROM employees;

IFNULL(VALUE1,VALUE2)

看做是IF(VALUE,VALUE1,VALUE2)的特殊情况

SELECT last_name,commission_pct,IFNULL(commission_pct,0) "details"
FROM employees;

CASE WHEN

CASE WHEN … THEN …WHEN … THEN … ELSE … END
类似于java的if … else if … else if … else

SELECT last_name,salary,CASE WHEN salary >= 15000 THEN '白骨精' 
                 WHEN salary >= 10000 THEN '潜力股'
                 WHEN salary >= 8000 THEN '小屌丝'
                 ELSE '草根' END "details",department_id
FROM employees;

SELECT last_name,salary,CASE WHEN salary >= 15000 THEN '白骨精' 
                 WHEN salary >= 10000 THEN '潜力股'
                 WHEN salary >= 8000 THEN '小屌丝'
                 END "details"
FROM employees;

CASE expr WHEN

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.1
                                     WHEN 20 THEN salary * 1.2
                                     WHEN 30 THEN salary * 1.3
                                     ELSE 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.1
                                     WHEN 20 THEN salary * 1.2
                                     WHEN 30 THEN salary * 1.3
                                     END "details"
FROM employees
WHERE department_id IN (10,20,30);