流程函数也是一类很常见的一类函数,可以根据不同的条件,执行不同的处理流程,可以在sql语句中实现筛选,从而提高语句效率。
函数 | 用法 |
IFNULL(value,value1,value2) | 如果value的值为TRUE,返回value1,否则返回value2 |
IF NULL (value1,value2) | 如果value1不为NULL,返回value1,否 则返回value2 |
CASE WHEN 条件1 THEN 结果1 WHEN 条件2 THEN 结果2 .... [ELSE resultn] END | 如果val1为true,返回res1,...否则返回default默认值 |
CASE[expr] WHEN [val1] THEN[res1] ... ELSE[default] END | 如果expr的值等于val1,返回res1,..否则返default默认值 |
# IF (VALUE,VALUE1,VALUE2)
SELECT last_name,salary,IF(salary >= 6000,'高工资','低工资') "details"
FROM employees;如果查询的员工的工资大于等于 6000 就会返回高工资,反而不超过6000 属于 低工资
# IF commission_pct 不为空(IS not null) 返回自身 commission 如果为空则返回0.
SELECT last_name,commission_pct,IF(commission_pct IS NOT NULL,commission_pct,0)"details"
FROM employees;IF 字(段 ISNULL, 字段本身,0 )
# IFNULL (VALUE1,VALUE2) 如果为空(NULL) 返回value2,不为空返回value1
SELECT last_name,commission_pct,IFNULL(commission_pct,0)"details"
FROM employees;
# CASE WHEN ... THEN ... WHEN ... THEN ... ELSE ...END
SELECT last_name,salary,CASE WHEN salary >= 15000 THEN '高级工程师'
WHEN salary >= 12000 THEN '项目处理专家'
WHEN salary >= 8000 THEN '程序员'
ELSE '业务经理' END
FROM employees;什么意思呢? 查询员工姓名 和工资,如果工资大于15000它的职称为‘高级工程师’
它的工资小于15000大于12000元 职位为‘项目处理专家’
......
.....
如果都不满足,那他的职位只能是 ‘业务经理’
题目:
查询部门号为 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 AS "details"
FROM`employees`如果exper (department_id) = value1(10)返回 THEN(执行)salary * 1.1,其它如department_id = 20 与 department_id = 10雷同
总结:
还有一些其它函数? 大家先看我先给大家献上,哪里不懂就实操,还是不懂就问csdn
#加密与解密的函数
SELECT MD5('mysql') ,SHA('mysql') FROM DUAL;
#benchmark(n,expr) 将表达式expr重复执行n 次。用于测试MYSQL处理expr表达式所耗费的时间
SELECT BENCHMARK(1000000000,MD5('0000'))
#convert(value using char_code) 将value 所使用的字符编码修改为char_code
SELECT CHARSET("csdn"),CHARSET(CONVERT("csdn" USING "utf8mb4"))