Search
V této hodině budeme pracovat s demonstrační databází Foodmart. Ta obsahuje data z datového skladu popisujícího prodeje jídla a doprovodné informace. Zde budeme pracovat s tabulkou zaměstnanci (table employee) a tabulkou sklady (table store). Vztah mezi těmito tabulkami je 1:N.
K databázi se připojíme pomocí programu Squirrel (doporučený download, používali jsme už v minulých hodinách.
Pro výběr dat slouží v SQL příkaz SELECT, jehož obecné schéma je:
SELECT sloupce
FROM tabulky
WHERE podmínky
GROUP BY spojit podle…
HAVING podmínky na skupiny
ORDER BY seřadit podle…
V této části se seznámíme s tučně označenými klauzulemi příkazu SELECT, tj. FROM, WHERE, ORDER BY. Příkazy budeme přímo zkoušet na databázi Foodmart. Uvedené příklady berte jako ukázky příkazů, vymyslete ke každému příkazu jiný podobný. Pozor ve Squirrelu je nastaven implicitně limit počtu řádků na 100, v některých případech to může být nežádoucí.
Vypracování je možné získat označením textu za slovem SELECT, napsáno bíle.
Pro výběr dat slouží v SQL příkaz SELECT:
V této části se zaměříme na klauzule GROUP BY a HAVING. Doposud jsme pracovali s jednotlivými zaměstnanci. Často potřebujeme pracovat ne pouze s jednotlivými zaměstnanci, ale se skupinami zaměstnanců. Například v našem příkladě nás mohou zajímat skupiny zaměstnanců podle obchodu, ve kterém pracují (tabulka store). Vzhledem k tomu, že pracujeme se skupinou (množinou), nás budou zajímat tzv. agregované hodnoty - počet COUNT, průměr AVG, minimum MIN, maximum MAX, součet SUM pro zvolené skupiny. Například nás nezajímá věk jednoho konkrétního zaměstnance, ale zajímáme se o charakteristiku celé skupiny zaměstnanců, tedy o průměrný věk, nebo o nejnižší věk apod.
Vypracování je možné opět získat označením textu za slovem SELECT, napsáno bíle.
V některých případech potřebujeme nejprve zjistit z databáze nějakou hodnotu, kterou následně použijeme v dotazu. Například chceme najít všechny zaměstnance obchodů s vyšším než průměrným platem. Nejprve musíme z databáze zjistit velikost průměrného platu: SELECT avg(salary) from employee. Výsledek následně použijeme pro hledání všech zaměstnanců, kteří mají plat vyšší než průměrný: SELECT * from employee where salary>(SELECT avg(salary) from employee)