SQL CASE

概述:在本教程中,你将学习如何使用 SQL CASE 表达式为 SQL 语句添加逻辑。

SQL CASE 表达式简介

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

你可以在允许有效表达式的子句或语句中使用 CASE 表达式。例如,你可以在诸如 SELECTDELETEUPDATE 等语句以及 SELECTORDER BYHAVING 等子句中使用 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
ENDCode language: SQL (Structured Query Language) (sql)

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 表格。

employees_table

假设当前年份是 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;Code language: SQL (Structured Query Language) (sql)

试用

SQL CASE simple CASE example

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;Code language: SQL (Structured Query Language) (sql)

数据库系统按 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;Code language: SQL (Structured Query Language) (sql)

试用

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

SQL CASE searched CASE example

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

本教程有用吗?