一:case表达式的用法

1、SQL中的case表达式的作用是用来对“某个变量”进行某种转化,通常在select字句中使用,举个例子:

不能看出,case表达式很像我们的if else的作用,在发现为真的 WHEN 子句时,CASE 表达式的真假值判断就会中止,而剩余的 WHEN 子句会被忽略。case表达式有两种写法:

-- 简单CASE 表达式

CASE sex
   WHEN '1' THEN '男'
   WHEN '2' THEN '女'

ELSE '其他' END

-- 搜索CASE 表达式

CASE WHEN sex = '1' THEN '男'
      WHEN sex = '2' THEN '女'

ELSE '其他' END

注意点:

* else这句非必须但最好带上,如果when中没有符合条件的,且有没有else控制,那么,这样的case会返回null,null不是个好东西,所以你一定要尽量控制减少返回null的情况。

* 简单点说,在能写列名和常量的地方,通常都可以写 CASE 表达式,因为它返回的是一个标量值。

2、使用case实现不同条件的统计:

还是上一个学生表,如果让你查询出各个省份的男生总数和女生总数你会怎么搞呢?

我反正稍加思考,可以想到这样写:

--查看所有学生信息
select StudentID,[Name],Province,Gender,(case Gender
when 0 then N'女'
when 1 then N'男'
else '' end) StuGender
from dbo.T_Student --查询出各省的男女生总数:
select p.Province,sum(p.MaleCount) TotalMale,sum(p.FamaleCount) TotalFamale
from (
select Province, count(1) MaleCount,0 as FamaleCount
from dbo.T_Student
where gender=1
group by Province
union
select Province, 0,count(1) FamaleCount
from dbo.T_Student
where gender=0
group by Province
)as p
group by p.Province

对应的执行结果:

so,可以看到,能实现功能,但是代码却那么长,看着不舒服,这时咱们看看如何用case来拯救世界吧:

--查看所有学生信息
select StudentID,[Name],Province,Gender,(case Gender
when 0 then N'女'
when 1 then N'男'
else '' end) StuGender
from dbo.T_Student --查询出各省的男女生总数:
select Province,
sum(case when Gender=1 then 1 else 0 end ) as MaleCount,
sum(case when Gender=0 then 1 else 0 end ) as FeMaleCount
from dbo.T_Student
group by Province

执行结果:

so,仅仅5行就搞定了,差别很明显,新手where,高手case,good。

3、在update操作中使用case条件分支,比如有个员工表Salaries,工资字段为salary ,

假设现在需要根据以下条件对该表的数据进行更新。

  1. 对当前工资为 30 万日元以上的员工,降薪 10%。

  2. 对当前工资为 25 万日元以上且不满 28 万日元的员工,加薪 20%。

那么更新的SQL语句可以这样写:

-- 用CASE 表达式写正确的更新操作
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;

** 参考:图灵社区的《SQL进价教程》一书。

SQL进阶1:case表达式的用法示例的更多相关文章

  1. SQL进阶随笔--case用法(一)

    SQL进阶一整个是根据我看了pdf版本的整理以及自己的见解整理.后期也方便我自己查看和复习. CASE 表达式 CASE 表达式是从 SQL-92 标准开始被引入的.可能因为它是相对较新的技术,所以尽 ...

  2. SQL进阶随笔--case用法(二)

    ---恢复内容开始--- 用 CHECK 约束定义多个列的条件关系 今天来说下check和case的用法.其实,CASE 表达式和 CHECK 约束是很般配的一对组合.也许有很多数据库工程师不怎么用 ...

  3. SQL Server case表达式的用法

    ★CASE表达式是一个标量表达式,它基于条件逻辑来返回一个值.因为CASE是一个标量表达式,所以它可以应用在SELECT.WHERE.HAVING以及ORDER BY子句中. CASE表达式有两种格式 ...

  4. SQL:select case when 的用法

    CASE 可能是 SQL 中被误用最多的关键字之一.虽然你可能以前用过这个关键字来创建字段,但是它还具有更多用法.例如,你可以在 WHERE 子句中使用 CASE. 首先让我们看一下 CASE 的语法 ...

  5. 走向面试之数据库基础:二、SQL进阶之case、子查询、分页、join与视图

    一.CASE的两种用法 1.1 等值判断->相当于switch case (1)具体用法模板: CASE expression WHEN value1 THEN returnvalue1 WHE ...

  6. 转-sql中的case when的用法

    Case具有两种格式.简单Case函数和Case搜索函数. --简单Case函数 CASE sex WHEN '1' THEN '男' WHEN '2' THEN '女' ELSE '其他' END ...

  7. sql server中case when的用法

    Case具有两种格式.简单Case函数和Case搜索函数. --简单Case函数 CASE sex WHEN '1' THEN '男' WHEN '2' THEN '女' ELSE '其他' END ...

  8. [转帖]SQL 里面的 case when 的用法

    SQL之case when then else end用法介绍 https://www.2cto.com/database/201804/740772.html 要培训了 看到有case when 之 ...

  9. Oracle的sql语句中case关键字的用法 & 单双引号的使用

    关于sql中单引号和双引号的使用,来一点说明: 1. 查询列的别名如果含有汉字或者特殊字符(如以'_'开头),需要用双引号引起来.而且只能用双引号,单引号是不可以的. 2. 如果想让某列返回固定的值, ...

随机推荐

  1. 逆向工程-真码保存在系统文件破解QQ游戏对对碰助手

    1)注册栏中输入任意值测试 1.2)记录弹出的关键字对话框 2.1)发送至PEID进行查壳 2.2)发现无壳 2.3)将软件载入OllyDBG程序 2.4)在反汇编栏下右键选择中文搜索引擎->智 ...

  2. Java演算法-「雞兔同籠問題」

    /** * 雞兔同籠問題:窮舉算法思想 */ import java.util.*; public class ChichenAndHabbit { static int chichenNum,hab ...

  3. laravel整合workerman做消息推送系统

    官方建议分离 workerman和mvc框架的结合,我去,这不是有点脑缺氧吗? 大量的业务逻辑,去独立增加方法和类库在写一次,实际业务中是不现实和不实际的 gateway增加一些这方面的工作,但是我看 ...

  4. 获取各种编码(Unicode,UTF8等)的识别符

    下面是常用编码的识别符, 在 Delphi(2009) 中如何获取呢?Unicode: FF FE; BigEndianUnicode: FE FF; UTF8: EF BB BF var   bs: ...

  5. centos 7安装mysql 执行./scripts/mysql_install_db --user=mysql 报错 FATAL ERROR: please install the following Perl modules before executing ./scripts/mysql_install_db: Data::Dumper

    [root@localhost mysql]# ./scripts/mysql_install_db  --user=mysql FATAL ERROR: please install the fol ...

  6. 关于Java项目打包成Runnable jar文件后运行时图片不显示的问题

    现象:在eclipse中能够无误运行,但导出Runnable jar后运行jar包时不显示图片. 原因:路径问题. 方法1: 新建一个文件夹.文件夹中放那个jar包和image文件夹.在这种情况下,双 ...

  7. Linux shell编程:状态变量

    四大特殊状态变量:$?. $$. $!. $_ $?的作用是:获取执行上一个指令的执行状态返回值,返回0表示上一个命令或者程序执行成功,返回的值为非0则表示上一个命令执行失败. $$的作用是:获取当前 ...

  8. 基于ROS的分布式机器人远程控制平台

    基于ROS的分布式机器人远程控制平台   1 结构说明 HiBot架构主要使用C/S架构,其中HibotServer为服务器,Muqutte为消息服务器中间件,HiBotClient为运行在机器人上的 ...

  9. 移动iptv安装三方软件

    1.思路:  分为硬件和软件. a.硬件是ttl直接上串口,弄得比较复杂,且容易损坏盒子,先不考虑 b.软件:抓包获取iptv的请求数据,将移动光猫的iptv出口接到交换机上,电脑和盒子接入到同一个交 ...

  10. xtrabackup工具备份与恢复

    1.xtrabackup简介 Xtrabackup是一个对InnoDB做数据备份的工具,支持在线热备份(备份时不影响数据读写),是商业备份工具InnoDB Hotbackup的一个很好的替代品.它能对 ...