Príkaz SELECT

Select je príkaz pre výber riadkov z tabuľky. Vyberá sa podľa stĺpcov, ktoré sú oddelené čiarkou. Ak chceme vybrať všetky stĺpce môžeme použiť znak *.

Syntax:

SELECT zoznam_poloziek FROM nazvy_tabuliek         //povinná časť
       WHERE podmienky
       GROUP BY nazov_stlpca_pre_zoskupenie
       HAVING skupinova_podmienka
       ORDER BY polozka;

Príklad:

SELECT * FROM udaje;

id meno priezvisko vek telefon
1 Maria Mala 21 0907876900
2 Jozko Stary 25 0902002223
3 Ema Balazova 45 0904145623
4 Maria Novakova 24 0902057357
5 Jan Novak 37 0904666456

DISTINCT

Aby sme zabránili opakovaniu hodnôt, hneď za SELECT vložíme kľúčové slovo DISTINCT.

Príklad:

SELECT DISTINCT meno FROM udaje;

meno
Jozko
Maria
Ema
Jan

Príklad:

SELECT COUNT(DISTINCT meno) as pocet_roznych_mien FROM udaje; //Výstup: 5

Ak je stĺpcov či výrazov viac DISTINCT musí nasledovať bezprostredne za slovom SELECT a hľadajú sa rôzne riadky ako celky, nie jednotlivé ich časti.


WHERE

Príkaz WHERE vyberie len tie záznamy, ktoré vyhovujú podmienke, ostatné záznamy sa ignorujú.
V podmienke môžu byť operácie:

  • s textovým reťazcom (rovnosť, nerovnosť, podobnosť),
  • matematické (rovnosť, nerovnosť, väčší než, menší než),
  • logické (AND, OR, NOT).
Príklad:

SELECT meno, priezvisko, vek FROM udaje WHERE vek > 25;

meno priezvisko vek
Ema Balazova 45
Jan Novak 37

Ak by sme chceli porovnávať určitú hodnotu s hodnotou NULL pomocou porovnávacích operátorov nemalo by to zmysel. Takže nasledujúci dotaz nemá v princípe žiadny zmysel, pretože sa snažíme porovnať stĺpec a neznámu hodnotu:

Príklad:

SELECT meno, priezvisko, vek FROM udaje WHERE vek > NULL;

Použitím výrazu IS NULL bude všetko v poriadku.

Príklad:

SELECT meno, priezvisko, vek FROM udaje WHERE vek IS NULL;

V súvislosti WHERE a NULL môže nastať ešte jeden problém. V prípade, že chceme vypísať všetky osoby v tabuľke a zadali by sme nasledovný príkaz:

Príklad:

SELECT meno, priezvisko, vek FROM udaje WHERE vek > 20;

môže ale aj nemusí vypísať. Ak stĺpec vek nesmie obsahovať hodnoty NULL je všetko v poriadku. Ale ak hodnoty NULL môže obsahovať a nachádza sa v tabuľke záznam s hodnotou NULL nevypíšu sa všetky osoby. Nasledovným príkazom sa vyrieši aj tento problém.

Príklad:

SELECT meno, priezvisko, vek FROM udaje WHERE vek > 20 or vek IS NULL;


GROUP BY

Nie vždy nás zaujíma agregovaná hodnota v rámci celej tabuľky. Niekedy potrebujeme hodnoty v rámci nejakej podskupiny. GROUP BY slúži k tomu, aby zlúčila záznamy, ktoré obsahujú rovnaké hodnoty do jedného záznamu, prípadne jednej hodnoty.

Príklad:

Ak by sme chceli zistiť zastúpenie jednotlivých mien v našej tabuľke použijeme nasledovný príkaz:

SELECT meno, count(meno) as 'pocet' FROM udaje GROUP BY meno;

meno pocet
Maria 2
Jozko 1
Ema 1
Jan 1

Vznikol nám nový stĺpec, ktorý nám určuje počet výskytov jednotlivých mien v tabuľke. Nadpis tohoto poľa by bol "count(meno)" a preto sme ho pomocou as premenovali na "pocet".


HAVING

Niekedy potrebujeme v rámci zoskupených záznamov vybrať len tie záznamy, ktoré budú spĺňať ďalšie podmienky. Použitím príkazu HAVING obmedzíme rozsah výpisu tabuľky tým, že z agregovaných riadkov vyradíme tie, ktoré nevyhovujú uvedenej podmienke.

Príklad:

Vypíšeme si len tie mená, ktorých počet je väčší ako jedna.

SELECT meno, count(meno) as 'pocet' FROM udaje GROUP BY meno HAVING count(meno)>1;

meno pocet
Maria 2

ORDER BY

Pre vzostupné zoradenie údajov v tabuľke podľa určitého stĺpca slúži príkaz ORDER BY.

Príklad:

SELECT * FROM udaje ORDER BY priezvisko;

id meno priezvisko vek telefon
3 Ema Balazova 45 0904145623
1 Maria Mala 21 0907876900
5 Jan Novak 37 0904666456
4 Maria Novakova 24 0902057357
2 Jozko Stary 25 0902002223

Pokiaľ by sme chceli zoradiť tabuľku zostupne použijeme príkaz DESC.

Príklad:

SELECT * FROM udaje ORDER BY priezvisko DESC;


LIMIT

Ak si myslíme, že výpis príkazu SELECT by mohol byť veľmi dlhý a chceli by sme ho obmedziť na počet prvých x-riadkov, použijeme kľúčové slovo LIMIT na konci príkazu. Parameter n je offset a značí, od ktorého nasledujúceho riadku bude výpis pokračovať a parameter m značí maximum vypísaných riadkov.

Syntax:

SELECT zoznam_poloziek FROM nazov_tabulky WHERE podmienka LIMIT n[, m];

 

Príklad:

SELECT * FROM udaje WHERE meno='Maria' LIMIT 1;

id meno priezvisko vek telefon
2 Maria Mala 21 0907876900