问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

SQL CASE 表达式详解:简单CASE与搜索CASE的使用方法

创作时间:
作者:
@小白创作中心

SQL CASE 表达式详解:简单CASE与搜索CASE的使用方法

引用
1
来源
1.
https://sqltutorial.cn/sql-case/

SQL CASE表达式是SQL中非常实用的条件判断语句,它允许你在查询中添加逻辑判断,从而实现更复杂的数据处理。本文将详细介绍SQL CASE表达式的两种格式:简单CASE和搜索CASE,并通过具体示例帮助你掌握其使用方法。

SQL CASE 表达式简介

SQL CASE 表达式可让你评估条件列表并返回可能的结果之一。CASE 表达式有两种格式:简单 CASE 和搜索 CASE。

你可以在允许有效表达式的子句或语句中使用 CASE 表达式。例如,你可以在诸如SELECT、DELETE和UPDATE等语句以及SELECT、ORDER BY和HAVING等子句中使用 CASE 表达式。

简单 CASE 表达式

以下内容说明了简单 CASE 表达式

CASE expression
WHEN when_expression_1 THEN
    result_1
WHEN when_expression_2 THEN
    result_2
WHEN when_expression_3 THEN
    result_3
...
ELSE
    else_result
END  

CASE 表达式使用相等运算符 (=) 将表达式与表达式集(when_expression_1、when_expression_2、when_expression_3、…)进行比较。如果你想使用其他比较运算符(例如大于 (>)、小于 (<) 等),可以使用搜索 CASE 表达式。

如果表达式与 WHEN 子句中的相应表达式相匹配,那么 CASE 语句返回 result_1、result_2 或 result_3。

如果表达式与 WHEN 子句中的任何表达式不匹配,那么它返回 ELSE 子句中的 esle_result。ELSE 子句是可选的。

如果你省略了 ELSE 子句且表达式与 WHEN 子句中的任何表达式都不匹配,那么 CASE 表达式返回 NULL。

简单 CASE 表达式示例

我们来看一下 employees 表格。

假设当前年份是 2000 年。

我们可以通过使用以下语句使用简单 CASE 表达式来获取员工的工作纪念日。

SELECT 
    first_name,
    last_name,
    hire_date,
    CASE (2000 - YEAR(hire_date))
        WHEN 1 THEN '1 year'
        WHEN 3 THEN '3 years'
        WHEN 5 THEN '5 years'
        WHEN 10 THEN '10 years'
        WHEN 15 THEN '15 years'
        WHEN 20 THEN '20 years'
        WHEN 25 THEN '25 years'
        WHEN 30 THEN '30 years'
    END aniversary
FROM
    employees
ORDER BY first_name;  

试用

YEAR 函数返回员工加入公司时的年份。我们获得员工在公司工作的年数,方法是从当前年份 (2000 年) 中减去员工加入公司时的年份。

我们获得员工在公司工作的年数,方法是从当前年份 (2000 年) 中减去员工加入公司时的年份。

然后我们将结果与 1、3、5、10、15、20、25、30 进行比较。如果工龄等于这些数字中的一个,那么 CASE 表达式返回员工的工作纪念日。

如果员工的工龄与这些数字不符,那么 CASE 表达式将返回 NULL。

搜索 CASE 表达式

以下内容显示了搜索 CASE 表达式。

CASE
WHEN boolean_expression_1 THEN
    result_1
WHEN boolean_expression_2 THEN
    result_2
WHEN boolean_expression_3 THEN
    result_3
ELSE
    else_result
END;  

数据库系统按 CASE 表达式中指定的顺序对每个 WHEN 子句中的布尔表达式进行评估。

如果每个 WHEN 子句中的布尔表达式的值为 true,那么搜索 CASE 语句将在相应的 THEN 子句中返回结果。

如果没有任何布尔表达式的值为 true,那么 CASE 表达式将在 ELSE 子句中返回 result else_result。

与简单 CASE 表达式一样,END 子句也是可选的。如果你省略了 ELSE 子句,且没有任何布尔表达式的值为 true,那么 CASE 表达式返回 NULL 值。

搜索 CASE 表达式示例

以下内容说明了搜索 CASE 表达式示例。

SELECT 
    first_name,
    last_name,
    CASE
        WHEN salary < 3000 THEN 'Low'
        WHEN salary >= 3000 AND salary <= 5000 THEN 'Average'
        WHEN salary > 5000 THEN 'High'
    END evaluation
FROM
    employees;  

试用

如果工资低于 3000,CASE 表达式返回“低”。如果工资在 3000 到 5000 之间,则返回“一般”。如果工资大于 5000,CASE 表达式返回“高”。

在本教程中,我们向你介绍了 SQL CASE 语句,它允许你向 SQL 语句添加 IF THEN ELSE 逻辑。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号