MySQL - CASE与IF语句与IF函数

dar*_*saq 14 mysql

谁可以解释CASE声明,IF声明和IF函数之间的区别?

使用方面和"工作原理"有何不同?

And*_*mar 30

从手册中看,if函数只是case表达式的一种不太灵活的形式.例如,你可以写:

select if(username = 'darxysaq', 'high', 'low') as awesomeness
Run Code Online (Sandbox Code Playgroud)

相当于case:

select case when username = 'darxysaq' then 'high' else 'low' end as awesomeness
Run Code Online (Sandbox Code Playgroud)

case更灵活.它允许多个分支,例如:

select case 
       when username = 'darxysaq' then 'high' 
       when username = 'john skeet' then 'medium' 
       else 'low' 
       end as awesomeness
Run Code Online (Sandbox Code Playgroud)

它可以表现得像switch:

select case username 
       when 'darxysaq' then 'high' 
       when 'john skeet' then 'medium' 
       else 'low' 
       end as awesomeness
Run Code Online (Sandbox Code Playgroud)

现在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; //
Run Code Online (Sandbox Code Playgroud)

这是一个声明版本的SQL小提琴. 看起来憨豆先生并不是他所做的全部!

最后一点:case表达式是标准SQL,适用于大多数数据库.该if函数不是标准SQL,不适用于其他数据库,如SQL Server或PostgreSQL.