case语句
/*
语法格式:
case 判断字段或表达式
when 常量1 then 要显示的值1或语句1
when 常量2 then 要显示的值2或语句2
......
else 要显示的值n或语句n;
end
case可配合select使用,也可以单独使用
*/
案例:查询员工的工资,要求:
部门号=30时,显示的工资为1.1倍
部门号=40时,显示的工资为1.2倍
部门号=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;
case用法二:类似于多重if语句(单独使用)
/*
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) select 和 case 之间用逗号连接(表明case-end语句和salary一样都会成为一个字段)
(2) case到end的整个语句会组成一个新的字段,该字段的值为then和else后的内容
*/
练习1:将员工的姓名按照首字母排序,并写出姓名的长度
SELECT
last_name 首字母排序,
LENGTH(last_name) AS 姓名长度
FROM employees
ORDER BY SUBSTR(last_name,1,1);
练习2: 使用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 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";