★CASE表达式是一个标量表达式,它基于条件逻辑来返回一个值。因为CASE是一个标量表达式,所以它可以应用在SELECT、WHERE、HAVING以及ORDER BY子句中。
CASE表达式有两种格式:简单表达式和搜索表达式。
- 利用case做简单的表达式:
CASE简单表达式将一个值(或一个标量表达式)与一组可能的取值进行比较,并返回第一个匹配的结果。如果列表中没有值等于测试值,CASE表达式就返回其ELSE子句(如果存在)中列出的值。如果CASE表达式中没有ELSE子句,则默认将其视为ELSE NULL。
(1)按照性别:
SELECT ID , StudentName , Age , DepartmentID , ClassID , Sex , CASE Sex 【搜索:CASE】 WHEN 1 THEN 'BOY' 【搜索:WHEN Sex!=1 THEN 'GIRL‘】ELSE 'GIRL' 【搜索: ELSE 'BOY'】 END AS SEX FROM T_Student ;
结果如下:
简单表达式:
(2)按照班级编号:
SELECT ID , Sex , Age , DepartmentID , ClassID , CASE ClassID WHEN 1 THEN 'CLASS1' WHEN 2 THEN 'CLASS3' WHEN 3 THEN 'CLASS3' WHEN 4 THEN 'CLASS4' WHEN 5 THEN 'CLASS5' WHEN 6 THEN 'CLASS6' ELSE 'TNE_END' END AS CLASS
FROM T_Student ;
结果为:
2.利用case做搜索的表达式:
CASE简单表达式只有一个测试值(或表达式),它紧跟在CASE关键字后面,与WHEN子句中的一组可能值进行比较。CASE搜索表达式要更灵活些,它可以在WHERE子句中指定逻辑表达式,而不限于只进行相等性的比较。CASE搜索表达式返回结果为TRUE的第一个WHEN逻辑表达式所关联的THEN子句中指定的值。如果没有任何WHEN表达式结果为TRUE,CASE表达式就返回ELSE子句中出现的值(如果没有指定ELSE子句,则返回NULL)。
★【每个CASE简单表达式都可以转换为CASE搜索表达式-(1),但不是所有的CASE搜索表达式都可以转换为CASE简单表达式-(2)】。
(1):按照ClassID的值
SELECT ID , Sex , Age , DepartmentID , ClassID , StudentName , CASE WHEN ClassID=1 THEN 'CLASS1' WHEN ClassID=2 THEN 'CLASS3' WHEN ClassID=3 THEN 'CLASS3' WHEN ClassID=4 THEN 'CLASS4' WHEN ClassID=5 THEN 'CLASS5' WHEN ClassID=6 THEN 'CLASS6' ELSE 'TNE_END' END AS CLASSFROM T_Student ;
结果如下:
(2):按照ID的范围:
SELECT Sex , DepartmentID , ClassID , StudentName , ID , CASE WHEN ID>=1 AND ID <=6 THEN 'CLASS1'【不限于只进行相等性的比较】 WHEN ID>=2 AND ID <=13 THEN 'CLASS2' WHEN ID>=14 AND ID <=19 THEN 'CLASS3' WHEN ID>20 AND ID <=25 THEN 'CLASS4' WHEN ID>=21 AND ID <=32 THEN 'CLASS5' WHEN ID>=33 AND ID <= 38 THEN 'CLASS6' ELSE 'CLASS7' END AS CLASSFROM T_Student ;
结果如下:
3.CASE用在其它地方:
(1)函数中:
SELECT StudentName , ID , SUM( CASE WHEN SEX = '1' THEN ID ELSE 0 END ), SUM( CASE WHEN Sex = '0' THEN ID ELSE 0 END )FROM T_Student GROUP BY ID , StudentName ;
(2):CASE用在where中:
SELECT * FROM EMP M WHERE (CASE WHEN M.SAL>1000 AND 1=1 THEN 1 WHEN M.SAL<1000 AND 1=2 THEN 1 WHEN M.SAL>3000 AND 1=3 THEN 1 ELSE 0 END)=1
这些只是在学习中老师没有将之前让我们自己先掌握的,自己就只是简单的做了一些预习吧,里面还是有很多不太符合逻辑的语法,希望指正~~