我是靠谱客的博主 雪白季节,最近开发中收集的这篇文章主要介绍SQL中的case then的使用(select、update、insert、delete中各自使用)1. 前言2. 先说结论3. 举例子4. 总结,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

文章目录

  • 1. 前言
  • 2. 先说结论
    • 1. case then格式写法:
    • 2. case then在 crud的写法
  • 3. 举例子
    • 1. 前提准备
    • 2. select 中使用
    • 3. insert 中使用
    • 4. update 中使用
    • 5. delete 中使用
  • 4. 总结

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. 但有时候这样子操作确实会实现功能非常简单的话,就得掂量掂量一下。

最后

以上就是雪白季节为你收集整理的SQL中的case then的使用(select、update、insert、delete中各自使用)1. 前言2. 先说结论3. 举例子4. 总结的全部内容,希望文章能够帮你解决SQL中的case then的使用(select、update、insert、delete中各自使用)1. 前言2. 先说结论3. 举例子4. 总结所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(63)

评论列表共有 0 条评论

立即
投稿
返回
顶部