- CASE 表達式是什么?
- 怎樣使用 CASE 表達式?
1.CASE 表達式是什么?
CASE 表達式是sql語言分情況討論的一種表達形式。
CASE 表達式有兩種:
- 一種是類似編程的
switch case。 SQL 中稱為簡單 CASE 表達式 - 一種是類似于
IF語句的根據(jù)條件表達式進行判斷。 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
根據(jù)一個 value 與 compare_value_1 進行比較。滿足的話就進入 THEN 之后的表達式中,不滿足的話就進入 ELSE 。
SELECT
CASE position
WHEN '主任醫(yī)師' THEN 1
ELSE 0
END AS is_p
FROM
doctor
根據(jù) 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
此時自上而下根據(jù)condition判斷,取對應(yīng)的值,都不滿足的時候取最后的result。
例子:
SELECT
customerName, state, country
FROM
customers
ORDER BY (
CASE
WHEN state IS NULL THEN country
ELSE state
END);
另一個例子,動態(tài)聚合函數(shù)的輸入:
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;