随便建个表
DROP TABLE IF EXISTS `test`;
CREATE TABLE `test` (
`id` int(11) NULL DEFAULT NULL,
`name` char(5) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`sex` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL
) ENGINE = InnoDB CHARACTER SET = utf8;
-- ----------------------------
-- Records of test
-- ----------------------------
INSERT INTO `test` VALUES (1, '张三', 'm');
INSERT INTO `test` VALUES (2, '李四', 'f');
INSERT INTO `test` VALUES (3, '王五', 'm');
INSERT INTO `test` VALUES (4, '老刘', 'f');
INSERT INTO `test` VALUES (5, '七人众', 'l');
两种写法效果相同
#1
SELECT
id,
CASE
when sex='f' then'男的' //当字段sex里面有值为f,则变为男的
when sex='m' then'女的'
else '人妖' //其他的值(不是f也是m),则变为人妖
END '性别' //结果的字段名称
FROM
test;
#2
SELECT
id,
CASE sex
when 'f' then '男的'
when 'm' then '女的'
else '人妖'
END '性别'
form test
2022.9.06补充
上面第一种写法为搜索函数
格式:CASE WHEN [expr] THEN [result1]…ELSE [default] END
第二种是简单函数
格式:CASE [col_name] WHEN [value1] THEN [result1]…ELSE [default] END
它们的区别在于简单函数会枚举这个字段所有可能的值,而搜索函数只返回第一个符合条件的值,剩下的case部分将会自动忽略。
比如 以下sql永远不会出现’女的’
CASE
when sex in ('f','m') then '男的和女的'
when sex in ('m') then '女的'
else '人妖'
END '性别'
2022.9.25补充
给表加一列工资
ALTER TABLE test add salary FLOAT