MySQL(36)如何使用CASE进行条件表达式?
CASE
语句在SQL中用于实现条件逻辑处理,可以在 SELECT
、UPDATE
、DELETE
等语句中使用。CASE
语句的功能类似于编程语言中的 if-else
或 switch-case
结构,它可以根据不同的条件返回不同的结果。
基本语法
CASE
语句有两种形式:简单 CASE 和搜索 CASE。
简单 CASE
CASE column_nameWHEN value1 THEN result1WHEN value2 THEN result2...ELSE default_result
END
搜索 CASE
CASEWHEN condition1 THEN result1WHEN 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 statusWHEN '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,CASEWHEN 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 statusWHEN '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,CASEWHEN 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 = CASEWHEN condition1 THEN result1WHEN condition2 THEN result2...ELSE default_resultEND
WHERE some_condition;
示例:
将所有订单金额分类,并更新 status
列:
UPDATE orders
SET status = CASEWHEN 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 CASEWHEN condition1 THEN column_name = value1WHEN condition2 THEN column_name = value2...ELSE column_name = default_valueEND;
示例:
假设我们希望删除所有状态为 “Low Value” 或 “Cancelled” 的记录:
DELETE FROM orders
WHERE status = CASEWHEN 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
语句,以实现条件表达式处理。