一、基礎(chǔ)概念
- case :表示需要處理的字段
- when :表示條件
- then :表示當(dāng)when執(zhí)行為true時,再執(zhí)行的語句
- else :表示當(dāng)所有的when執(zhí)行為false時,再執(zhí)行的語句
- end:表示 case 語句結(jié)束的結(jié)尾
二、建表語句
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for student
-- ----------------------------
DROP TABLE IF EXISTS `student`;
CREATE TABLE `student` (
`name` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '名字',
`sex` int(11) NULL DEFAULT NULL COMMENT '性別,1表示為男,2表示女',
`core` int(11) NULL DEFAULT NULL COMMENT '分?jǐn)?shù)'
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of student
-- ----------------------------
INSERT INTO `student` VALUES ('張三', 1, 50);
INSERT INTO `student` VALUES ('李四', 2, 60);
INSERT INTO `student` VALUES ('王五', 2, 90);
INSERT INTO `student` VALUES ('趙六', 1, 70);
SET FOREIGN_KEY_CHECKS = 1;
- 圖形化表格
三、用例講解
- 執(zhí)行sql語句
SELECT (CASE WHEN a.`name`='張三' THEN a.core ELSE 0 END) AS '分?jǐn)?shù)' FROM student a ;
-
結(jié)果
-
講解:進行匹配的是名字name,首先匹配第一行,name是等于張三,所以返回core也就是50。后面的記錄名字都不是 ‘張三’ ,所以執(zhí)行else。其實case的本質(zhì)就是通過邏輯判定生成一個新的字段,該字段可以通過as 取名。
-
相同結(jié)果的sql語句,大家可以試著執(zhí)行一遍,寫法不同,思考邏輯一樣
SELECT (CASE a.`name` WHEN '張三' THEN a.core ELSE 0 END) AS '分?jǐn)?shù)' FROM student a ;
# 看著END后面連接了一個“分?jǐn)?shù)”,但是其實這個“分?jǐn)?shù)”和END之間是省略了AS,大家不要理解錯了。CASE語句執(zhí)行到END邏輯處理就已經(jīng)結(jié)束了
SELECT CASE a.`name` WHEN '張三' THEN a.core ELSE 0 END '分?jǐn)?shù)' FROM student a ;
- 執(zhí)行一列里面進行多次匹配
SELECT (CASE WHEN a.`name`='張三' THEN a.core WHEN a.`name`='李四' THEN a.core END) AS '分?jǐn)?shù)' FROM student a ;
-
結(jié)果
-
講解:進行匹配的是名字name ,當(dāng)?shù)谝粋€WHEN 通過的時候 ,這條記錄直接執(zhí)行第一個THEN 不會進入到第二個WHEN。當(dāng)?shù)谝粋€WHEN 沒通過的時候,才會進入到WHEN,多個WHEN的sql語句原理一樣。和java中的 swich case 有異曲同工之妙。文章來源:http://www.zghlxwxcb.cn/news/detail-475594.html
-
驗證當(dāng)?shù)谝粋€ WHEN 通過不執(zhí)行第二個WHEN的sql例子文章來源地址http://www.zghlxwxcb.cn/news/detail-475594.html
SELECT (CASE WHEN a.`name`='張三' THEN a.core WHEN a.`name`='張三' THEN 100 END) AS '分?jǐn)?shù)' FROM student a ;
- 結(jié)果
- 分析,如果會執(zhí)行第二個WHEN 的話,第一條記錄得到的值應(yīng)該為100,而不是50。
- 多列的匹配
SELECT (CASE WHEN a.`name`='張三' THEN a.core END) AS '張三',(CASE WHEN a.`name`='李四' THEN a.core END) AS '李四' FROM student a ;
- 結(jié)果
- 更新case使用
UPDATE student a
SET a.sex = CASE a.sex
WHEN 1 THEN
11
WHEN 2 THEN
22
ELSE a.sex
END
- 結(jié)果更新每行sex 中的1變成11,2變成22。
參考文檔
- 理解case when then else end 的使用
到了這里,關(guān)于理解case when then else end 的使用,基礎(chǔ)概念,建表語句,用例講解的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!