当前位置: 首页 > news >正文

MySQL(36)如何使用CASE进行条件表达式?

CASE 语句在SQL中用于实现条件逻辑处理,可以在 SELECTUPDATEDELETE 等语句中使用。CASE 语句的功能类似于编程语言中的 if-elseswitch-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中一个强大的工具,用于根据不同的条件返回不同的结果。通过在 SELECTUPDATEDELETE 语句中使用 CASE 语句,可以实现复杂的条件逻辑处理,极大地提高了SQL查询的灵活性和功能性。上述示例展示了如何在不同情况下使用 CASE 语句,以实现条件表达式处理。

相关文章:

  • dify_plugin数据库中的表总结
  • Typescript学习教程,从入门到精通,TypeScript 进阶语法知识点及案例代码详解(13)
  • 【解读—论文】引导性掩码表示学习以捕捉心电图的时空关系
  • 前端面试宝典---项目难点1-leaflet大数据量渲染优化
  • MATLAB在逐渐被Python淘汰吗
  • 计算机系统简介(一)
  • 《计算机组成原理》——第二章-10 现代计算机的总线结构
  • 2.7 寸 微雪墨水屏使用方法,及测试用例
  • LLM之Agent:Mem0的简介、安装和使用方法、案例应用之详细攻略
  • 《帝国时代1》游戏秘籍
  • Javase 基础加强 —— 07 File
  • 2025河南台球展/台球桌展/台球杆展/郑州台尼展会
  • 《深入探秘:从底层搭建Python微服务之FastAPI与Docker部署》
  • 系统编程day04
  • Librosa是什么?用librosa进行多人声纹对比
  • 基于stm32单片机的智能盲杖研究
  • Function Calling、MCP、A2A:解锁 AI 能力的三大核心技术对比
  • go实现钉钉三方登录
  • 获取点击点所在区域所能容纳最大连续空白矩形面积及顶点坐标需求分析及相关解决方案
  • k8s部署ELK补充篇:kubernetes-event-exporter收集Kubernetes集群中的事件
  • 网站建设与设计方案/站长工具查询网站信息
  • 个人可以备案哪些网站/大数据技术主要学什么
  • 建设招聘网站/b站网页入口
  • 保定网站推广费用/爱站网 关键词挖掘工具
  • 爱生活和辽宁app下载/单页关键词优化费用
  • 网站建设科/北京官网seo