Mysql
 sql >> Database >  >> RDS >> Mysql

MySQL - Istruzione CASE vs IF vs funzione IF

Dal manuale , sembra il if la funzione è solo una forma meno flessibile del case espressione. Ad esempio, potresti scrivere:

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

E l'equivalente con case :

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

Ma case è più flessibile. Consente più di un ramo, come:

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

E può agire come un switch :

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

Ora il if affermazione è una bestia completamente diversa. È una istruzione di controllo nelle procedure MySQL . Il modulo di dichiarazione è simile a:

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

Ecco un SQL Fiddle con la versione dell'istruzione. Sembra che Mr Bean non sia tutto ciò per cui è stato creato!

Un'ultima nota:il case l'espressione è SQL standard e funziona nella maggior parte dei database. Il if la funzione non è SQL standard e non funzionerà in altri database, come SQL Server o PostgreSQL.