SQL語句條件判斷之case when基本用法
阿新 • • 發佈:2020-12-14
在日常開發中
有些需求我們無法避免的要在SQL語句中進行類似於Java中if判斷的操作,那SQL語句是否可以滿足呢?
本文將介紹SQL條件判斷關鍵字case when的基本用法
基本語法
case x when y then z else m end
乍一看看不懂沒關係,我們把它拆分開解釋
case x 意思就是設定一個引數,x可以是一個數據庫欄位,也可以是一個dao層傳遞的引數,也可以是一個固定值
when y 意思就是給設定的x引數設定條件
then z 就是當x滿足y條件之後做的操作,類似於Java中if條件為true 的情況
else m 當x不滿足y條件時的操作,類似於Java中的if條件為false的else程式碼塊
end 代表本case when語句結束,每個case when語句都要帶有end 否則sql語句報錯
整體解釋就是
設定一個x引數,當x滿足y時執行z 不滿足時執行m(x可忽略,原因請看下文中的舉例.)
應用舉例
1.用於SELECT之後,FROM之前,判斷要查詢的欄位
假設dao傳遞了一個type引數,查詢User表中的password欄位,並且當type為1時 查詢帳號,當type為2時,查詢使用者id
SELECT PASSWORD,
CASE #{type} WHEN 1 THEN id
WHEN 2 THEN loginName
ELSE money
END AS Data
FROM USER
執行結果
2.用於Where之後,用於判斷要根據哪個條件查詢
查詢User表的全部,當表的id欄位為1的時候,根據id='1’查詢 當表的id欄位為2的時候 根據loginName='1’查詢,否則根據todayMoney='1’查詢
SELECT *
FROM USER
WHERE CASE id WHEN '1' THEN id
WHEN '2' THEN loginName
ELSE todayMoney
END
='1'
執行結果
3.用於order by 之後,用來判斷排序條件
假設dao層傳遞一個type引數,當type=1時,根據id降序排列,當type=2時,根據phone升序排列
SELECT *
FROM USER
ORDER BY
CASE WHEN #{type}= '1' THEN id END DESC,
CASE WHEN #{type}='2' THEN phone END asc
這裡就省略了x,換了一種寫法.這種更適用於判斷大於小於這些條件.
執行結果
還有其它許多使用場景 就不一一舉例了.
期待您的不吝賜教