IF、CASE翻成中文就是「如果」,根據條件來決定要執行的事情,
在各個程式語法理面都會有類似的語法,MYSQL也不例外
今天介紹的是IF、CASE基本用法,
那這兩個使用時間分別是什麼呢?
IF的意思是:如果怎麼樣...就怎麼樣,
「如果是特惠期間入學,學費就打八折!」、
「如果周年慶消費湊買一萬元,回饋紅利點數兩百點。」,
生活中的各種如果,在MYSQL就變成IF。
那如果狀況是「如果客人喜歡夏天,推薦他海洋擴香;喜歡春天,
推薦玫瑰花香;喜歡秋天,推薦甜甜的蜂蜜;都不是就推薦茉莉花香」,
像這樣CASE BY CASE,根據狀況決定行動,
我們就使用CASE語法。
IF...ELSE便是如果[條件]就[結果一],剩下不滿足條件的就[結果二],
語法是:
IF(條件,符合條件要做的事,不符合條件要做的事)
例如我們想要把學生的性別翻成中文就能寫:
如果gender是F,就寫女生,其他的就寫男生。
SELECT full_name,IF(gender='F','女','男') AS '性別',gender FROM education.student;
CASE用法是如果[條件一]就[結果一],如果[條件二]就[結果二],.....,剩下不滿足條件的就[結果x],
中間想寫幾個條件就寫幾格條件。
寫法有兩種:第一種只能判斷欄位的值是不是等於特定值,第二種則是可以加上條件。
第一種寫法寫起來簡單,但只能判斷欄位裡面是不是特定值,
CASE 欄位 WHEN [特定值一] THEN [返回值一] WHEN [特定值二] THEN [返回值二] ELSE [返回值三] END AS [欄位顯示名稱]
例如我們想把class的課程翻成中文,就可以假設如果課程id是1,會是「鋼琴」,
如果課程id是2,會是「鼓」,其他當作「未知」,最後這個欄位名稱要顯示「課程名稱」。
SELECT
CASE id WHEN 1 THEN '鋼琴' WHEN 2 THEN '鼓' ELSE '未知' END AS '課程名稱',
subject FROM education.class ORDER BY id;
第二種寫法寫起來比較麻煩,但是可以做的事情比較多:
CASE WHEN [條件一] THEN [結果一] WHEN [條件二] THEN [結果二] ELSE [結果x] END AS [欄位顯示名稱]
例如我們和剛剛一樣,把class的課程翻成中文,但這次我們可以試著把OR跟AND加進去,
就會變成「如果id是1,會是「鋼琴」,如果id是2或是3,會是「吉他或鼓」,
如果id大於3而且小於5,會是「聲樂」,以上條件都不滿足就是「聲樂」,
最後這個欄位名稱要顯示「課程名稱」。」
SELECT
CASE WHEN id =1 THEN '鋼琴' WHEN id =2 OR ID=3 THEN '吉他或鼓' WHEN id >3 AND id<5 THEN '聲樂' ELSE '作曲' END AS '課程名稱',
subject FROM education.class ORDER BY id;
第二種CASE寫法的地方:
例如我們和剛剛一樣,把class的課程翻成中文,但這次我們可以試著把OR跟AND加進去,就會變成「如果id是1,會是「鋼琴」,如果id是2或是3,會是「吉他或鼓」,
如果id大於3而且小於5,會是「聲樂」,以上條件都不滿足就是「聲樂」,
最後這個欄位名稱要顯示「課程名稱」。」
以上條件都不滿足就是「聲樂」,這段的聲樂應該要改成作曲
幫忙補充 case
,在遇到第一個符合的 when
條件,就會取 then
當作欄位值,否則將會繼續往下判斷。
以下分享一段語法,用來判斷學生是否滿 18 歲:
select
full_name,
birth_date,
case
when year(now()) - year(birth_date) > 18 then "是"
when year(now()) - year(birth_date) < 18 then "否"
when month(now()) > month(birth_date) then "是"
when month(now()) < month(birth_date) then "否"
when day(now()) >= day(birth_date) then "是"
else "否"
end as "是否成年"
from student