SQL - select
Príkaz SELECT sa používa pre výber dát z databázy. Výsledok je uložený v tabuľke výsledkov.
Obsah
Syntax príkazu SELECT
Základná syntax (zjednodušená) je
SELECT názvy_stĺpcov_tabuľky FROM názov_tabuľky
Kompletná syntax je nasledujúca[1]:
SELECT
[ALL | DISTINCT | DISTINCTROW ]
select_expr, ...
[FROM table_references
[WHERE where_condition]
[GROUP BY {col_name | expr | position}
[ASC | DESC], ... [WITH ROLLUP]]
[HAVING where_condition]
[ORDER BY {col_name | expr | position} [ASC | DESC], ...]
[LIMIT {[offset,] row_count | row_count OFFSET offset}] [PROCEDURE procedure_name(argument_list)]
[INTO OUTFILE 'file_name' export_options | INTO DUMPFILE 'file_name' | INTO var_name [, var_name]]
[FOR UPDATE | LOCK IN SHARE MODE]]
Poznámka: Výrazy v hranatých zátvorkách sú nepovinné, hodnoty oddelené čiarou (|) v zložených zátvorkách znamenajú výberj jednoej hodnoty z viacerých.
SELECT výber všetkých údajov
Úloha: vyberte všetky záznamy z tabuľky city.
Riešenie:
SELECT * from city
Výsledok:
Úloha: vyberte všetky záznamy z tabuľkt city. Vo výbere bude len názov mesta a populácia.
Riešenie:
SELECT Name, Population from city
Výsledok:
SELECT eliminácia duplicitných záznamov
Pre elimináciu duplicitných záznamov vo výsledku dotazu slúži kľúčové slovo DISTINCT.
Úloha: Vyber všetky kódy krajín z tabuľky city.
Riešenie:
SELECT DISTINCT CountryCode FROM city
Výsledok:
Úloha: Aké formy vlády sú na jednotlivých kontinentoch?
Vysvetlenie: Údaje o krajinách sú v tabuľke country. Pri každej krajine sú okrem iných aj informácie o forme vlády (GovernmentForm), kontinente, na ktorom sa nachádza (Continent). Keďže nás nezaujímajú samotné krajiny ale len kontinenty na ktorých ležia, dotazom SELECT Continent, GovernmentForm FROM country by sme dostali duplicitné záznamy, pretože na danom kontinente sú krajiny, ktoré majú rovnaké formy vlády.
Riešenie:
SELECT DISTINCT Continent, GovernmentForm FROM country
Výsledok:
SELECT obmedzenie výberu
Pre obmedzenie počtu výsledkov sa v príkaze SQL používa kľúčové slovo WHERE. Za kľúčové slovo sa píše logická podmienka. Výsledkom dotazu sú záznamy, ktoré vyhovujú danej logickej podmienke. Syntax je nasledovná:
SELECT názvy_stĺpcov_tabuľky FROM názov_tabuľky WHERE logicka_podmienka
Logická podmienka je výraz, ktorého výsledok môže byť pravda (true) alebo nepravda (false). V logickej podmienke sa používajú relačné operátory:
= | porovnanie |
---|---|
>= | väčší rovný |
> | väčší |
<= | menší rovný |
< | menší |
IS NULL | Test na hodnotu NULL |
IS | Test na logickú hodnotu true/false |
LIKE | Porovnávanie reťazcov |
!=, <> | Operátor nerovnsti |
NOT LIKE | Negácia pri porovnávaní reťazcov |
BETWEEN | Výber hodnoty z daného intervalu |
Úloha: Vyberte všetky mestá, v ktorých je populácia väčšia ako 5 000 000.
Riešenie:
SELECT * FROM city WHERE Population>5000000
Výsledok:
Úloha: Vyber všetky mestá, ktoré majú kód krajiny "SVK"
Riešenie:
SELECT * FROM city WHERE CountryCode like "SVK"
Výsledok:
Úloha: Vyber všetky mestá v ktorých je populácia medzi 1 a 2 miliónmi obyvateľov
Riešenie:
SELECT * FROM city WHERE Population between 1000000 and 2000000
Výsledok:
Úloha: Vyber všetky mestá, ktorých názov začína na "Bra"
Riešenie:
SELECT * FROM city WHERE Name LIKE 'Bra%'
Výsledok:
Poznámka: Znak % (percento) zastupuje ľubovoľný počet znakov.
Úloha: Vyber všetky mestá, ktorých kód krajiny začína na "N" a končí na "L"
Riešenie:
SELECT * FROM city WHERE CountryCode LIKE "N_L"
Výsledok:
Poznámka: Znak _ (podčiarkovník) zastupuje jeden znak.
Spájanie viacerých podmienok
Pre vytváranie komplikovanejších logických podmienok v príkaze SELECT slúžia logické spojky. Existujú dve logické spojky:
- AND
- Výraz x AND y je pravdivý vtedy a len vtedy ak je pravdivý výrok x A ZÁROVEŇ je pravdivý výrok y
- OR
- Výraz x OR y je pravdivý vtedy ak je pravdivý výrok x ALEBO je pravdivý výrok y
Úloha: Vyber všetky mestá vo Veľkej britácii, v ktorých je populácia menšia ako 100tisíc obyvateľov.
Riešenie:
SELECT * FROM city WHERE CountryCode like "GBR" and Population<100000
Výsledok:
Úloha: Vyber všetky mestá zo Slovenska a z Čiech
Riešenie:
SELECT * FROM city WHERE CountryCode like "SVK" or CountryCode like "CZE"
Výsledok:
Úloha: Vyber všetky mestá zo Slovenska a z Čiech, ktoré majú menej ako 100 tisíc obyvateľov
Riešenie:
SELECT * FROM city WHERE (CountryCode like "SVK" or CountryCode like "CZE") and population<100000
Výsledok:
SELECT - usporiadanie výsledku
Výsledok SQL dotazu môžeme usporiadať podľa ľubovoľného stĺpca a to zostupne alebo vzostupne. Kľúčové slovo pre takého usporiadanie je ORDER BY. Poradie je určené slovom ASC (vzostupne) alebo DESC (zostupne)
Úloha: Vyber všetky mestá zo Slovenska a z Čiech, ktoré majú menej ako 100 tisíc obyvateľov. Výsledok usporiadaj podľa počtu obyvateľov vzostupne.
Riešenie:
SELECT * FROM city WHERE (CountryCode like "SVK" or CountryCode like "CZE") and population<100000 ORDER BY Population ASC
Poznámka: V prípade, ak usporiadavame údaje vzostupne kľúčové slovo ASC je nepovinné.
Výsledok:
Úloha: Vyber všetky mestá zo Slovenska a z Čiech, ktoré majú menej ako 100 tisíc obyvateľov. Výsledok usporiadaj podľa názvu mesta zostupne.
Riešenie:
SELECT * FROM city WHERE (CountryCode like "SVK" or CountryCode like "CZE") and population<100000 ORDER BY Name DESC
Poznámka: V prípade, ak usporiadavame údaje vzostupne kľúčové slovo ASC je nepovinné.
Výsledok:
SELECT - zoskupovanie
Výsledok SQL dotazu môžeme zoskupiť do skupín podľa ich hodnôt. Pre zoskupenie výsledok existuje kľúčové slovo GROUP BY. Syntax príkazu SELECT pri zoskupovaní
SELECT zoznam_stĺpcov
FROM zoznam_tabuliek
WHERE podmienky
GROUP BY výraz_pre_zoskupenie
Zoskupenie spočíva v tom, že keď sa objavia dva riadky, ktorých hodnoty sa vo vybraných stĺpcoch (v tých, podľa ktorých zoskupujeme) zhodujú. Databázový systém sa na ne bude pozerať ako na jeden riadok (na ostatné stĺpce musíme aplikovať agregačné funkcie, ktoré vrátia jednu hodnotu pre daný všeobecný riadok). Poznámky k použitiu príkazu GROUP BY:
- Vo výbere nebudú duplicitné záznamy (DISTINCT)
- Nepoužívajte GROUP BY, kde sa dá použiť WHERE
- GROUP BY sa používa spoločne s agregačnými funkciami
Úloha: Koľko je v danej krajine miest?
Riešenie:
SELECT CountryCode, COUNT(name) FROM city GROUP BY CountryCode
Poznámka: Výsledok SQL dotazu zoskupíme podľa kódu krajiny. V tabuľke city sú mestá, ktoré majú rovnaký kód krajiny. Pomocou zápisu COUNT(name) vypočítame počet tých miest, ktoré majú rovnaký kód krajiny.
Výsledok:
Úloha: Koľko štátov je v jednotlivých kontinentoch, takých, ktorých populácia je väčšia ako 5 miliónov.
Riešenie:
SELECT Continent, count(name) FROM country WHERE population>5000000 GROUP BY Continent
Výsledok:
SELECT - obmedzenie zoskupovania
Zoskupené výsledky pomocou klauzuly GROUP BY môžeme obmedziť voči určitému kritériu. Na toto nám slúži kľúčové slovo HAVING. Klauzula HAVING musí odkazovať len na stĺpce v časti GROUP BY, alebo na stĺpce používajúce agregačné funkcie. HAVING obmedzuje výber v danej skupine. Syntax je nasledovná:
SELECT zoznam_stĺpcov
FROM zoznam_tabuliek
WHERE podmienky
GROUP BY výraz_pre_zoskupenie
HAVING obmedzujúce_kritériá
Úloha: Koľko štátov je v jednotlivých kontinentoch, takých, ktorých populácia je väčšia ako 5 miliónov. Zaujímajú nás len štáty s 10 a viac mestami
Riešenie:
SELECT Continent, count(name) FROM country WHERE population>5000000 GROUP BY Continent HAVING COUNT(name)>=10
Výsledok:
Úloha: Vyber všetky okresy spolu s ich počtom obyvateľov v danom okrese, kde je ale priemerný počet obyvateľov menší ako 100000
Riešenie:
SELECT District, avg(population) FROM city GROUP BY District HAVING avg(population) <100000
Výsledok:
Úloha: Vyber tie krajiny, ktoré majú aspoň 4 okresy
Riešenie:
SELECT CountryCode, count( district ) FROM city GROUP BY CountryCode HAVING count(district) >3
Výsledok:
Úloha: Vyber všetky krajiny začínajúce sa na „A“ s počtami okresov
Riešenie:
SELECT CountryCode, count(district) FROM city GROUP BY CountryCode HAVING CountryCode like "%A"
Výsledok:
Literatúra a odkazy
- ↑ SQL syntax - http://dev.mysql.com/doc/refman/5.5/en/select.html