KIV/ZIS - SELECT, opakování soubor 4_databaze.accdb (lze použít ten z minula) http://home.zcu.cz/~krauz/zis/4_databaze.accdb minule: SELECT FROM WHERE ORDER BY SELECT sloupce jaké sloupce chceme vybrat FROM tabulka z jaké tabulky WHERE podmínka filtrování podle podmínky ORDER BY sloupce řazení podle nějakých sloupců
KIV/ZIS - agregace (souhrny) SELECT... GROUP BY sloupce ; seskupení výsledků podle zadaných sloupců tj. vrací vždy jeden řádek pro všechny výsledky se stejnou hodnotou v zadaném sloupci agregační funkce: COUNT, SUM, AVG, MIN, MAX SELECT Oddeleni, COUNT(*), MIN(Plat) FROM Zamestnanci WHERE Plat >= 20000 GROUP BY Oddeleni;
KIV/ZIS - agregace bez GROUP agregační funkce lze použít i bez GROUP BY provede se nad celou tabulkou vrací pouze jeden řádek SELECT COUNT(*) FROM Zamestnanci; počet zaměstnanců v celé firmě/tabulce SELECT AVG(Plat) FROM Zamestnanci; průměrný plat v celé firmě/tabulce SELECT SUM(PorizovaciCena) FROM Zarizeni;
KIV/ZIS - úkoly dotaz 11: Zjistěte nejnižší a nejvyšší plat v jednotlivých odděleních. dotaz 12: Kolik zařízení mají ve správě jednotliví zaměstnanci? dotaz 13: Vypište telefonní linky, včetně počtu lidí, kteří je sdílí a) v rámci celé firmy b) v rámci oddělení 2
KIV/ZIS - agregace, filtrování agregační funkci nelze vložit do filtru WHERE SELECT GROUP BY sloupce HAVING podmínka ; podmínka za HAVING může obsahovat agregační funkci SELECT Oddeleni FROM Zamestnanci GROUP BY Oddeleni HAVING COUNT(*) > 2;
KIV/ZIS - úkoly dotaz 14: Vypište čísla oddělení, jejichž zaměstnanci nemají nižší plat než 20 000 Kč. dotaz 15: Která čísla oddělení mají více jak 5 zaměstnanců bez telefonu?
KIV/ZIS - dotaz s parametrem stejně jako v návrhovém zobrazení vložit do dotazu místo pevné hodnoty parametr v hranatých závorkách a s dvojtečkou SELECT * FROM Zamestnanci WHERE Plat > [Plat větší než:]; dotaz 16: Vypište zaměstnance z oddělení zadaného parametrem.
KIV/ZIS - DISTINCT SELECT DISTINCT... klíčové slovo DISTINCT zajistí, že ve výsledku nebudou duplicitní řádky např. chceme názvy zařízení: SELECT nazev FROM Zarizeni; některé názvy se budou opakovat SELECT DISTINCT nazev FROM Zarizeni; každý název pouze jednou
KIV/ZIS - výpočty v dotazu, AS SELECT sloupec AS novynazev ; přejmenuje sloupec na novynazev (pouze ve výsledku dotazu!) SELECT Plat/1000 AS plat_tisice FROM Zamestnanci; výpočet nového sloupce a pojmenování jako plat_tisice SELECT * FROM Zamestnanci WHERE Plat/1000 >= 20; výpočty můžou být i v podmínce
KIV/ZIS - dotaz nad více tabulkami v zásadě stejné jako dosud s rozdíly: za klíčové slovo FROM se přidá více tabulek (oddělené čárkou) musí se přidat podmínka rovnosti primárního a cizího klíče!! jinak vznikne kartézský součin (každý s každým) pokud mají vybrané sloupečky z tabulek shodné názvy, přidá se k nim, z jaké jsou tabulky (tabulka.sloupec) SELECT * FROM Zamestnanci, OddeleniFirmy WHERE Zamestnanci.Oddeleni = OddeleniFirmy.CisloOddeleni ; vazba cizí-primární
KIV/ZIS - dotaz nad více tabulkami SELECT * FROM Zamestnanci, OddeleniFirmy WHERE Zamestnanci.Oddeleni = OddeleniFirmy.CisloOddeleni AND OddeleniFirmy.NazevOddeleni LIKE "Mont*"; názvy sloupců se neshodují, stačí zapsat: SELECT * FROM Zamestnanci, OddeleniFirmy WHERE Oddeleni = CisloOddeleni AND NazevOddeleni LIKE "Mont*";
KIV/ZIS - úkoly dotaz 17: Uveďte jmenovitě správce tiskáren. dotaz 18: Jaká je pořizovací cena jednotlivých zařízení, která spravuje Magdaléna Hrušková? dotaz 19: Vypište názvy oddělení, na kterých mají konvici nebo stůl.
KIV/ZIS - JOIN SELECT FROM JOIN ON ; jiná možnost, jak propojit více tabulek: tabulka1 JOIN tabulka2 ON tabulka1.primklic = tabulka2.ciziklic propojení klíčů se pak už neprovádí ve WHERE SELECT * FROM Zamestnanci JOIN OddeleniFirmy ON Zamestnanci.Oddeleni = OddeleniFirmy.CisloOddeleni ; lze dále použít WHERE pro filtrování: SELECT * FROM Zamestnanci JOIN OddeleniFirmy ON Zamestnanci.Oddeleni = OddeleniFirmy.CisloOddeleni WHERE OddeleniFirmy.Nazev = "Příjem" ;
KIV/ZIS - JOIN JOIN se dělí na 3 typy: INNER JOIN zahrnuje jen takové řádky, které mají odpovídající záznam v obou tabulkách LEFT JOIN ve výsledku jsou všechny řádky z levé tabulky, i když nemají odpovídající záznam v pravé tabulce RIGHT JOIN ve výsledku jsou všechny řádky z pravé tabulky, i když nemají odpovídající záznam v levé tabulce pokud se uvede pouze JOIN, použije se INNER JOIN
KIV/ZIS - úkoly v následujících dotazech propojte tabulky pomocí JOIN dotaz 20: Uveďte jmenovitě správce tiskáren. dotaz 21: Jaká je pořizovací cena jednotlivých zařízení, která spravuje Magdaléna Hrušková? dotaz 22: Vypište názvy oddělení, na kterých mají konvici nebo stůl.
KIV/ZIS - vnořený SELECT používá se např. pokud potřebujem nejdřív zjistit nějakou informaci, kterou následně chceme použít v podmínce SELECT * FROM Zamestnanci WHERE Plat = (SELECT min(plat) FROM Zamestnanci) ; vypíše informace o zaměstnancích s nejnižším platem nelze napsat jen WHERE Plat = min(plat)
KIV/ZIS - prezentace semestrálních prací 10. 5. 2016 (poslední cvičení) max. 5 minut 4-6 slajdů párkrát si to doma vyzkoušejte s hodinkami zaměřte se opravdu jen na nejdůležitější informace obsah viz. info na Courseware jasně, stručně, hlasitě krom nativní prezentace i v PDF přinést na flešce
KIV/ZIS Děkuji za pozornost.