CASE语句的使用方法

CASE语句有两种:

一种是case [column] when,指定了判断条件所在的列。

另一种是case when [column],因为条件在子句中所以能对任意列进行判断。


 本例建立一个员工表,有员工id(id),员工姓名(name)、部门id(department_id)和员工年龄(age))4个字段

再建立一个部门表,记录部门id(id)和部门名称(name)

case [column] when

Case [column] when 类似于switch,限制于对固定1个条字段的条件判断。

SELECT id,

  CASE department_id WHEN 501 THEN "销售" ELSE "研发" END AS department_name


FROM t_clerk

这个语句的功能是,显示字段id和department_name。当与id同一行的department_id是501时department_name显示“销售”,否则显示“研发”。

【case department_id】:先锁定对`department_id`进行判断。

【when 501】:只指定了一个值,因为是对`department_id`进行判断,所以此处的条件是department_id=501

【THEN “销售”】:对每一行记录进行遍历,若某一行的department_id是501则选择“销售”。(select字段时将显示该字段每一行的值,select一个字符串时则会直接显示这个字符串)

【else “研发”】:同理,如果某一行的department_id不是501则返回“研发”

【end】:是一个case的结束边界。

case when [column]

case when [column]中的column可以是任意列,且应是列中值的条件。

SELECT id,

 CASE

      WHEN department_id < 502 THEN "销售"

      WHEN department_id > 501 THEN "研发"

      ELSE "无"

  END Dname

FROM t_clerk

可以看出有多个when。对于每个id,会从上到下依次执行每个when,直到满足条件(再往下的when不执行)。

比如,将第一个when设置为永真条件department_id<503

SELECT id,

 CASE

      WHEN department_id < 503 THEN "销售"    #永真条件

      WHEN department_id > 501 THEN "研发"

      ELSE "无"

  END Dname

FROM t_clerk

则所有department_name值都是销售。

若第一个值有一半的记录满足,而第二条是永真,则一半都是销售(由第一条when判断来赋值),另一半是研发(不触发第一个条件,但是触发第二个条件)。

每个when里的条件可以是不同列的值,比如刚才使用的永真条件可以改为age<200

SELECT id,

 CASE

      WHEN age < 200 THEN "销售"   #永真条件

      WHEN department_id > 501 THEN "研发"

      ELSE "无"

  END Dname

FROM t_clerk

这样所有人显示的部门名称都是销售。

  • 6
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值