一、
Mysql搜索引擎是行搜索,一行一行往下,所以匹配也是每一行进行匹配,符合条件的返回
1、
一列里面进行一次匹配
SELECT (CASE WHEN a.`name`=’张三’ THEN a.core ELSE 0 END) AS ‘张三’ FROM student a ;
上面的执行过程:
- 进行匹配的是名字name,首先匹配第一行,name是等于张三,所以返回core也就是50
- 匹配第二行,name等于李四,不匹配,返回else的值也就是0
- 匹配第三行,name等于王五,不匹配,返回else的值也就是0
- 匹配第四行,name等于赵六,不匹配,返回else的值也就是0
所以结果集为
2、
一列里面进行多次匹配
SELECT (CASE WHEN
a.`name`=’张三’ THEN a.core
WHEN
a.`name`=’李四’ THEN a.core
END) AS ‘张三’ FROM student a ;
执行过程:第一行匹配张三成功,返回50,第二行匹配李四成功返回60,三四两行不匹配返回null
3、
多列的匹配
SELECT
(CASE WHEN a.`name`=’张三’ THEN a.core END)
AS ‘张三’,
(CASE WHEN a.`name`=’李四’ THEN a.core END)
AS ‘李四’ FROM student a ;
总结case语句能将行转换成列
二、
简单case函数
1、更新语句
UPDATE student a
SET a.sex = CASE a.sex
WHEN ‘1’ THEN
‘男’
WHEN ‘2’ THEN
‘女’
ELSE a.sex
END
1.1、设置默认收货地址,将两次执行sql简化为一条更新语句(id为地址主键)
UPDATE address a SET a.is_default = CASE WHEN a.id = #{id} THEN ‘1’ ELSE ‘0’ END WHERE a.user_id = #{userId}
2、查询语句
SELECT
CASE sex
WHEN ‘1’ THEN
‘男’
WHEN ‘2’ THEN
‘女’
ELSE
‘其他’
END
FROM
student a;
三、
case搜索函数
1、更新语句
UPDATE student a
SET a.sex = CASE
WHEN a.sex = ‘1’ THEN
‘男’
WHEN a.sex = ‘2’ THEN
‘女’
ELSE a.sex
END;
2、查询语句
SELECT
CASE
WHEN sex = ‘1’ THEN
‘男’
WHEN sex = ‘2’ THEN
‘女’
ELSE
‘其他’
END
FROM
student