Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

MySQL - instrução CASE vs IF vs função IF


Do manual , parece que o if função é apenas uma forma menos flexível do case expressão. Por exemplo, você poderia escrever:
select if(username = 'darxysaq', 'high', 'low') as awesomeness

E o equivalente com case :
select case when username = 'darxysaq' then 'high' else 'low' end as awesomeness

Mas case é mais flexível. Permite mais de uma ramificação, como:
select case 
       when username = 'darxysaq' then 'high' 
       when username = 'john skeet' then 'medium' 
       else 'low' 
       end as awesomeness

E pode agir como um switch :
select case username 
       when 'darxysaq' then 'high' 
       when 'john skeet' then 'medium' 
       else 'low' 
       end as awesomeness

Agora o if declaração é uma besta totalmente diferente. É uma instrução de controle em procedimentos MySQL . O formulário de declaração se parece com:
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; //

Aqui está um SQL Fiddle com a versão da instrução. Parece que o Sr. Bean não é tudo o que ele inventou para ser!

Uma nota final:o case expression é SQL padrão e funciona na maioria dos bancos de dados. O if A função não é SQL padrão e não funcionará em outros bancos de dados, como SQL Server ou PostgreSQL.