mysql中的case when 與if else

來源:互聯網
上載者:User

標籤:condition   div   title   body   creat   不為   url   運算式   sel   

大神說:在sql中,能用if else  就不用case  when

下面來看看,具體為什麼,沒有搞清楚,如果有大神知道的提供下資料:

 

Mysql的if既可以作為運算式用,也可在預存程序中作為流程式控制制語句使用,如下是做為運算式使用:

IF運算式

複製代碼代碼如下:
IF(expr1,expr2,expr3)


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

複製代碼代碼如下:
select *,if(sva=1,"男","女") as ssva from taname where sva != ""


作為運算式的if也可以用CASE when來實現:

複製代碼代碼如下:
select CASE sva WHEN 1 THEN ‘男‘ ELSE ‘女‘ END as ssva from taname where sva != ‘‘


在第一個方案的返回結果中, value=compare-value。而第二個方案的返回結果是第一種情況的真實結果。如果沒有匹配的結果值,則返回結果為ELSE後的結果,如果沒有ELSE 部分,則傳回值為 NULL。

 

例如:

複製代碼代碼如下:
SELECT CASE 1 WHEN 1 THEN ‘one‘
  WHEN 2 THEN ‘two‘ 
   ELSE ‘more‘ END
as testCol


將輸出one

 

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。

 

IF ELSE 做為流程式控制制語句使用

if實現條件判斷,滿足不同條件執行不同的操作,這個我們只要學編程的都知道if的作用了,下面我們來看看mysql 預存程序中的if是如何使用的吧。

複製代碼代碼如下:
IF search_condition THEN 
    statement_list  
[ELSEIF search_condition THEN]  
    statement_list ...  
[ELSE 
    statement_list]  
END IF 


與PHP中的IF語句類似,當IF中條件search_condition成立時,執行THEN後的statement_list語句,否則判斷ELSEIF中的條件,成立則執行其後的statement_list語句,否則繼續判斷其他分支。當所有分支的條件均不成立時,執行ELSE分支。search_condition是一個條件運算式,可以由“=、<、<=、>、>=、!=”等條件運算子組成,並且可以使用AND、OR、NOT對多個運算式進行組合。

 

例如,建立一個預存程序,該預存程序通過學生學號(student_no)和課程編號(course_no)查詢其成績(grade),返回成績和成績的等級,成績大於90分的為A級,小於90分大於等於80分的為B級,小於80分大於等於70分的為C級,依次到E級。那麼,建立預存程序的代碼如下:

複製代碼代碼如下:
create procedure dbname.proc_getGrade  
(stu_no varchar(20),cour_no varchar(10))  
BEGIN 
declare stu_grade float;  
select grade into stu_grade from grade where student_no=stu_no and course_no=cour_no;  
if stu_grade>=90 then 
    select stu_grade,‘A‘;  
elseif stu_grade<90 and stu_grade>=80 then 
    select stu_grade,‘B‘;  
elseif stu_grade<80 and stu_grade>=70 then 
    select stu_grade,‘C‘;  
elseif stu_grade70 and stu_grade>=60 then 
    select stu_grade,‘D‘;  
else 
    select stu_grade,‘E‘;  
end if;  
END 


注意:IF作為一條語句,在END IF後需要加上分號“;”以表示語句結束,其他語句如CASE、LOOP等也是相同的。

 

sql if else 語句

IF ELSE 語句
IF ELSE 是最基本的編程語句結構之一幾乎每一種程式設計語言都支援這種結構而
它在用於對從資料庫返回的資料進行檢查是非常有用的TRANSACT-SQL 使用IF ELSE
的例子如下
文法
if (condition)
begin
(statement block)
end
else if (condition)
begin
statement block)
end
else
begin
(statement block)
end
注意當所指定的條件為真時對應的BEGIN END 語句塊就會被執行同時
你也應該注意將每一個語句縮排一定量的空格是一種很好的編程習慣它可以極大的提向
你的程式的易讀性和由於易讀性不好所導致的錯誤

mysql中的case when 與if else

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.