久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

select case when的一些用法以及IF的用法

 cqxujun 2013-04-18

sql語句中的case語句與高級語言中的switch語句,,是標準sql的語法,,適用于一個條件判斷有多種值的情況下分別執(zhí)行不同的操作,。

首先,,讓我們看一下CASE的語法,。在一般的SELECT中,其語法格式如下:
SELECT <myColumnSpec> =
CASE <單值表達式>
       when <表達式值> then <SQL語句或者返回值>
       when <表達式值> then <SQL語句或者返回值>
       ...
       when <表達式值> then <SQL語句或者返回值>
END

例子(引用): 
第一組: 查詢dj_zt表狀態(tài)為'07'或'11',、qylx_dm = '03'的所有記錄數,。
A:用CASE語句
select count(case a.zt when '07' then a.bs end)+
    count(case a.zt when '11' then a.bs end)
from dj_zt a
where a.qylx_dm = '03'
----------------
11829

B:不用CASE語句
select count(*)
from dj_zt a
where a.qylx_dm = '03'
   and a.zt in ('07', '11')
----------------
11829 

結果:A、B兩組耗費的代價一樣的,,相比B的寫法簡潔,,平局,。

第二組: 分別查詢dj_zt表狀態(tài)為'07'和'11'且qylx_dm = '03'的所有記錄數。
A:用CASE語句
select count(case a.zt when '07' then a.bs end),
    count(case a.zt when '11' then a.bs end)
from dj_zt a
where a.qylx_dm = '03
----------------
4565 7264

B:不用CASE語句(寫了兩條語句,,掃描表兩遍,效率明顯低下)
select count(*)
from dj_zt a
where a.qylx_dm = '03'
   and a.zt='07'
----------------
4565 

select count(*)
from dj_zt a
where a.qylx_dm = '03'
   and a.zt='11'
----------------
7264

結果:B組代價明顯高出A組很多,,執(zhí)行的效率比較低。

CASE和IF的區(qū)別: 
在高級語言中,,CASE的可以用IF來替代,,但是在SQL中不行。
CASE是SQL標準定義的,,IF是數據庫系統(tǒng)的擴展,。
CASE可以用于SQL語句和SQL存儲過程、觸發(fā)器,,IF只能用于存儲過程和觸發(fā)器,。
在SQL過程和觸發(fā)器中,用IF替代CASE代價都相當的高,,相當的麻煩,,難以實現(xiàn)。


總結: 通過上面兩組實例可以看出,,應用CASE語句可以讓SQL變得簡潔高效,,從而大大提高了執(zhí)行效率。而且,,CASE的使用一般不會引起性能(相比沒有用CASE的語句)低下,,反而增加了操作的靈活性

select atid,userid,title,releasedate,ForumId,clicks,istoday = (
case Convert(varchar(10), releasedate,120) 
when Convert(varchar(10), getdate(),120) 
then releasedate 
end),BBSSetTop from Tab_ArticleTopics where ForumId<>0 and status in(1,5) 
order by BBSSetTop desc, istoday desc,clicks desc

===========================================
有一張表,,里面有3個字段:語文,,數學,英語,。其中有3條記錄分別表示語文70分,,數學80分,英語58分,,請用一條sql語句查詢出這三條記錄并按以下條件顯示出來(并寫出您的思路): 
   大于或等于80表示優(yōu)秀,,大于或等于60表示及格,小于60分表示不及格,。 
       顯示格式: 
       語文              數學                英語 
       及格              優(yōu)秀                不及格    
------------------------------------------ 
select 
(case when 語文>=80 then '優(yōu)秀' 
        when 語文>=60 then '及格' 
else '不及格') as 語文, 
(case when 數學>=80 then '優(yōu)秀' 
        when 數學>=60 then '及格' 
else '不及格') as 數學, 
(case when 英語>=80 then '優(yōu)秀' 
        when 英語>=60 then '及格' 
else '不及格') as 英語, 
from table

------------------------------------------------------------------------

IF語句的用法

IF(expr1,expr2,expr3)

如果 expr1 是TRUE (expr1 <> 0 and expr1 <> NULL),,則 IF()的返回值為expr2; 否則返回值則為 expr3。IF() 的返回值為數字值或字符串值,,具體情況視其所在語境而定,。

mysql> SELECT IF(1>2,2,3);

-> 3

mysql> SELECT IF(1<2,'yes ','no');

-> 'yes'

mysql> SELECT IF(STRCMP('test','test1'),'no','yes');

-> 'no'

如果expr2 或expr3中只有一個明確是 NULL,則IF() 函數的結果類型 為非NULL表達式的結果類型,。

expr1 作為一個整數值進行計算,,就是說,,假如你正在驗證浮點值或字符串值, 那么應該使用比較運算進行檢驗,。

mysql> SELECT IF(0.1,1,0);

-> 0

mysql> SELECT IF(0.1<>0,1,0);

-> 1

在所示的第一個例子中,,IF(0.1)的返回值為0,原因是 0.1 被轉化為整數值,,從而引起一個對 IF(0)的檢驗,。這或許不是你想要的情況。在第二個例子中,,比較檢驗了原始浮點值,,目的是為了了解是否其為非零值。比較結果使用整數,。

IF() (這一點在其被儲存到臨時表時很重要 ) 的默認返回值類型按照以下方式計算:

表達式

返回值

expr2 或expr3 返回值為一個字符串,。

字符串

expr2 或expr3 返回值為一個浮點值。

浮點

expr2 或 expr3 返回值為一個整數,。 

整數

假如expr2 和expr3 都是字符串,,且其中任何一個字符串區(qū)分大小寫,則返回結果是區(qū)分大小寫,。

IFNULL(expr1,expr2)

假如expr1 不為 NULL,,則 IFNULL() 的返回值為 expr1; 否則其返回值為 expr2。IFNULL()的返回值是數字或是字符串,,具體情況取決于其所使用的語境,。

mysql> SELECT IFNULL(1,0);

-> 1

mysql> SELECT IFNULL(NULL,10);

-> 10

mysql> SELECT IFNULL(1/0,10);

-> 10

mysql> SELECT IFNULL(1/0,'yes');

-> 'yes'

IFNULL(expr1,expr2)的默認結果值為兩個表達式中更加“通用”的一個,順序為STRING,、 REAL或 INTEGER,。假設一個基于表達式的表的情況, 或MySQL必須在內存儲器中儲存一個臨時表中IFNULL()的返回值:

CREATE TABLE tmp SELECT IFNULL(1,'test') AS test,;

在這個例子中,,測試列的類型為 CHAR(4)。

NULLIF(expr1,expr2)

如果expr1 = expr2 成立,,那么返回值為NULL,,否則返回值為 expr1。這和CASE WHEN expr1 = expr2 THEN NULL ELSE expr1 END相同,。

mysql> SELECT NULLIF(1,1);

-> NULL

mysql> SELECT NULLIF(1,2);

-> 1

注意,,如果參數不相等,則 MySQL 兩次求得的值為 expr1

    本站是提供個人知識管理的網絡存儲空間,,所有內容均由用戶發(fā)布,,不代表本站觀點。請注意甄別內容中的聯(lián)系方式,、誘導購買等信息,,謹防詐騙,。如發(fā)現(xiàn)有害或侵權內容,請點擊一鍵舉報,。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多