Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL - CASE vs. IF-Anweisung vs. IF-Funktion

Aus dem Handbuch , sieht es aus wie das if Die Funktion ist nur eine weniger flexible Form des case Ausdruck. Sie könnten zum Beispiel schreiben:

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

Und das Äquivalent mit case :

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

Aber case ist flexibler. Es erlaubt mehr als einen Zweig, wie:

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

Und es kann wie ein switch wirken :

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

Nun der if Aussage ist eine ganz andere Bestie. Es ist eine Steueranweisung in MySQL-Prozeduren . Das Anweisungsformular sieht folgendermaßen aus:

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

Hier ist ein SQL Fiddle mit der Anweisungsversion. Es sieht so aus, als wäre Mr. Bean nicht das, was er sich vorstellt!

Eine letzte Anmerkung:der case Ausdruck ist Standard-SQL und funktioniert in den meisten Datenbanken. Der if Funktion ist kein Standard-SQL und funktioniert nicht in anderen Datenbanken wie SQL Server oder PostgreSQL.