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;
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.
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).
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.
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:
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.
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.
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.
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.
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.
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 |

