以前我们在课程中使用过一些sql>mysql的内置函数,比如说四舍五入的round函数,做日期计算的data, datediff函数等等。那么本次课程咱们就来系统的学习一下sql>mysql的这些内置函数,我们使用编程语言写程序的时候,通常会把某一项业务功能封装的函数里边,其实数据库也是这么做的,它为我们预先定义了很多函数,以供我们去使用
一、数字函数
函数 | 功能 | 用例 |
ABS | 绝对值 | ABS(-100) |
ROUND | 四舍五入 | ROUND(4.62) |
FLOOR | 强制舍位到最近的整数 | FLOOR(9.9) |
CEIL | 强制进位到最近的整数 | CEIL(3.2) |
POWER | 幂函数 | POWER(2,3) |
LOG | 对数函数 | LOG(7,3) |
LN | 对数函数 | LN(10) |
SQRT | 开平方 | SQRT(9) |
PI | 圆周率 | PI() |
SIN | 三角函数 | SIN(1) |
COS | 三角函数 | COS(1) |
TAN | 三角函数 | TAN(1) |
COT | 三角函数 | COT(1) |
RADIANS | 角度转换弧度 | RADIANS(30) |
DEGREES | 弧度转换角度 | DEGREES(1) |
二、条件函数
Mysql里边给我们提供了两个函数,可以实现简单的条件判断。比如说ifnull这个函数我们并不陌生了,那么它是用来判断某一个值是否为null值。如果为now
还有一个函数叫做if函数,这个函数非常像编程语言里边的三元运算符。当这个表达式结果为真的情况下,返回的是第一个值。如果说前面的表达式的结果为false, 那么返回的是第二个值
练习1:中秋节公司发放礼品,SALES部门发放礼品A,其余部门发放礼品B,打印每名员工获得的礼品
sql">select
e.empno,e.ename,d.dname,
if(d.dname="SALES","礼品A","礼品B")
from t_emp e join t_dept d on e.deptno=d.deptno
练习2:公司年庆决定组织员工去集体旅游,每个部门的旅游目的地是不相同的。比如说SALES部门去P1,ACCOUNTING这个部门去P2的地点,RESEARCH部门去P3地点,查询每名员工的旅游地点
sql">select
e.empno,e.ename,
(casewhen(d.dname="SALES") then("P1")when(d.dname="ACCOUNTING") then("P2")when(d.dname="RESEARCH") then("P3")
end) as place
from t_emp e join t_dept d on e.deptno=d.deptno
练习3:公司决定为员工调整基本工资,具体调整方案如下
序号 | 条件 | 涨幅 |
1 | SELES部门里工龄超过20年 | 10% |
2 | SELES部门里工龄不满20年 | 5% |
3 | ACCOUNTING部门 | +300元 |
4 | RESEARCH部门里低于部门平均底薪 | +200元 |
5 | 没有部门的员工 | +100元 |
sql">update
t_emp e left join t_dept d on e.deptno=d.deptno
left join (select deptno,avg(sal) as avg from t_emp group by deptno) t
on e.deptno=t.deptno
set e.sal=(
casewhen d.dname="SALES" and datediff(now(),e.hiredate)/365>20then e.sal*1.1when d.dname="SALES" and datediff(now(),e.hiredate)/365<20then e.sal*1.05when d.dname="ACCOUNTING"then e.sal+300when d.dname="RESEARCH" and e.sal<t.avgthen e.sal+200when e.deptno is null then e.sal+100else e.sal
end)