MySQL-Base-Functions
2023-02-12, by alamide
- IF(expr1, expr2, expr3)
相当于三元表达式 expr1 ? expr2 : expr3
需求:编写一个 SQL 查询来交换前五条的 ‘F’ 和 ‘M’
select emp_id, emp_name, if(sex='M', 'F', 'M') as reverse_sex from t_emp where emp_id < 6;
emp_id | emp_name | reverse_sex |
---|---|---|
1 | 李三 | F |
2 | 王丽 | M |
3 | 王强 | F |
4 | 何马 | F |
5 | 赵四海 | F |
- IFNULL(expr1, expr2)
select emp_id, emp_name, IFNULL(prov, '中国') as country from t_emp where prov IS NULL;
emp_id | emp_name | country |
---|---|---|
12 | 蒋一心 | 中国 |
- CASE
CASE WHEN condition THEN result [WHEN condition THEN result ...] [ELSE result] END
需求:写出一个SQL 查询语句,计算每个雇员的税收,税收比例如下
- 5000~10000 10%
- 10000~20000 15%
- 20000~50000 20%
- >50000 50%
select emp_id, emp_name, salary,
CASE
WHEN salary <= 10000 THEN salary * 0.1
WHEN salary <= 20000 THEN (salary - 10000)*0.15 + 10000*0.1
WHEN salary <= 50000 THEN (salary-20000)*0.2 + 10000*0.15 + 10000*0.1
ELSE (salary-50000)*0.5 + 30000*0.2 + 10000*0.15 + 10000*0.1
END
as tax
from t_emp where emp_id < 5;
emp_id | emp_name | salary | tax |
---|---|---|---|
1 | 李三 | 18000 | 2200.00 |
2 | 王丽 | 9000 | 900.00 |
3 | 王强 | 12000 | 1300.00 |
4 | 何马 | 8000 | 800.00 |
CASE value WHEN compare_value THEN result [WHEN compare_value THEN result ...] [ELSE result] END
需求:写出一个SQL 查询语句,M 改为 男,F 显示为 女
select emp_id, emp_name,
CASE sex
WHEN 'M' then '男'
WHEN 'F' then '女'
ELSE '未知'
END
as "性别"
from t_emp where emp_id < 5;
emp_id | emp_name | 性别 |
---|---|---|
1 | 李三 | 男 |
2 | 王丽 | 女 |
3 | 王强 | 男 |
4 | 何马 | 男 |
- NULLIF(expr1, expr2)
Returns NULL if expr1 = expr2 is true, otherwise returns expr1.
需求:现将采购部裁撤,写出一个SQL 查询语句,查询出员工的部门名称,裁撤的部门显示为NULL
select emp_id, emp_name, NULLIF(dept_id, 5) as dept_id from t_emp where emp_id > 6;
emp_id | emp_name | dept_id |
---|---|---|
7 | 孙月 | 4 |
8 | 钱金 | 4 |
9 | 刘红 | NULL |
10 | 蒋一心 | NULL |
11 | 刘红 | 6 |
12 | 蒋一心 | 6 |
13 | 马文博 | 7 |
14 | 成虎 | 7 |
~ belongs to alamide@163.com