case語句的種類:
1.簡單case語句
語法:
case exp when comexp then returnvalue
…
when comexp then returnvalue
else returnvalue
end
case到end之間相當於一個具體的值,可以做運算,取別名,嵌套case 等等。
只要把case到end當作一個運算結果的表達式就可以了。
舉例:
select cust_last_name,
case credit_limit when 100 then ‘low’
when 5000 then ‘high’
else ‘medium’
end
from customers;
2.搜索case語句
語法:
case when boolean then return value
…
when boolean then return value
else retur nvalue
end
舉例:
select case when id between 1 and 10 then ‘low’
when id between 20 and 30 then ‘mid’
when id between 40 and 50 then ‘high’
else ‘unknow’
end
from product;
簡單case和搜索case之間的區別:
1.簡單case只能是when後面的表達式完全匹配case後的表達式,相當於 =,所以也不能匹配null。
2. searched case可以作爲比較條件,那麼可以使用like、!=、between …and、<、=、is null、is not null等,比簡單case的使用更加廣泛,完全可以替代簡單case。
注意事項:
1.case 表達式返回的是一個確定的value,若前面的都不匹配,則返回else中的項.
2.簡單case 中的表達式,when 後面的表達式類型應該全部保持一致.
3.所有的then 後面的return_value類型要保持一致.
4.對於簡單case 表達式,也就是case 表達式 when…那麼when null 總是取不到。也就是case 後面的表達式如果值爲null,不會與when null 匹配,只會與else匹配.
5.對於searched case來說,有自動類型轉換,只要條件成立就可以。
如:select case when 1=‘1’ then 1 end from dual; 其中1='1’條件成立
值得一提的是: sql中的case語句與pl/sql中的case語句的不同之處:
前者的else不是必須的,如果沒有匹配就返回null;後者的else不寫,則報case_not_found異常.
case中嵌套子查詢
Case語句中可以使用子查詢,但是必須返回一行,不可以是多行.
如:
select case (select count() as s1 from t1 where a = 1)
when (select count() as s2 from t1, t2 where t1.a = t2.a and t2.a = 1) then ‘相等’
else ‘不相等’
end
from dual;