Kontrolné funkcie

Vetvenie

Vetvenie sa používa v prípade, keď chceme vrátiť, či zmeniť dáta v závislosti na nejakej podmienke - najčastejšie v závislosti na dátach iných.


Príkaz IF

Príkaz IF poznáme z väčšiny programovacích jazykov. Obsahuje tri časti. Vyhodnotí sa podmienka (1. časť), ak je splnená je vrátený ako výsledok výraz v druhej časti, ak nie je splnená vráti sa výraz v tretej časti.

Syntax:

SELECT IF(podmienka,pravda,nepravda);

SELECT polozka, IF(podmienka,pravda,nepravda) AS nova_polozka FROM nazov_tabulky;


Príkaz sa môže použiť nie len v SELECT, ale aj v UPDATE.

Priklad:

SELECT meno,priezvisko,vek, IF(vek > 35,'priemerny','mlady') AS staroba FROM udaje WHERE vek IS NOT NULL;


Výsledkom bude nasledujúca tabuľka:

meno priezvisko vek staroba
Jozko Stary 25 mlady
Maria Mala 21 mlady
Ema Balazova 45 priemerny
Maria Novakova 24 mlady
Jan Novak 38 priemerny

Príkaz IFNULL

IFNULL má dva argumenty. Pokiaľ prvý argument je rovný hodnote NULL, je vrátený druhý, inak prvý. To sa často hodí v prípade, keď stĺpce smú obsahovať hodnoty NULL, ale my ich v danom prípade chceme nahradiť nejakou inou hodnotou.

Syntax:

SELECT IFNULL(podmienka,vystup_pri_chybe);

SELECT polozka, IFNULL(podmienka,vystup_pri_chybe) AS nova_polozka FROM nazov_tabulky;


Nasledujúcim príkladom vyselektujeme záznamy, ktoré v stĺpci vek obsahujú hodnotu null a zameníme ju za nulu.

Priklad:

select meno,priezvisko,vek, IFNULL(vek,0) AS n_vek FROM udaje;
// je ekvivalentny s
select meno,priezvisko,vek, IF(vek IS NULL,0,vek) AS n_vek FROM udaje;


Výsledkom bude nasledujúca tabulka:

meno priezvisko vek n_vek
Jozko Stary 25 25
Maria Mala 21 21
Ema Balazova 45 45
Maria Novakova 24 24
Jan Novak 38 38
Samo Strucik NULL 0

Príkaz ... CASE ... END

CASE dokáže vetviť kód na viac častí.

Syntax:

SELECT polozka,
CASE polozka
  WHEN 1 THEN "jeden"
  WHEN 2 THEN "dva"
  WHEN 3 THEN "tri"
  ELSE "nezname"
END FROM nazov_tabulky;


Príklad:

SELECT meno, priezvisko, vek,
CASE
  WHEN vek <= 25 THEN "najmladsi"
  WHEN vek > 25 AND vek <= 35 THEN "stredny"
  WHEN vek > 35 THEN "starsi"
END AS n_vek FROM udaje WHERE vek IS NOT NULL;


Výsledkom bude nasledujúca tabuľka:

meno priezvisko vek n_vek
Jozko Stary 25 najmladsi
Maria Mala 21 najmladsi
Ema Balazova 45 starsi
Maria Novakova 24 najmladsi
Jan Novak 38 starsi