文章目录

  • 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 peopleinsert 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. SQL server触发器中 update insert delete 分别给写个例子被。

    SQL server触发器中 update insert delete 分别给写个例子以及解释下例子的作用和意思被, 万分感谢!!!! 主要想知道下各个语句的书写规范. INSERT: 表1 (ID, ...

  2. oracle中update,insert,delete的高级用法

    一.对视图的更新. update,insert,delete除了可以作用于单表,还可以作用于视图.子查询,但是有种种限制. 视图(子查询)的限制:   1.没有集合操作符(并.差.交): 2.没有DI ...

  3. mysql中怎么查表中的数据_[MySQL] 用select查询数据表中的记录

    用select查询数据表中的记录 select 语句的基本语法如下: select selection_list 选择那些列 from table_list 从那个表去选择行 where primar ...

  4. Sql Server where case 满足条件执行 不满足 不做任何条件查询

    sql 里经常用的where语句中可以使用case when 常用的 select * from tb where a= case when b>0 and b<100 then 1 wh ...

  5. GBase 8s SQL 指南:教程———6编写高级SELECT语句

    6编写高级SELECT语句 本章中增大了使用SELECT语句可执行的操作的范围.并使您能够执行更复杂的数据库查 询和数据处理.编写SELECT语句着重于SELECT语句语法中的五个子句.本章添加了 G ...

  6. python中case的用法_python中Switch/Case实现的示例代码

    python 的 python中Switch/Case实现的示例代码 学习Python过程中,发现没有switch-case,过去写C习惯用Switch/Case语句,官方文档说通过if-elif实现 ...

  7. SQL中的case when then else end用法

    2019独角兽企业重金招聘Python工程师标准>>> Case具有两种格式.简单Case函数和Case搜索函数. --简单Case函数 CASE sexWHEN '1' THEN ...

  8. mysql能用case嵌套sql吗,关于sqlserver中查询语句中嵌套case语句使用方法

    ryxxlong的博客 Sql server 中的 CASE 语句文章, 链接 http://ryxxlong.iteye.com/blog/531221 写的比较详细,具体内容如下,主要用于自己以后 ...

  9. SQL中的CASE WHEN语句

    有这样一道面试题: 一张表数据如下 1900-1-1 胜 1900-1-1 胜 1900-1-1 负 1900-1-2 胜 1900-1-2 胜 写出一条SQL语句,使检索结果如下: 胜 负 1900 ...

  10. SQL中的CASE WHEN用法

    SQL中Case的使用方法 Case具有两种格式.简单Case函数和Case搜索函数. --简单Case函数 CASE sex WHEN '1' THEN '男' WHEN '2' THEN '女' ...

最新文章

  1. 拿下两个世界第一,阿里人机对话模型成人工智能国际通用标准
  2. 3台廉价服务器支撑200万TPS的消息中间件
  3. 据库专家Michael Stonebraker获得2014年图灵奖
  4. Hadoop三大核心组件及需求催生大数据技术的背景
  5. php 数组是否属于迭代器,数组的迭代器属性Iterator介绍
  6. git冲突Please move or remove them before you can merge
  7. Docker:集装箱式“运输”在软件上的实现
  8. android 跳转动画黑屏,Android8.0 适配解决页面跳转过程出现短暂黑屏的问题
  9. C/C++语言以某符号分割字符串
  10. hadoop hdfs 集群模板机配置
  11. Linux yum软件仓库配置,linux配置软件仓库 、 yum管理应用软件 、 快速部署Web/FTP...
  12. wordpress 如何移除管理后台仪表盘小工具
  13. mybatis SqlSessionDaoSupport的使用(附代码下载)(转)
  14. 能ping通,TCP就一定能连通吗?
  15. 深入浅出MFC第二章笔记
  16. 土方回填施工方案范本_土方回填施工方案范本
  17. 编码规范 SonarQube检测出的bug、漏洞以及异味的修复整理
  18. 没有CCTV-5也不用慌的世界杯观战指南
  19. brew upgrade出现It seems there is already an App at的解决方法
  20. 浅谈微信小程序对于创业者,意味着什么?

热门文章

  1. Android四大组件-SQLite数据库操作
  2. Shopee菲律宾站推出#TatakPinoy虚拟贸易展
  3. 护肤秘籍 三招成就完美肌肤 - 生活至上,美容至尚!
  4. php 酒店预订网站源码
  5. 【英语:语法基础】C1.日常对话-自我介绍
  6. 6.4 键盘消息和字符集
  7. python 物理专业_ewant: 用Python 学通识物理
  8. java 转换riq_java 日期转化
  9. JavaScript代码整洁之道-变量篇
  10. unity3d 贪吃蛇移动