文章目录
一、基础概念
- case :表示需要处理的字段
- when :表示条件
- then :表示当when执行为true时,再执行的语句
- else :表示当所有的when执行为false时,再执行的语句
- end:表示 case 语句结束的结尾
二、建表语句
SET NAMES utf8mb4;SET FOREIGN_KEY_CHECKS =0;-- ------------------------------ Table structure for student-- ----------------------------DROPTABLEIFEXISTS`student`;CREATETABLE`student`(`name`varchar(20)CHARACTERSET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULLDEFAULTNULLCOMMENT'名字',`sex`int(11)NULLDEFAULTNULLCOMMENT'性别,1表示为男,2表示女',`core`int(11)NULLDEFAULTNULLCOMMENT'分数')ENGINE=InnoDBCHARACTERSET= utf8mb4 COLLATE= utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;-- ------------------------------ Records of student-- ----------------------------INSERTINTO`student`VALUES('张三',1,50);INSERTINTO`student`VALUES('李四',2,60);INSERTINTO`student`VALUES('王五',2,90);INSERTINTO`student`VALUES('赵六',1,70);SET FOREIGN_KEY_CHECKS =1;
- 图形化表格
三、用例讲解
- 执行sql语句
SELECT(CASEWHEN a.`name`='张三'THEN a.core ELSE0END)AS'分数'FROM student a ;
- 结果
- 讲解:进行匹配的是名字name,首先匹配第一行,name是等于张三,所以返回core也就是50。后面的记录名字都不是 ‘张三’ ,所以执行else。其实case的本质就是通过逻辑判定生成一个新的字段,该字段可以通过as 取名。
- 相同结果的sql语句,大家可以试着执行一遍,写法不同,思考逻辑一样
SELECT(CASE a.`name`WHEN'张三'THEN a.core ELSE0END)AS'分数'FROM student a ;
# 看着END后面连接了一个“分数”,但是其实这个“分数”和END之间是省略了AS,大家不要理解错了。CASE语句执行到END逻辑处理就已经结束了SELECTCASE a.`name`WHEN'张三'THEN a.core ELSE0END'分数'FROM student a ;
- 执行一列里面进行多次匹配
SELECT(CASEWHEN a.`name`='张三'THEN a.core WHEN a.`name`='李四'THEN a.core END)AS'分数'FROM student a ;
- 结果
- 讲解:进行匹配的是名字name ,当第一个WHEN 通过的时候 ,这条记录直接执行第一个THEN 不会进入到第二个WHEN。当第一个WHEN 没通过的时候,才会进入到WHEN,多个WHEN的sql语句原理一样。和java中的 swich case 有异曲同工之妙。
- 验证当第一个 WHEN 通过不执行第二个WHEN的sql例子
SELECT(CASEWHEN a.`name`='张三'THEN a.core WHEN a.`name`='张三'THEN100END)AS'分数'FROM student a ;
- 结果
- 分析,如果会执行第二个WHEN 的话,第一条记录得到的值应该为100,而不是50。
- 多列的匹配
SELECT(CASEWHEN a.`name`='张三'THEN a.core END)AS'张三',(CASEWHEN a.`name`='李四'THEN a.core END)AS'李四'FROM student a ;
- 结果
- 更新case使用
UPDATE student a
SET a.sex =CASE a.sex
WHEN1THEN11WHEN2THEN22ELSE a.sex
END
- 结果更新每行sex 中的1变成11,2变成22。
参考文档
- 理解case when then else end 的使用
本文转载自: https://blog.csdn.net/m0_46085118/article/details/127868482
版权归原作者 北风toto 所有, 如有侵权,请联系我们删除。
版权归原作者 北风toto 所有, 如有侵权,请联系我们删除。