- CASE 表达式是什么?
- 怎样使用 CASE 表达式?
1.CASE 表达式是什么?
CASE 表达式是sql语言分情况讨论的一种表达形式。
CASE 表达式有两种:
- 一种是类似编程的
switch case。 SQL 中称为简单 CASE 表达式 - 一种是类似于
IF语句的根据条件表达式进行判断。 SQL 语言称为搜索 CASE 表达式
2. 如何使用 CASE 表达式?
分别就简单 CASE 表达式和搜索 CASE 表达式使用方式
2.1 简单 CASE 表达式
类似编程的 switch case 的方式
CASE value
WHEN compare_value_1 THEN result_1
WHEN compare_value_2 THEN result_2
…
ELSE result END
根据一个 value 与 compare_value_1 进行比较。满足的话就进入 THEN 之后的表达式中,不满足的话就进入 ELSE 。
SELECT
CASE position
WHEN 主任医师 THEN 1
ELSE 0
END AS is_p
FROM
doctor
根据 position 的值进行判断返回 1 或者是 0
ELSE可以省略END不能省略
2.2 搜索 CASE 表达式
IF类型的 CASE 表达式
CASE
WHEN condition_1 THEN result_1
WHEN condition_2 THEN result_2
…
ELSE result END
此时自上而下根据condition判断,取对应的值,都不满足的时候取最后的result。
例子:
SELECT
customerName, state, country
FROM
customers
ORDER BY (
CASE
WHEN state IS NULL THEN country
ELSE state
END);
另一个例子,动态聚合函数的输入:
SELECT
SUM(CASE
WHEN status = Shipped THEN 1
ELSE 0
END) AS Shipped ,
SUM(CASE
WHEN status = On Hold THEN 1
ELSE 0
END) AS On Hold ,
SUM(CASE
WHEN status = In Process THEN 1
ELSE 0
END) AS In Process ,
SUM(CASE
WHEN status = Resolved THEN 1
ELSE 0
END) AS Resolved ,
SUM(CASE
WHEN status = Cancelled THEN 1
ELSE 0
END) AS Cancelled ,
SUM(CASE
WHEN status = Disputed THEN 1
ELSE 0
END) AS Disputed ,
COUNT(*) AS Total
FROM
orders;
CASE与IFNULL
MySQL中还有一个IFNULL表达式,其格式如下:
IFNULL(expression_1,expression_2);
其逻辑为:如果expression_1 不为null,则返回expression_1,否则返回expression_2.
例如:
SELECT
IFNULL(education, -1 ) AS e_type
FROM
doctor;
上述语句中,如果education is null ,则返回-1,反则返回-1。
如果使用CASE来表达:
SELECT
CASE
WHEN education IS NULL THEN -1
ELSE education
END AS e_type
FROM
doctor;
CASE与IF
实际上,IFNULL的通用形式是IF表达式,其格式为
IF(condition,expression_1,expression_2)
类似于Java中的三元操作符,其逻辑为:如果condition为true,返回expression_1,否则 返回expression_2.
例如:
SELECT
IF(education IS NULL, -1 , 1 ) AS e_type
FROM
doctor;
如果使用CASE来表达:
SELECT
CASE
WHEN education IS NULL THEN -1
ELSE 1
END AS e_type
FROM
doctor;
© 版权声明
文章版权归作者所有,未经允许请勿转载。
相关文章
暂无评论...


