alamide的笔记库「 87篇笔记 」「 小破站已建 0 天啦 🐶 」


Table t_emp

emp_id emp_name sex email prov age salary dept_id
1 李三 M lisan@emp.com 江苏 32 18000 1
2 王丽 F wangli@emp.com 山东 25 9000 1
3 王强 M wangqiang@emp.com 北京 42 12000 2
4 何马 M hema@emp.com 江苏 32 8000 2
5 赵四海 M zhaosihai@emp.com 河北 32 17000 3
6 程兴 M chenxing@emp.com 武汉 32 16000 3
7 孙月 F sunyue@emp.com 山东 22 10000 4
8 钱金 M qianjin@emp.com 北京 52 28000 4
9 刘红 F liuhong@emp.com 安徽 22 8000 5
10 蒋一心 F jinagyixin@emp.com 山西 28 9000 5
11 刘红 F liuhong@emp.com 河南 22 8000 6
12 蒋一心 F jinagyixin@emp.com NULL 28 9000 6
13 马文博 M mawenbo@emp.com 河南 22 28000 7
14 成虎 M chenhu@emp.com 新疆 38 36000 7

Table t_dept

dept_id dept_name
1 人事部
2 产品部
3 技术部
4 运维部
5 财务部
6 采购部
7 研发部

MySQL-Base-Functions

2023-02-12, by alamide

相当于三元表达式 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_idemp_namereverse_sex
1李三F
2王丽M
3王强F
4何马F
5赵四海F
select emp_id, emp_name, IFNULL(prov, '中国') as country from t_emp where prov IS NULL;
emp_idemp_namecountry
12蒋一心中国

CASE WHEN condition THEN result [WHEN condition THEN result ...] [ELSE result] END

需求:写出一个SQL 查询语句,计算每个雇员的税收,税收比例如下

  1. 5000~10000 10%
  2. 10000~20000 15%
  3. 20000~50000 20%
  4. >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_idemp_namesalarytax
1李三180002200.00
2王丽9000900.00
3王强120001300.00
4何马8000800.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_idemp_name性别
1李三
2王丽
3王强
4何马

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_idemp_namedept_id
7孙月4
8钱金4
9刘红NULL
10蒋一心NULL
11刘红6
12蒋一心6
13马文博7
14成虎7
Tags: DB - MySQL
~ belongs to alamide@163.com