MySQL - CASE语句 vs IF语句 vs IF函数

49

请问有谁能够解释一下CASE语句、IF语句和IF函数之间的区别?

在使用和“工作原理”方面,它们有何不同?


请参阅MySQL文档(http://dev.mysql.com/doc/)。 - Ejaz
1个回答

82

从手册上看if 函数似乎只是 case 表达式的一种不太灵活的形式。例如,你可以这样写:

select if(username = 'darxysaq', 'high', 'low') as awesomeness

并使用case进行等效操作:

select case when username = 'darxysaq' then 'high' else 'low' end as awesomeness

但是case更为灵活,它可以允许多个分支,例如:

select case 
       when username = 'darxysaq' then 'high' 
       when username = 'john skeet' then 'medium' 
       else 'low' 
       end as awesomeness

同时它也可以像一个开关一样起作用:

select case username 
       when 'darxysaq' then 'high' 
       when 'john skeet' then 'medium' 
       else 'low' 
       end as awesomeness

现在,if语句是完全不同的一种东西。它是MySQL存储过程中的控制语句。该语句的形式如下:

CREATE FUNCTION GetAwesomeness (username varchar(50))
RETURNS varchar(20)
BEGIN
   IF username = 'darxysaq' THEN
      return 'high';
   ELSEIF username = 'john skeet' THEN
      return 'medium';
   ELSE
     return 'low';
   END IF;
END; //

这里有一份带语句版本的 SQL Fiddle。看起来Mr Bean不像他所宣扬的那样厉害!

最后注意: case 表达式是标准SQL,适用于大多数数据库。 if 函数不是标准SQL,不能在其他数据库中使用,例如SQL Server或PostgreSQL。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接