Skip to content

适用虚谷数据库版本

v12.9



适用虚谷数据库版本

v12.9


条件表达式

📄字数 1.1K
👁️阅读量 加载中...

概述

条件表达式用于在SQL中根据不同的条件返回不同的结果值,是实现逻辑分支、数据分组、分类统计等操作的关键构造。常见的条件表达式包括:

  • CASE表达式

CASE表达式

CASE表达式用于实现SQL中的条件判断与分支执行,相当于编程语言中的if-else。支持简单条件判断与搜索式条件判断。

语法结构

  • 搜索式CASE:语法起始为CASE(不带表达式),其判断条件condition可以是任意复杂布尔逻辑(<, LIKE等),灵活性高
  • 简单式CASE:语法起始为CASE expression,其判断条件只能是expression = value,灵活性低

提示

  1. ELSE是可选的,未命中时默认为NULL
  2. 支持嵌套使用,但注意可读性

示例

  • 示例1:搜索式CASE
sql
-- 建表
SQL> CREATE TABLE exam_result (
       student_id INT PRIMARY KEY,
       name VARCHAR(50),
       score INT
     );

-- 插入数据
SQL> INSERT INTO exam_result VALUES
     (1, 'Alice', 95),
     (2, 'Bob', 76),
     (3, 'Charlie', 62),
     (4, 'Diana', 40),
     (5, 'Eve', NULL);

-- 搜索式CASE
SQL> SELECT
       name,
       score,
       CASE
         WHEN score >= 90 THEN 'A'
         WHEN score >= 75 THEN 'B'
         WHEN score >= 60 THEN 'C'
         WHEN score IS NULL THEN 'N/A'
         ELSE 'F'
       END AS grade
     FROM exam_result;

+---------+--------+-------+
|  NAME   | SCORE  | GRADE |
+---------+--------+-------+
| Alice   | 95     | A     |
| Bob     | 76     | B     |
| Charlie | 62     | C     |
| Diana   | 40     | F     |
| Eve     | <NULL> | N/A   |
+---------+--------+-------+
  • 示例2:简单式CASE
sql
-- 建表
SQL> CREATE TABLE orders (
       order_id INT PRIMARY KEY,
       customer VARCHAR(50),
       status CHAR(1)
     );

-- 插入数据
SQL> INSERT INTO orders VALUES
     (1, 'Alice', 'P'),
     (2, 'Bob', 'S'),
     (3, 'Charlie', 'C'),
     (4, 'Diana', 'X');

-- 简单式CASE
SQL> SELECT
       order_id,
       customer,
       status,
       CASE status
         WHEN 'P' THEN 'Pending'
         WHEN 'S' THEN 'Shipped'
         WHEN 'C' THEN 'Completed'
         ELSE 'Unknown'
       END AS status_description
     FROM orders;

+----------+----------+--------+--------------------+
| ORDER_ID | CUSTOMER | STATUS | STATUS_DESCRIPTION |
+----------+----------+--------+--------------------+
| 1        | Alice    | P      | Pending            |
| 2        | Bob      | S      | Shipped            |
| 3        | Charlie  | C      | Completed          |
| 4        | Diana    | X      | Unknown            |
+----------+----------+--------+--------------------+

使用场景

  • 场景一:常常用于根据条件生成状态标签
  • 场景二:数据清洗或转换时,对脏数据或特定值进行替换