我的编程空间,编程开发者的网络收藏夹
学习永远不晚

SQL 中 CASE 表达式的使用方式

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

SQL 中 CASE 表达式的使用方式

1. 前言

CASE 表达式是从 SQL-92 标准开始被引入的。

在 CASE 表达式里,可以使用 BETWEEN 、LIKE和 < 、> 等便利的谓词组合,以及能嵌套子查询的 IN 和 EXISTS 谓词。

2. 语法

CASE 表达式有 简单 CASE 表达式(simple case expression) 和 搜索 CASE 表达式(searched case expression) 两种写法:

-- 简单CASE 表达式
CASE sex
WHEN '1' THEN '男'
WHEN '2' THEN '女'
ELSE '其他'END
-- 搜索CASE 表达式
CASE WHEN sex = '1' THEN '男'
     WHEN sex = '2' THEN '女'
ELSE '其他' END

sex 列(字段)如果是 '1' ,那么结果为男;如果是 '2' ,那么结果为女。

3. 注意点

CASE在匹配给定条件时,发现为真的 WHEN 子句时,CASE 表达式的真假值判断就会中止,而剩余的 WHEN 子句会被忽略。为了避免引起不必要的混乱,使用 WHEN 子句时要注意条件的排他性。

-- 例如,这样写的话,结果里不会出现“第二”
CASE WHEN col_1 IN ('a', 'b') THEN '第一'
     WHEN col_1 IN ('a') THEN '第二'
ELSE '其他' END
  • 统一各分支返回的数据类型: 一定要注意 CASE 表达式里各个分支返回的数据类型是否一致。某个分支返回字符型,而其他分支返回数值型的写法是不正确的。
  • 不要忘了写 END: 不写END是语法错误,这是不允许的。
  • 养成写 ELSE 子句的习惯: 与 END 不同,ELSE 子句是可选的,不写也不会出错。不写 ELSE 子句时,CASE 表达式的执行结果是 NULL 。

4. 分类汇总数据

SQL 中 CASE 表达式的使用方式

SELECT 
    CASE pref_name 
        WHEN '德岛' THEN '四国'
        WHEN '香川' THEN '四国'
        WHEN '爱媛' THEN '四国'
        WHEN '高知' THEN '四国'
        WHEN '福冈' THEN '九州'
        WHEN '佐贺' THEN '九州'
        WHEN '长崎' THEN '九州'
    END AS district,
    SUM(population) AS total
FROM poptbl
GROUP BY 
    CASE pref_name 
        WHEN '德岛' THEN '四国'
        WHEN '香川' THEN '四国'
        WHEN '爱媛' THEN '四国'
        WHEN '高知' THEN '四国'
        WHEN '福冈' THEN '九州'
        WHEN '佐贺' THEN '九州'
        WHEN '长崎' THEN '九州'
    END;

5. 一条SQL实现不同条件的统计

SQL 中 CASE 表达式的使用方式

SELECT
    pref_name AS '县名',
    SUM( CASE WHEN sex=1 THEN population ELSE 0 END ) AS '男' 
    SUM( CASE WHEN sex=2 THEN population ELSE 0 END ) AS '女' 
FROM poptlb
GROUP By pref_name

6. 使用CHECK约束定义多个列的条件关系

假设某公司规定“女性员工的工资必须在 20 万日元以下”,而在这个公司的人事表中,这条无理的规定是使用 CHECK 约束来描述的,代码如下所示:

CONSTRAINT check_salary CHECK ( 
    CASE WHEN sex = '2' THEN 
        CASE WHEN salary <= 200000
            THEN 1 ELSE 0 END
        ELSE 1 END = 1 
)

7. 在UPDATE语句中进行条件分支

SQL 中 CASE 表达式的使用方式

条件:

  • 对当前工资为 30 万日元以上的员工,降薪 10%。
  • 对当前工资为 25 万日元以上且不满 28 万日元的员工,加薪 20%。
UPDATE Salaries
SET salary = CASE WHEN salary>300000 THEN salary*0.9
                  WHEN salary>=250000 AND salary <280000 THEN salary * 1.2
                  ELSE salary
             END;

8. 生成交叉表

SQL 中 CASE 表达式的使用方式

SQL 中 CASE 表达式的使用方式

SQL 中 CASE 表达式的使用方式

--- 使用IN谓词
SELECT
    course_name AS '课程名',
    CASE WHEN courese_id IN (SELECT course_id FROM open_course WHERE mouth = '200706')
            THEN 'o' 
            ELSE 'x' 
    END AS '6 月'
    CASE WHEN courese_id IN (SELECT course_id FROM open_course WHERE mouth = '200707')
            THEN 'o' 
            ELSE 'x' 
    END AS '7 月'
    CASE WHEN courese_id IN (SELECT course_id FROM open_course WHERE mouth = '200708')
            THEN 'o' 
            ELSE 'x' 
    END AS '8 月'
FROM course_master;

--- 或者使用EXIST谓词
SELECT CM.course_name,
    CASE WHEN EXISTS (SELECT course_id FROM OpenCourses OC WHERE month = 200706 AND OC.course_id = CM.course_id) 
        THEN '○' ELSE '' 
    END AS "6 月",
    CASE WHEN EXISTS (SELECT course_id FROM OpenCourses OC WHERE month = 200707 AND OC.course_id = CM.course_id) 
        THEN '○' ELSE '' 
    END AS "7 月",
    CASE WHEN EXISTS (SELECT course_id FROM OpenCourses OC WHERE month = 200708 AND OC.course_id = CM.course_id) 
        THEN '○' ELSE '' 
    END AS "8 月"
FROM CourseMaster CM;

9. CASE表达式中使用聚合函数

SQL 中 CASE 表达式的使用方式

对于加入了多个社团的学生,通过将其“主社团标志”列设置为 Y 或者 N 来表明哪一个社团是他的主社团;对于只加入了一个社团的学生,将其“主社团标志”列设置为 N。

现需要查询出所有学生加入的社团,若加入了多个则显示主社团

SELECT 
    std_id,
    CASE WHEN COUNT(*)==1 THEN MAX(club_id) 
         ELSE MAX(CASE WHEN main_club_flg = 'Y' THEN club_id ELSE NULL END)
    END AS 'main_club'
FROM student_club
GROUP BY std_id

10. 按照自定义规则排序列

SQL 中 CASE 表达式的使用方式

按照mark列排序,要求修正a b c d 的权重为 c b a d

SELECT
    mark
FROM 
    sort_test
ORDER BY
    CASE mark
        WHEN 'a' THEN -1
        WHEN 'b' THEN 1
        WHEN 'c' THEN 2
        WHEN 'd' THEN -2
    END 

到此这篇关于 SQL 中 CASE 表达式的使用方式的文章就介绍到这了,更多相关 SQL CASE 表达式内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

SQL 中 CASE 表达式的使用方式

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

SQL CASE 表达式

目录一、什么是 CASE 表达式二、CASE 表达式的语法三、CASE 表达式的使用方法请参阅学习重点CASE 表达式分为简单 CASE 表达式和搜索 CASE 表达式两种。搜索 CASE 表达式包含简单 CASE 表达式的全部功能。虽然 CASE 表达式中的
SQL CASE 表达式
2016-12-18

如何在表达式中使用Mysql SELECT CASE

在MySQL中,可以使用SELECT CASE语句来根据不同的条件选择不同的值或执行不同的操作。下面是一个示例,展示了如何在表达式中使用MySQL SELECT CASE:```sqlSELECT column1, column2,CASE
2023-09-26

sql中如何使用正则表达式

sql中使用正则表达式可通过regexp_like()函数,使用posix语法匹配字符串。常用字符包括锚点字符、字符类和量词。正则表达式可用于在select、where和其他语句中搜索和提取数据,但不同数据库系统对正则表达式支持略有不同。如
sql中如何使用正则表达式
2024-05-02

SQL Server怎么使用T-SQL公用表表达式

本文小编为大家详细介绍“SQL Server怎么使用T-SQL公用表表达式”,内容详细,步骤清晰,细节处理妥当,希望这篇“SQL Server怎么使用T-SQL公用表表达式”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知
2023-06-30

java中Lamdba表达式的使用方法

这篇文章主要介绍了java中Lamdba表达式的使用方法,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1、Lamdba若只需要一个参数时,小括号可以省略Consumer
2023-06-15

sql三元表达式怎么使用

在SQL中,可以使用CASE语句来模拟三元表达式。例如,可以使用以下语法来实现三元表达式:SELECT column_name,CASEWHEN condition THEN value1ELSE value2END AS result
sql三元表达式怎么使用
2024-04-16

lambda表达式使用方法

本篇内容介绍了“lambda表达式使用方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!package test;import java.u
2023-06-02

Java 中使用正则表达式的方法

本篇文章给大家分享的是有关Java 中使用正则表达式的方法,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。使用RegexString.with(string).pattern(p
2023-05-31

Android Studio中使用lambda表达式的方法

1.module的build.gradle里buildTypes中添加:compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility J
2023-05-31

lambda表达式在java8中的使用方法

这篇文章给大家介绍lambda表达式在java8中的使用方法,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。定义 TantanitReader:public class TantanitReader { private
2023-05-31

C# 中的 Case 表达式:Switch 语句的深入解析

C# 中的 switch​ 语句是一种强大的控制结构,它允许你根据表达式的值进行复杂的条件判断。通过使用具体的值、范围或枚举,你可以编写出灵活且易于理解的代码。掌握 switch 语句的用法对于编写高质量的 C# 代码至关重要。
C#SwitchCase2024-11-29

MyBatis动态SQL表达式怎么使用

本篇内容介绍了“MyBatis动态SQL表达式怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!动态 sql 简单来讲就是我们能通过条件
2023-07-04

编程热搜

目录