Větvení kódu v MySQL

Žádný programátor se neobejde bez konstrukcí umožňujících větvení kódu. Tyto konstrukce samozřejmě existují i v  SQL. MySQL zná tyto konstrukce CASE, IF, IFNULL, NULLIF.

CASE

CASE umožňuje rozdělit kód do několika větví v závislosti na hodnotě zadaného výrazu. Má dvě formy, první využijeme např. v případě, kdy máme v tabulce pole typu ENUM a chceme změnit výstup tak, aby šel použít přímo v koncové aplikaci.

 SELECT `ID`, `Jmeno`,
CASE `Status`
WHEN 1 THEN 'Zaměstnanec'
WHEN 2 THEN 'Student'
ELSE 'Pracovní poměr ukončen'
END
FROM `people` 

Tento kód vrátí přímo název pozice dotyčné osoby. Jeho funkce je jednoduchá, nejdřív zjistí hodnotu pole `Status` v aktualním řádku tabulky. Potom prochází jednotlivé větve příkazu. Pokud najde shodu, tak vrátí řetězec uvedený za slovem THEN, pokud ke shodě nedojde, dostaneme řetězec za slovem ELSE.

Druhá forma příkazu CASE je určena pro situace, kdy potřebujeme vyhodnotit sérii výrazů. Jakmile příkaz narazí na pravdivý výraz, tak vrátí hodnotu, která je uvedena za THEN.

 SELECT `Jmeno`,
CASE
WHEN `Score` < 200 THEN 'Začátečník'
WHEN `Score` > 200 AND `Score` < 2000 THEN 'Mírně pokročilý'
WHEN `Score` > 2000 THEN 'Profík'
END AS `Score`
FROM `table` 

IF, IFNULL, NULLIF

 IF(podmínka,výraz1,výraz2) 

IF vyhodnotí výraz v podmínce. Pokud je pravdivý, tak vrátí výraz1, v opačném případě vrací výraz2.

 IFNULL(výraz1,výraz2) 

IFNULL se chová trochu jinak. Pokud není výraz1 roven NULL, tak vrátí jeho hodnotu, v opačném případě vrací výraz2.

 NULLIF(výraz1,výraz2) 

Chování NULLIF je poměrně nečekané. Pokud jsou oba výrazy stejné, vráti NULL. V opačném případě dostaneme hodnotu výrazu1.

Větvení kódu v MySQL je dle mého názoru velmi užitečné, protože umožňuje řešit spoustu věcí přímo v SQL. Tím dojde ke zvýšení přehlednosti aplikace.

Literatura