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.
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.
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í.
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 |

