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
switch 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
这样所有⼈显⽰的部门名称都是销售。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。