Mysql
 sql >> Base de données >  >> RDS >> Mysql

MySQL - CASE vs instruction IF vs fonction IF

Depuis le manuel , il ressemble au if la fonction est juste une forme moins flexible du case expression. Par exemple, vous pourriez écrire :

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

Et l'équivalent avec case :

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

Mais case est plus souple. Il autorise plus d'une branche, comme :

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

Et il peut agir comme un switch :

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

Maintenant le if déclaration est une bête entièrement différente. Il s'agit d'une instruction de contrôle dans les procédures MySQL . Le formulaire de déclaration ressemble à :

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; //

Voici un SQL Fiddle avec la version de l'instruction. On dirait que Mr Bean n'est pas tout ce qu'il est censé être !

Une dernière remarque :le case expression est du SQL standard et fonctionne dans la plupart des bases de données. Le if n'est pas du SQL standard et ne fonctionnera pas dans d'autres bases de données, comme SQL Server ou PostgreSQL.