1. 程式人生 > 其它 >SQL語句條件判斷之case when基本用法

SQL語句條件判斷之case when基本用法

技術標籤:JavaSQLmysqlsqljava資料庫

在日常開發中
有些需求我們無法避免的要在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條件為falseelse程式碼塊
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,換了一種寫法.這種更適用於判斷大於小於這些條件.
執行結果
![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20201209141616783.png
還有其它許多使用場景 就不一一舉例了.

期待您的不吝賜教