Mysql进阶四:常见函数-流程控制函数

进阶四:流程控制函数

  • 作者:alicomon
  • 寄语读者:
    博客为学习记录,目的有二:
  1. 记录知识点,方便温故知新;
  2. 为读者提供帮助,用于交流,共同提高。

流程控制函数,可好玩了~

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';

在这里插入图片描述


发布了116 篇原创文章 · 获赞 58 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/QQQZSJ/article/details/104108424