MySQL Case 表达式和 Case 语句区别

MySQL Case 表达式和 Case 语句区别

MySQL 中,Case 表达式和 Case 语句都是非常有用和常见的工具,它们可以帮助我们动态地转换和聚合数据。虽然这两者的名称和概念十分相似,但它们之间还是存在着一定的区别。

阅读更多:MySQL 教程

Case Expression

Case 表达式在 MySQL 中经常用来为一个文本或者数字型字段动态设定值。例如,我们有一个名为 score 的字段,它可以有不同的分值。如果我们希望将这些分值转化为等级,可以使用 Case 表达式:

SELECT score,
       CASE
           WHEN score >= 90 THEN 'A'
           WHEN score >= 80 THEN 'B'
           WHEN score >= 70 THEN 'C'
           WHEN score >= 60 THEN 'D'
           ELSE 'F'
       END AS grade
FROM   grade_book

在以上的例子中,我们使用 CASE 关键字后面加上分支条件来判断分值属于 A、B、C、D 还是 F,然后将对应的等级赋给另外一个字段 grade 输出。如果某个记录的 score 字段值为 85,则上述查询会返回:

score  grade
-------------
85     B

Case Statement

与 Case 表达式不同,Case 语句的使用场景更为灵活。它可以用于动态生成有条件的 SQL 语句,从而避免复杂的 if 语句的使用。例如,我们有一个 students 表和一个 scores 表,它们之间通过学生编号(stu_id)关联。现在,我们需要统计每个学生的平均分数,并找出分数超过平均分的科目。我们可以这样写:

SELECT students.name,
       CASE
           WHEN avg_score >= scores.score THEN scores.subject
       END AS high_score_subject
FROM   students
JOIN   scores
ON     students.stu_id = scores.stu_id
JOIN   (SELECT stu_id, AVG(score) AS avg_score FROM scores GROUP BY stu_id) AS avg_scores
ON     students.stu_id = avg_scores.stu_id

在以上的例子中,我们使用 JOINstudents 表和 scores 表关联,并使用子查询来计算每个学生的平均分数。在主查询中,我们使用 CASE 关键字来为每个学生筛选出分数超过平均分的科目。如果某个记录的学生名字为“张三”,平均分数为 90,其中英语分数为 92,数学分数为 86,则上述查询会返回:

name    high_score_subject
--------------------------
张三    英语

总结

  • Case 表达式常用于将一个字段的值转换为另一个值,并返回一个新的字段。
  • Case 语句常用于动态生成有条件的 SQL 语句,并根据条件返回不同的结果。
  • 虽然 Case 表达式和 Case 语句在语法和名称上很相似,但它们使用概念和场景存在差异,需要根据实际需要选择使用。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程