MySQL中case?when的兩種基本用法及區(qū)別總結(jié)
MySQL中的case when有用兩種用法,官方文檔中的說明如下:
用法一:
CASE case_value WHEN when_value THEN statement_list [WHEN when_value THEN statement_list] ... [ELSE statement_list] END CASE
用法二:
CASE WHEN search_condition THEN statement_list [WHEN search_condition THEN statement_list] ... [ELSE statement_list] END CASE
下面通過具體示例來說明case when這兩種用法的區(qū)別:
創(chuàng)建salary表,并向salary表中插入數(shù)據(jù):
# 創(chuàng)建salary表: create table salary( id int, name char(1), sex char(1), salary int )engine myisam charset utf8; #向salary表中插入數(shù)據(jù): insert into salary values (1,'A','m',2500), (2,'B','f',1500), (3,'C','m',5500), (4,'D','f',500);
示例一:在查詢語句中實現(xiàn)更改salary表中員工的性別,即如果員工的性別是‘m’,則將其改為‘f’,反之如果性別為‘f’,則將其改為‘m’。
采用case when的第一種用法:
select id,name, case sex when 'f' then 'm' else 'f' end as new_sex,salary from salary;
這種用法通過比較case后面的case_value和第一個when后面的when_value,若二者相等則給new_sex賦一個指定的值,若二者值不相等,則比較case_value與第二個when后面的when_value是否相等,以此類推。若case_value與所有的when_value都不相等,且有else語句的話,則把else后面的值賦給new_sex,否則把null值賦給new_sex。
采用case when的第二種用法:
select id,name,case when sex='f' then 'm' else 'f' end as new_sex,salary from salary;
上述代碼中,when后面是一個邏輯表達式,若表達式為真,則把then后面的值賦給new_sex;若第一個when后面表達式為假,則查看第二個when后面的邏輯表達式,以此類推的;若所有when后面的邏輯表達式均為假,且有else語句的話,則把else后面的值賦給new_sex,否則把null值賦給new_sex.
示例二:在查詢語句中實現(xiàn)將salary表中員工的工資歸類。歸類依據(jù)是,工資在1000元以下的歸為‘low’類,工資在1000-3000元范圍歸為‘middle’類,工資在3000元以上的歸為‘high’類。
這種情況只能采用case when的第二種用法:
select id,name,sex,case when salary > 3000 then 'high' when salary between 1000 and 3000 then 'middle' else 'low' end as salary_level from salary;
假如以3000元為界限,將3000元以上的工資歸為‘high'類,3000元以下包括3000元的工資歸為‘low’類,則此時也可以采用case when的第一種用法:
select id,name,sex,case salary>3000 when True then 'high' else 'low' end as salary_level from salary;
總結(jié):由前文所述可知,case when的第一類用法只適用于二值比較問題,而case when的第二種用法的適用范圍更廣。因此我將case when的第一中用法理解為簡單條件賦值,第二種用法理解為復(fù)雜條件賦值。
補充:MySQL中的case when 中對于NULL值判斷
總結(jié)
到此這篇關(guān)于MySQL中case when的兩種基本用法及區(qū)別總結(jié)的文章就介紹到這了,更多相關(guān)MySQL中case when用法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
解決MYSQL出現(xiàn)Can''t create/write to file ''/tmp/#sql_5c0_0.MYD''
今天在配置服務(wù)器的時候提示這個問題Can't create/write to file,原來是php.ini中設(shè)置的tmp目錄不存在2013-07-07MySql8 WITH RECURSIVE遞歸查詢父子集的方法
這篇文章主要介紹了MySql8 WITH RECURSIVE遞歸查詢父子集的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12MySql統(tǒng)計函數(shù)COUNT的具體使用詳解
本文主要介紹了MySql統(tǒng)計函數(shù)COUNT的具體使用詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08MySQL數(shù)據(jù)庫可以用任意ip連接訪問的方法
本文主要介紹了MySQL數(shù)據(jù)庫可以用任意ip連接訪問的方法,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-05-05