用来描述条件分支;
--简单CASE表达式:
CASE sex
WHEN ‘1‘ THEN ‘男‘
WHEN ‘2‘ THEN ‘女‘
ELSE ‘其他‘ END
--搜索CASE表达式:
CASE WHEN sex = ‘1‘ THEN ‘男‘
WHEN sex = ‘2‘ THEN ‘女‘
ELSE ‘其他‘ END
注意事项:
SELECT pref_name,
--男性人口
SUM(CASE WHEN sex = ‘1‘ THEN population ELSE 0 END) AS cnt_m,
--女性人口
SUM(CASE WHEN sex = ‘2‘ THEN population ELSE 0 END) AS cnt_f
FROM PopTbl2
GROUP BY pref_name;
? 上面的SQL语句就可以将一个列为[pref_name(县名), sex, population]的表转换成一个列为[县名, 男, 女]的表。这样的表就类似我们在Excel等软件中见到的表,也就是 二维表。
CHECK 约束用于限制列中的值的范围。
如果对单个列定义 CHECK 约束,那么该列只允许特定的值。
如果对一个表定义 CHECK 约束,那么此约束会在特定的列中对值进行限制。
? 使用多个UPDATE语句可能造成冲突,不利于保持原子性。
--为工资高于300000的员工降薪
UPDATE Salaries
SET salary = salary * 0.9
WHERE salary >= 300000;
--为工资高于250000但低于280000的员工加薪
UPDATE Salaries
SET salary = salary * 1.2
WHERE salary >= 250000 AND salary < 280000;
--使用CASE来进行更新
UPDATE Salaries
SET salary = CASE WHEN salary >= 300000
THEN salary * 0.9
WHEN salary >= 250000 AND salary < 280000
THEN salary * 1.2
ELSE salary END;
如上面的示例,如果有员工工资高于300000,被降薪后正好处于加薪区间,最后的结果反而是他被加薪了。
? 可以借助BETWEEN、LIKE、<、>、IN等谓词组合增强CASE语句的表达能力。
? 在CASE表达式中使用聚合函数可以增强CASE语句的表达能力。
新手用HAVING子句进行条件分支,高手用SELECT子句进行条件分支。
CASE在SQL中被视为表达式,在执行时会被判定为一个固定值,因此它也可以被写在聚合函数内部。相比较过程式编程语言中的条件判断语句,SQL中的CASE更类似于Lisp、Scheme等函数式语言中的条件表达式。
原文:https://www.cnblogs.com/enmac/p/13069781.html