前言:
CASE語句具有兩種格式。1、簡單CASE函數 2、CASE搜索函數。
場景:
SQL中使用增加一些判斷呢???當然使用Case When Then End啦;
例子:
1、舉個萬年不變學生的問題。有張student表。字段:id、name、sex(0:男 1:女)、grade(成績) 查詢男學生大於80分女學生大於90的學生名單
CASE搜索函數:
SELECT * FROM `student ` where grade > (case when sex = 0 then 80 else 90 end)
簡單CASE函數:
SELECT * FROM `student ` where grade > (case sex when 0 then 80 else 90 end)
如果超過兩個條件呢?Case When Then End
2、進入泰國的學校了哈。sex值增加個2代表人妖。-.-查詢男學生大於80分女學生大於90的人妖大於60的學生名單。
CASE搜索函數:
SELECT * FROM `student ` where grade > (case when sex = 0 then 80 when sex = 1 then 90 when sex = 2 then 60 end)
簡單CASE函數:
SELECT * FROM `student ` where grade > (case sex when 0 then 80 when 1 then 90 when 2 then 60 end);
3、十分常用的場景:Code轉換Value。一般我們落庫的都是Code。比如上面的sex字段,0:男 1:女 2:人妖。現在我想要把對應的code顯示對應的中文怎麼辦??
SELECT *,(case sex when 0 then '男' when 1 then '女' when 2 then '人妖' end) as '性別' FROM `student ` WHERE grade > (case when sex = 0 then 80 when sex = 1 then 90 when sex = 2 then 60 end);
總結:
1、簡單CASE函數的寫法相對比較簡潔,
2、簡單CASE函數功能方面會有些限制,無法寫判定式,比如:CASE搜索函數可以自定義實現>(大於)、<(小於)、<>(不等於)、IN條件。而簡單CASE函數僅僅是等於條件。
3、爲了方便理解以上例子都是比較簡單的,其實case裏面也可以嵌套SQL等更爲複雜的邏輯。