CASE 语句在SQL中用于实现条件逻辑处理,可以在 SELECT、UPDATE、DELETE 等语句中使用。CASE 语句的功能类似于编程语言中的 if-else 或 switch-case 结构,它可以根据不同的条件返回不同的结果。
基本语法
CASE 语句有两种形式:简单 CASE 和搜索 CASE。
简单 CASE
CASE column_name
WHEN value1 THEN result1
WHEN value2 THEN result2
...
ELSE default_result
END
搜索 CASE
CASE
WHEN condition1 THEN result1
WHEN condition2 THEN result2
...
ELSE default_result
END
示例数据库和表结构
假设我们有一个名为 orders 的表,用于存储订单信息。
-- 创建数据库
CREATE DATABASE shop;
-- 选择数据库
USE shop;
-- 创建表 orders
CREATE TABLE orders (
order_id INT AUTO_INCREMENT PRIMARY KEY,
customer_name VARCHAR(100),
order_date DATE,
amount DECIMAL(10, 2),
status VARCHAR(50)
);
-- 插入示例数据到 orders 表
INSERT INTO orders (customer_name, order_date, amount, status)
VALUES
('John Doe', '2023-10-01', 250.00, 'Pending'),
('Jane Smith', '2023-09-15', 450.00, 'Completed'),
('Alice Johnson', '2023-08-20', 300.00, 'Pending'),
('Bob Brown', '2023-07-05', 150.00, 'Cancelled');
1. 使用 CASE 在 SELECT 语句中
语法:
简单 CASE:
SELECT order_id,
customer_name,
CASE status
WHEN 'Pending' THEN 'Order in Progress'
WHEN 'Completed' THEN 'Order Finished'
WHEN 'Cancelled' THEN 'Order Cancelled'
ELSE 'Unknown Status'
END AS order_status
FROM orders;
搜索 CASE:
SELECT order_id,
customer_name,
CASE
WHEN amount < 200 THEN 'Low Value'
WHEN amount BETWEEN 200 AND 400 THEN 'Medium Value'
ELSE 'High Value'
END AS order_value_category
FROM orders;
示例:
SELECT order_id,
customer_name,
amount,
CASE status
WHEN 'Pending' THEN 'Order in Progress'
WHEN 'Completed' THEN 'Order Finished'
WHEN 'Cancelled' THEN 'Order Cancelled'
ELSE 'Unknown Status'
END AS order_status
FROM orders;
结果:
order_id | customer_name | amount | order_status
---------|---------------|--------|-------------------
1 | John Doe | 250.00 | Order in Progress
2 | Jane Smith | 450.00 | Order Finished
3 | Alice Johnson | 300.00 | Order in Progress
4 | Bob Brown | 150.00 | Order Cancelled
SELECT order_id,
customer_name,
amount,
CASE
WHEN amount < 200 THEN 'Low Value'
WHEN amount BETWEEN 200 AND 400 THEN 'Medium Value'
ELSE 'High Value'
END AS order_value_category
FROM orders;
结果:
order_id | customer_name | amount | order_value_category
---------|---------------|--------|----------------------
1 | John Doe | 250.00 | Medium Value
2 | Jane Smith | 450.00 | High Value
3 | Alice Johnson | 300.00 | Medium Value
4 | Bob Brown | 150.00 | Low Value
2. 使用 CASE 在 UPDATE 语句中
语法:
UPDATE table_name
SET column_name = CASE
WHEN condition1 THEN result1
WHEN condition2 THEN result2
...
ELSE default_result
END
WHERE some_condition;
示例:
将所有订单金额分类,并更新 status 列:
UPDATE orders
SET status = CASE
WHEN amount < 200 THEN 'Low Value'
WHEN amount BETWEEN 200 AND 400 THEN 'Medium Value'
ELSE 'High Value'
END;
更新后的表:
order_id | customer_name | amount | status
---------|---------------|--------|-------------
1 | John Doe | 250.00 | Medium Value
2 | Jane Smith | 450.00 | High Value
3 | Alice Johnson | 300.00 | Medium Value
4 | Bob Brown | 150.00 | Low Value
3. 使用 CASE 在 DELETE 语句中
虽然 CASE 语句在删除操作中不常用,因为删除操作通常基于较简单的条件,但在某些复杂条件下可以使用。
语法:
DELETE FROM table_name
WHERE CASE
WHEN condition1 THEN column_name = value1
WHEN condition2 THEN column_name = value2
...
ELSE column_name = default_value
END;
示例:
假设我们希望删除所有状态为 "Low Value" 或 "Cancelled" 的记录:
DELETE FROM orders
WHERE status = CASE
WHEN status = 'Low Value' THEN 'Low Value'
WHEN status = 'Cancelled' THEN 'Cancelled'
ELSE 'Keep'
END;
删除后的表:
order_id | customer_name | amount | status
---------|---------------|--------|-------------
1 | John Doe | 250.00 | Medium Value
2 | Jane Smith | 450.00 | High Value
3 | Alice Johnson | 300.00 | Medium Value
小结
CASE 语句是SQL中一个强大的工具,用于根据不同的条件返回不同的结果。通过在 SELECT、UPDATE 和 DELETE 语句中使用 CASE 语句,可以实现复杂的条件逻辑处理,极大地提高了SQL查询的灵活性和功能性。上述示例展示了如何在不同情况下使用 CASE 语句,以实现条件表达式处理。