MySQL数据库函数——MySQL条件函数
条件语句——IFNULL/IF语句(简单条件判断)
SQL语句中可以利用条件函数来实现编程语言里的条件判断。
使用方法:
IFNULL(表达式, 值)
IF(表达式, 值1, 值2)
MySQL条件函数练习1
中秋节公司发放礼品,SALES部门发放礼品A,其余部门发放礼品B,打印每名员工获得的礼品。
SELECT
e.empno,e.ename,d.dname,
IF(d.dname="SALES","礼品A","礼品B") AS present
FROM t_emp e JOIN t_dept d ON e.deptno=d.deptno;
条件语句——CASE语句(复杂条件判断)
复杂的条件判断可以应用条件语句来实现,比IF语句功能更强大。
使用方法:
CASE
WHEN 表达式 THEN 值1
WHEN 表达式 THEN 值2
......
ELSE 值N
END
MySQL条件函数练习2
公司年庆决定组织员工集体旅游,每个部门旅游目的地是不同的。SALES部门去P1地点,ACCOUNTING部门去P2地点,RESEARCH部门去P3地点,查询每名员工的旅行地点。
SELECT
e.empno,e.ename,
CASE
WHEN 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;
MySQL条件函数练习3
公司决定为员工调整基本工资,具体调整方案如下:
序号 | 条件 | 涨幅 |
---|---|---|
1 | SALES部门中工龄超过20年 | 10% |
2 | SALES部门中工龄不满20年 | 5% |
3 | ACCOUNTING部门 | +300元 |
4 | RESEARCH部门里低于部门平均底薪 | +200元 |
5 | 没有部门的员工 | +100元 |
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=(
CASE
WHEN d.dname="SALES" AND DATEDIFF(NOW(),e.hiredate)/365>=20
THEN e.sal*1.1
WHEN d.dname="SALES" AND DATEDIFF(NOW(),e.hiredate)/365<20
THEN e.sal*1.05
WHEN d.dname="ACCOUNTING" THEN e.sal+300
WHEN d.dname="RESEARCH" AND e.sal<t.avg then e.sal+200
WHEN e.deptno IS NULL THEN e.sal+100
ELSE e.sal
END
);