My SQL 语句 CASE 语句
假如我有两个数据表 一个为 Students (学生信息表) 另一个为 Student_Score(学生成绩表)

#学生表
CREATE TABLE Students (
Id INT PRIMARY KEY auto_increment, #主键ID
SId INT NOT NULL, #学号
SName VARCHAR(10) NOT NULL, #姓名
Sex INT NOT NULL, #性别:1:男 ,0:女
SAddress VARCHAR(100) NOT NULL, #住址
Flag int NOT NULL #状态:1:有效 , 0:无效
);

#成绩表
CREATE TABLE Sudent_Score (
Id INT PRIMARY KEY AUTO_INCREMENT, #主键ID
CId INT NOT NULL, #学号
Chinese INT NOT NULL, #语文成绩
Math INT NOT NULL, #数学成绩
English INT NOT NULL, #英语成绩
IsTrue INT NOT NULL, #是否有效 :1:有效 , 0:无效
Flag INT #状态:1:有效 , 0 :无效
)
我们可以看到,我们的性别和成绩是否有效还有Flag都使用的int 1和 0 代替,此时如果我们想查询所有学生的学号,姓名,性别,各科成绩以及总分,并且从大到小排序应该怎么写呢?
我们可以使用My SQL 的CASE语句来完成
CASE case_value
WHEN when_value THEN
statement_list
ELSE
statement_list
END CASE;
这是默认的CASE语句,那我们行该如何使用呢?
SELECT
s.SId '学号',
s.SName '姓名',
CASE s.Sex #CASE后面跟要判断的列名
WHEN '1' THEN #条件1
'男' #结果1
WHEN '0' THEN #条件2
'女' #结果2
ELSE
'未知' #else除了全部的条件其他的选项的结果
END AS '性别' , #AS后跟这个字段的别名
s.SAddress '地址',
c.Chinese '语文',
c.Math '数学',
c.English '英语',
CASE c.IsTrue
WHEN '1' THEN
'有效'
WHEN '0' THEN
'无效'
END AS '是否有效' ,
(c.Chinese + c.Math + c.English) '总分'
FROM
students s,
Sudent_Score c
WHERE
SId = CId
ORDER BY
(c.Chinese + c.Math + c.English)
DESC ;

我们可以看到性别和是否有效这两个字段都该成了我们想要的结果.