sql >> Databáze >  >> RDS >> Mysql

MySQL - příkaz CASE vs IF vs funkce IF

Z příručky , vypadá to jako if function je jen méně flexibilní forma case výraz. Můžete například napsat:

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

A ekvivalent s case :

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

Ale case je flexibilnější. Umožňuje více než jednu větev, například:

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

A může fungovat jako switch :

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

Nyní if prohlášení je úplně jiné zvíře. Je to řídicí příkaz v procedurách MySQL . Formulář výpisu vypadá takto:

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

Zde je SQL Fiddle s verzí příkazu. Vypadá to, že pan Bean není všechno, co si vymyslel!

Poslední poznámka:case výraz je standardní SQL a funguje ve většině databází. if funkce není standardní SQL a nebude fungovat v jiných databázích, jako je SQL Server nebo PostgreSQL.




  1. Jak přidat klienta pomocí JDBC pro ClientDetailsServiceConfigurer na jaře?

  2. Ekvivalent Postgresql GROUP_CONCAT?

  3. Vytvořte omezení CHECK v SQLite

  4. Jak ukážu jedinečná omezení tabulky v MySQL?