条件表达式
📄字数 1.1K
👁️阅读量 加载中...
概述
条件表达式用于在SQL中根据不同的条件返回不同的结果值,是实现逻辑分支、数据分组、分类统计等操作的关键构造。常见的条件表达式包括:
- CASE表达式
CASE表达式
CASE表达式用于实现SQL中的条件判断与分支执行,相当于编程语言中的if-else。支持简单条件判断与搜索式条件判断。
语法结构
- 搜索式CASE:语法起始为
CASE
(不带表达式),其判断条件condition
可以是任意复杂布尔逻辑(<, LIKE等),灵活性高
- 简单式CASE:语法起始为
CASE expression
,其判断条件只能是expression = value
,灵活性低
提示
- ELSE是可选的,未命中时默认为NULL
- 支持嵌套使用,但注意可读性
示例
- 示例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 |
+----------+----------+--------+--------------------+
使用场景
- 场景一:常常用于根据条件生成状态标签
- 场景二:数据清洗或转换时,对脏数据或特定值进行替换