SQL中Case的妙用 三

2021-08-30 12:46:40 字數 2517 閱讀 7618

四,根據條件有選擇的update。

例,有如下更新條件 

1. 工資5000以上的職員,工資減少10% 

2. 工資在2000到4600之間的職員,工資增加15% 

很容易考慮的是選擇執行兩次update語句,如下所示 

--條件1

update

personnel

setsalary = salary * 0.9

where

salary >= 5000;

--條件2

update

personnel

setsalary = salary * 1.15

where

salary >= 2000 

andsalary < 4600;

但是事情沒有想象得那麼簡單,假設有個人工資5000塊。首先,按照條件1,工資減少10%,變成工資4500。接下來執行第二個sql時候,因為這個人的工資是4500在2000到4600的範圍之內, 需增加15%,最後這個人的工資結果是5175,不但沒有減少,反而增加了。如果要是反過來執行,那麼工資4600的人相反會變成減少工資。暫且不管這個規章是多麼荒誕,如果想要乙個sql 語句實現這個功能的話,我們需要用到case函式。**如下:

update

personnel

setsalary = 

case

when

salary >= 5000

then

salary * 0.9

when

salary >= 2000 

andsalary < 4600

then

salary * 1.15

else

salary 

end;

這裡要注意一點,最後一行的else salary是必需的,要是沒有這行,不符合這兩個條件的人的工資將會被寫成null,那可就大事不妙了。在case函式中else部分的預設值是null,這點是需要注意的地方。 

這種方法還可以在很多地方使用,比如說變更主鍵這種累活。 

一般情況下,要想把兩條資料的primary key,a和b交換,需要經過臨時儲存,拷貝,讀回資料的三個過程,要是使用case函式的話,一切都變得簡單多了。

p_key

col_1

col_2 a

1 張三

b 2李四 c

3 王五

假設有如上資料,需要把主鍵a和b相互交換。用case函式來實現的話,**如下 

update

sometable

setp_key = 

case

when

p_key = 

'a'

then

'b'

when

p_key = 

'b'

then

'a'

else

p_key 

end

where

p_key in(

'a', 

'b');

同樣的也可以交換兩個unique key。需要注意的是,如果有需要交換主鍵的情況發生,多半是當初對這個表的設計進行得不夠到位,建議檢查表的設計是否妥當。 

五,兩個表資料是否一致的檢查。

case函式不同於decode函式。在case函式中,可以使用between,like,is null,in,exists等等。比如說使用in,exists,可以進行子查詢,從而 實現更多的功能。 

下面具個例子來說明,有兩個表,tbl_a,tbl_b,兩個表中都有keycol列。現在我們對兩個表進行比較,tbl_a中的keycol列的資料如果在tbl_b的keycol列的資料中可以找到, 返回結果'matched',如果沒有找到,返回結果'unmatched'。 

要實現下面這個功能,可以使用下面兩條語句 

--使用in的時候

select

keycol,

case

when

keycol 

in( 

select

keycol 

from

tbl_b )

then

'matched'

else

'unmatched'

endlabel

from

tbl_a;

--使用exists的時候

select

keycol,

case

when

exists ( 

select

* from

tbl_b

where

tbl_a.keycol = tbl_b.keycol )

then

'matched'

else

'unmatched'

endlabel

from

tbl_a;

使用in和exists的結果是相同的。也可以使用not in和not exists,但是這個時候要注意null的情況。 

SQL中Case的妙用 二

二,用乙個sql語句完成不同條件的分組。有如下資料 國家 country 性別 人口 population 中國 1340 中國 2260 美國 1 45 美國 2 55加拿大 1 51加拿大 2 49 英國 1 40 英國 2 60按照國家和性別進行分組,得出結果如下 國家 男 女中國 34026...

sql中case的用法

由於之前沒有用到case,乙個簡單的分類統計問題竟被我group by 又union的整得很麻煩,原來case是可以應用得很靈活的。乙個應用場景如下 乙個表中儲存了使用者 姓名,年齡,性別 要求統計 35歲和 35歲的女使用者和南使用者分別是多少 一共四類 開始我是想著先把 35歲的按性別group...

SQL中Case語句用法

sql中,case具有兩種格式。即簡單case函式和case搜尋函式。下文中筆者與大家一起討論sql中case語句用法。簡單case函式 case when 1 then 男 when 2 then 女 else 其他 end case搜尋函式 case when 1 then 男 when 2 t...