IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> SQL中的case then的使用(select、update、insert、delete中各自使用) -> 正文阅读

[大数据]SQL中的case then的使用(select、update、insert、delete中各自使用)

1. 前言

  1. 在工作一段时间后发现,有时候有些事情可以让SQL帮我们做好,并不用傻傻把数据拿到java内存中,再用java进行处理,总结就是:能用一条SQL解决的事情,为什么还要在java程序做过多的处理。
  2. 而写SQL的时候,发现sql中的case then也挺好用的,于是把case then的在各个crud中的如何进行操作给记录下来。

2. 先说结论

1. case then格式写法:

```sql
// 第一种写法
CASE 
WHEN 列名 = 条件值  THEN 值1
WHEN 列名 = 条件值2 THEN 值2
WHEN 列名 = 条件值3 THEN 值3
ELSE 值4 END

// 第二种写法 可以把列名取出,这种情况用于只有一个列名作为条件的情况
CASE 列名 
WHEN 条件值  THEN 值1
WHEN 条件值2 THEN 值2
WHEN 条件值3 THEN 值3
ELSE 值4 END

// 第三种写法,可以无需ELSE 但要求一定会满足WHEN其中一条,否则可能就是NULL了
CASE 
WHEN 列名 = 条件值  THEN 值1
WHEN 列名 = 条件值2 THEN 值2
WHEN 列名 = 条件值3 THEN 值3
END
```

2. case then在 crud的写法

select name,
       sex,
       case when age >= 18 then '成年人'else '未成年'end age
from people

insert into people(name,sex,age,hobby)
values('小刚','男','18',case when '男'='男' then '打篮球' end);

update people set hobby = (case when #{A} = 1 then '跳绳' 
	                            when #{A} = 2 then '打篮球' 
	                            else hobby 
	                       end)
where 其他条件;

delete people where age = (case when #{A} = 'eighteen' then '18' 
                                when #{A} = 'seventeen' then '17'
                           end);

3. 举例子

1. 前提准备

  1. 先准备好数据(我使用oracle数据库,由于本人电脑无安装数据库,使用支持在线写SQL的Oracle学习免费网站)

    CREATE TABLE people  (
      name varchar2(200),
      sex varchar2(200),
      age varchar2(200),
      hobby varchar2(200)
    );
    INSERT INTO people VALUES ('小明', '男', '18','');
    INSERT INTO people VALUES ('小红', '女', '17','');
    

    在这里插入图片描述

2. select 中使用

  1. 查询出people表中全部数据,并age大于等于18输出为成年人,小于18输出未成年。

    select name,
           sex,
           case when age >= 18 then '成年人'else '未成年'end age
    from people
    

    在这里插入图片描述

3. insert 中使用

  1. 在使用mybatis的使用,通常都是会将值传入给SQL中,有时候可以根据传入的值设置其他字段的值。

  2. 如下:插入两条数据,如果性别是男生的话,全部hobby都写入打篮球。

    // 解析一下,在myabtis中如下:
    insert into people(name,sex,age,hobby)
    values(#{name},#{sex},#{age},case when #{sex}='男' then '打篮球' end);
    
    insert into people(name,sex,age,hobby)
    values('小刚','男','18',case when '男'='男' then '打篮球' end);
          
    insert into people(name,sex,age,hobby)
    values('小紫','女','18',case when '女'='男' then '打篮球' end);
    
    select * from people
    

    在这里插入图片描述

4. update 中使用

  1. 将全部性别为女的爱好都设置为跳绳。

    // 这里意思: 设置表people中hobby字段,
    // 如果性别是女,则hobby字段设置为跳绳,
    // 否则就使用本身表hobby字段的值进行更新,即保持原来表中的值
    update people set hobby = (case when sex = '女' then '跳绳' else hobby end);
    

    在这里插入图片描述

    	
    // 当然上述的sql可以转化为:
    update people set hobby =  '跳绳' where sex = '女';
    
    // 想必大家肯定是使用第二种的sql书写,原因是这里的条件刚刚好是表里面字段内容
    // 如果 java代码中,传入的参数不是sex,而是其他的,比如:
    // 传入A,如果A=1则hobby更新为跳绳,A=2则hobby更新为打篮球
    update people set hobby = (case when #{A} = 1 then '跳绳' 
    	                            when #{A} = 2 then '打篮球' 
    	                            else hobby 
    	                       end)
    where 其他条件;
    

5. delete 中使用

  1. 其实在delete中比较少使用case then,毕竟条件都可以写到where 里面了,当然也是少不了,跟我上述update例子中解释的,可能传入的参数完全跟表对不上情况:

  2. 传入参数A,如果是eighteen删除年龄是18岁的人,如果是seventeen删除年龄是17岁的人

    delete people where age = (case when #{A} = 'eighteen' then '18' 
                                    when #{A} = 'seventeen' then '17'
                               end);
    

    在这里插入图片描述

4. 总结

  1. case then 其实就是相当于java中的if else语句
  2. 使用case then主要是解决一些多种情况的选择。
  3. 一般其实不建议使用这样子的sql语句,毕竟会使sql具有唯一性,且带有写死的字符串。
  4. 但有时候这样子操作确实会实现功能非常简单的话,就得掂量掂量一下。
  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-09-24 21:03:44  更:2022-09-24 21:07:06 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 9:52:43-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码