iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 27
0
AI & Data

作者超囉嗦,但一天只要十分鐘的MYSQL真.新手教學系列 第 27

第二十七日-MYSQL的「如果」:IF、CASE基本用法

  • 分享至 

  • xImage
  •  

IF、CASE翻成中文就是「如果」,根據條件來決定要執行的事情,
在各個程式語法理面都會有類似的語法,MYSQL也不例外
今天介紹的是IF、CASE基本用法,
那這兩個使用時間分別是什麼呢?

IF的意思是:如果怎麼樣...就怎麼樣
「如果是特惠期間入學,學費就打八折!」、
「如果周年慶消費湊買一萬元,回饋紅利點數兩百點。」,
生活中的各種如果,在MYSQL就變成IF。

那如果狀況是「如果客人喜歡夏天,推薦他海洋擴香;喜歡春天,
推薦玫瑰花香;喜歡秋天,推薦甜甜的蜂蜜;都不是就推薦茉莉花香」,
像這樣CASE BY CASE,根據狀況決定行動
我們就使用CASE語法。

  • IF...ELSE

IF...ELSE便是如果[條件]就[結果一],剩下不滿足條件的就[結果二],
語法是:
IF(條件,符合條件要做的事,不符合條件要做的事)

例如我們想要把學生的性別翻成中文就能寫:
如果gender是F,就寫女生,其他的就寫男生。

SELECT full_name,IF(gender='F','女','男') AS '性別',gender FROM education.student;
  • CASE

CASE用法是如果[條件一]就[結果一],如果[條件二]就[結果二],.....,剩下不滿足條件的就[結果x],
中間想寫幾個條件就寫幾格條件。
寫法有兩種:第一種只能判斷欄位的值是不是等於特定值,第二種則是可以加上條件。

  1. 第一種CASE寫法

    第一種寫法寫起來簡單,但只能判斷欄位裡面是不是特定值,
    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;
    
  2. 第二種CASE寫法

    第二種寫法寫起來比較麻煩,但是可以做的事情比較多:
    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;
    

上一篇
第二十六日-MYSQL聚合函數:GROUP BY搭配HAVING
下一篇
第二十八日-MYSQL預存程序 STORED PROCEDURE:來寫一個BMI小程式(1)
系列文
作者超囉嗦,但一天只要十分鐘的MYSQL真.新手教學30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 則留言

0
kouhei
iT邦新手 5 級 ‧ 2023-10-27 15:28:49

第二種CASE寫法的地方:

例如我們和剛剛一樣,把class的課程翻成中文,但這次我們可以試著把OR跟AND加進去,就會變成「如果id是1,會是「鋼琴」,如果id是2或是3,會是「吉他或鼓」,
如果id大於3而且小於5,會是「聲樂」,以上條件都不滿足就是「聲樂」,
最後這個欄位名稱要顯示「課程名稱」。」

以上條件都不滿足就是「聲樂」,這段的聲樂應該要改成作曲

0
Chikuwa
iT邦新手 2 級 ‧ 2024-01-08 13:07:58

幫忙補充 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

我要留言

立即登入留言