进阶四:流程控制函数
- 作者:alicomon
- 寄语读者:
博客为学习记录,目的有二:
- 记录知识点,方便温故知新;
- 为读者提供帮助,用于交流,共同提高。
流程控制函数,可好玩了~
1. if函数 if else 函数
SELECT IF(10>5,'大','小');
此项输出为: 大
SELECT last_name,commission_pct,IF(commission_pct IS NULL,'没奖金,呜呜呜','有奖金,嘻嘻') AS 是否有奖金
FROM employees;
2. case函数(case控制结构)
使用一:switch case
switch(变量或表达式)
{
case 常量1:语句1;break;
case 常量2:语句2;break;
...
case 常量n: 语句n;break;
}
在mysql中:
case 要判断的字段或者表达式
when 常量1 then 要显示的值1或语句;
when 常量2 then 要显示的值2或语句;
...
else 要显示的值n或语句;
end
案例描述:
企业要发年终奖,全年表现优异的部门将会提高工资待遇,具体如下:
部门编号department_id为30的,原始工资的1.1倍作为发放工资;
部门编号department_id为40的,原始工资的1.2倍作为发放工资;
部门编号department_id为50的,原始工资的1.3倍作为发放工资;
其余部门照旧发放工资。
请使用数据库语言,进行实现。
实现语句:
SELECT salary 原始工资,department_id 部门编号,
CASE department_id
WHEN 30 THEN salary*1.1
WHEN 40 THEN salary*1.2
WHEN 50 THEN salary*1.3
ELSE salary
END AS 新工资
FROM employees;
使用二: 类似于 多重if
在mysql中:
CASE
WHEN 条件1 THEN 要显示的值1或语句1
WHEN 条件2 THEN 要显示的值2或语句2
...
ELSE 要显示的值n或语句n
END
案例描述:
某公司由于业务需要,现需要查询员工的工资情并分设等级,要求如下:
如果工资大于20000,显示为A级别
如果工资大于15000,显示为B级别
如果工资大于10000,显示为C级别
否则,显示为D级别。
请运用数据库语言,进行实现。
SELECT salary,
CASE
WHEN salary>20000 THEN 'A'
WHEN salary>15000 THEN 'B'
WHEN salary>10000 THEN 'C'
ELSE 'D'
END AS 等级
FROM employees;
测试题:
1.显示系统当前时间(注意:日期+时间)
2.查询员工号、姓名、工资、以及工资提高百分之十后的结果(NEW salary)
3.注意分析、区别
(1)将员工的姓名按照首字母排序,并写出姓名的长度(LENGTH)
(2)将员工的姓名按名字排序,并写出姓名的长度(LENGTH)
4.做一个查询,产生下面的结果:
<last_name> earns monthly but wants <salary*3>
限制查询15人。
5.使用CASE-WHEN,按照下面的条件:
job grade
AD_PRES A
ST_MAN B
IT_PROG C
SA_REP D
ST_CLERK E
产生下面的结果
Last_name Job_id Grade
king AD_PRES A
答案:
SELECT NOW();
SELECT employee_id,first_name,salary,salary*1.2 AS "new salary"
FROM employees;
(1)
SELECT SUBSTR(last_name,1,1) 首字符,last_name,LENGTH(last_name)
FROM employees
ORDER BY 首字符 ASC;
(2)
SELECT first_name AS 名字,LENGTH(first_name)
FROM employees
ORDER BY 名字 ASC;
两者区别在于,如果按照首字母排序,则排序不会考虑其余字符情况,即仅是首字母排序
按照姓名字符串排序的话,会从名字的第一个字符开始一直排序到名字最后一个字符,是严格意义上的字符排序
SELECT CONCAT(last_name,' earns ',salary,' monthly but wants ',salary*3) AS 输出
FROM employees
LIMIT 15;
SELECT
last_name,
job_id AS job,
CASE job_id
WHEN 'AD_PRES' THEN 'A'
WHEN 'ST_MAN' THEN 'B'
WHEN 'IT_PROG' THEN 'C'
WHEN 'SA_REP' THEN 'D'
WHEN 'ST_CLERK' THEN 'E'
END AS Grade
FROM employees
WHERE job_id = 'AD_PRES';