在日常开发中
有些需求我们无法避免的要在SQL语句中进行类似于Java中if判断的操作,那SQL语句是否可以满足呢?
本文将介绍SQL条件判断关键字case when的基本用法

基本语法

case x when y then z else m end

乍一看看不懂没关系,我们把它拆分开解释

case x 意思就是设置一个参数,x可以是一个数据库字段,也可以是一个dao层传递的参数,也可以是一个固定值
when y 意思就是给设定的x参数设置条件
then z 就是当x满足y条件之后做的操作,类似于Java中if条件为true的情况
 else m  当x不满足y条件时的操作,类似于Java中的if条件为false的else代码块
end 代表本case when语句结束,每个case when语句都要带有end 否则sql语句报错

整体解释就是
设置一个x参数,当x满足y时执行z 不满足时执行m(x可忽略,原因请看下文中的举例.)

应用举例

1.用于SELECT之后,FROM之前,判断要查询的字段

假设dao传递了一个type参数,查询User表中的password字段,并且当type为1时 查询帐号,当type为2时,查询用户id

SELECT PASSWORD,
CASE #{type} WHEN 1 THEN id
WHEN 2 THEN loginName
ELSE money
END AS Data
FROM USER

执行结果

2.用于Where之后,用于判断要根据哪个条件查询

查询User表的全部,当表的id字段为1的时候,根据id='1’查询 当表的id字段为2的时候 根据loginName='1’查询,否则根据todayMoney='1’查询

SELECT *
FROM USER
WHERE CASE id WHEN '1' THEN id
WHEN '2' THEN loginName
ELSE todayMoney
END
='1'

执行结果

3.用于order by 之后,用来判断排序条件

假设dao层传递一个type参数,当type=1时,根据id降序排列,当type=2时,根据phone升序排列

SELECT *
FROM USER
ORDER BY
CASE  WHEN #{type}= '1' THEN id END DESC,
CASE WHEN #{type}='2'  THEN phone END asc

这里就省略了x,换了一种写法.这种更适用于判断大于小于这些条件.
执行结果

还有其它许多使用场景 就不一一举例了.

期待您的不吝赐教

SQL语句条件判断之case when基本用法相关推荐

  1. sql语句条件判断函数(流程控制函数)

    在查询语句中,我们可能会遇到使用条件判断函数的情况,今天记录一下条件判断函数的使用. 名称 具体作用 IF(EXPR ,V1,V2) 如果满足条件返回第一个值,否则返回第二个 IFNULL(V1,V2 ...

  2. oracle sql循环判断语句怎么写,Oracle 非常详细的 PL/SQL入门教程,PL/SQL语法格式/循环语句/条件判断/异常处理...

    PL/SQL入门教程目录 Oracle PL/SQL入门教程,PL/SQL语法格式/循环语句/条件判断/异常处理 一.PL/SQL简介 1.PL/SQL简介 1.PL/SQl是过程语言PL与结构化语言 ...

  3. .net一个函数要用另一个函数的值_【195期】MySQL中的条件判断函数 CASE WHEN、IF、IFNULL你会用吗?...

    点击上方"Java面试题精选",关注公众号 面试刷图,查缺补漏 >>号外:往期面试题,10篇为一个单位归置到本公众号菜单栏->面试题,有需要的欢迎翻阅 阶段汇总集 ...

  4. .net一个函数要用另一个函数的值_Mysql:条件判断函数-CASE WHEN、IF、IFNULL详解

    前言 在众多SQL中,统计型SQL绝对是让人头疼的一类,之所以如此,是因为这种SQL中必然有大量的判读对比.而条件判断函数就是应对这类需求的利器.本文重点总结CASE WHEN.IF.IFNULL三种 ...

  5. kettle中的switch_kettle 条件判断 Switch Case

    kettle 条件判断 Switch Case kettle 条件判断 Switch Case 介绍 Switch / Case,顾名思义,类似 Java 中的 Switch / Case,用于进行条 ...

  6. MySQL中的条件判断函数 CASE WHEN、IF、IFNULL你会用吗?

    前言 参考文章:https://mp.weixin.qq.com/s?__biz=MzIyNDU2ODA4OQ==&mid=2247486529&idx=1&sn=6d5cd7 ...

  7. android 结束if循环_简单探究Android平台下' if ' 语句条件判断耗时情况

    2017年6月13日 前言 前几日在改Bug时看到好多调试时用的日志语句都被一个日志开关控制着它的执行权.形如: 1 if(Constants.LOG_TAG){2 Log.d(TAG, " ...

  8. js,if语句(条件判断语句)

    代码块 在js中可以使用代码块来进行分组     -代码块只有分组的作用,可以使文档更加简洁     -对代码本身没有任何影响.     -代码块会影响到let赋值的代码 let a; { a=1; ...

  9. 小程序-if判断语句/条件判断语句简析 /显示隐藏判断

    本文转载自: https://www.cnblogs.com/bellagao/p/6296058.html 作者:bellagao 转载请注明该声明. 小程序的条件判断语句格式为: wx:if=&q ...

最新文章

  1. 【2020年BNN网络的SOTA—— ReActNet 】以简单的操作得到更高精度的二值神经网络
  2. Filling Shapes
  3. 《深入理解LINUX网络技术内幕》小记1
  4. 分块矩阵在秩不等式中的应用
  5. 国庆佳节,我们有好礼相送!
  6. oracle PL/SL编程基础
  7. 学到了一个一分不亏的地推妙招
  8. java sleep 精度,java – Thread.sleep(x)是否足以在Android中用作时钟?
  9. 系统蓝屏代码为0X00000024的解决办法
  10. linux session 设置时间设置,设置linux系统history相关变量,命令时间、保存history条数,多session共享history...
  11. [Python]利用ricequant获取上证指数以及所有股票历史价格数据
  12. springboot校园疫情智慧防控微信小程序毕业设计源码011133
  13. 浅谈缓存-注解驱动的缓存 Spring cache介绍
  14. hive percentile_approx原理
  15. 复杂网络分析 03 ER网络学习笔记
  16. uva 10014 Simple calculations(数学推导)
  17. 关于Ndis驱动的一点个人理解
  18. 研究区域内测高卫星数据选取(pass)--以T/P-Jason1/2/3为例
  19. nova6se是华为鸿蒙系统吗,华为荣耀9x和nova6se哪个性价比高?_科技数码通
  20. 华为服务器虚拟化收费标准,HCS-Solution-IT-华为服务器虚拟化解决方案-03配置报价指导_华为虚拟化软件价格...

热门文章

  1. C++信号量实现线程间同步,windows使用SetEvent,linux使用sem_t,QT测试
  2. 软件测试BUG(缺陷)等级分类
  3. 精简指令集的特点_精简指令集有哪些指令
  4. C++语言程序设计第五版 - 郑莉(第六章课后习题)
  5. c 与java通信_javaSocket与C通信
  6. python用户输入错误重新输入_Python输错4次用户名密码需要输入验证码
  7. PostgreSQL16中pg_dump的LZ4和ZSTD压缩
  8. bit Byte bps Bps
  9. 如何彻底删除ELTIMA的vspd(虚拟串口)
  10. DNS总是出现问题怎么办?