KIV/ZIS - SQL dotazy ●
●
●
stáhnout soubor ZIS04_TestovaciDatabaze250312.accdb SQL dotazy –
textové příkazy pro získání nebo manipulaci s daty
–
SELECT - výběr/výpis
–
INSERT - vložení
–
UPDATE - úprava
–
DELETE - smazání
budeme probírat pouze SELECT 1/24
KIV/ZIS - SELECT ●
SELECT dotaz je podobný přirozenému jazyku
●
SELECT ... FROM ... WHERE ... ORDER BY ...
●
základní součásti dotazu
●
–
jaké sloupce se mají získat
–
z jakých tabulek
–
podle jakého pravidla
–
řazení
–
agregace (souhrn)
dotaz musí obsahovat odkud data brát, ostatní je volitelné
KIV/ZIS - SELECT ●
vytvoření SQL dotazu –
záložka Vytvořit, tlačítko Návrh dotazu
–
NEpřidávat tabulky jako u návrhového zobrazení
–
přepnout do Zobrazení SQL
–
napište a spusťte: SELECT * FROM Zarizeni;
KIV/ZIS - SELECT ●
klíčová slova dotazu (SELECT, FROM, ORDER BY, ...) se pro přehlednost zapisují velkými písmeny
●
SELECT sloupce FROM tabulky;
●
SELECT * FROM Zarizeni;
●
–
* = všechny sloupce
–
na konci středník
SELECT Jmeno, Prijmeni FROM Zamestnanci;
KIV/ZIS - mikroúkoly ●
Vypište názvy oddělení.
●
Vypište inventární čísla a pořizovací ceny zařízení.
KIV/ZIS - filtr ●
●
●
SELECT sloupce FROM tabulky WHERE filtr ; SELECT Jmeno, Prijmeni FROM Zamestnanci WHERE Plat >= 20000; SELECT InvCislo FROM Zarizeni WHERE (DatupNakupu < #10/5/2009#) AND (PorizovaciCena >= 2000); –
pozor na anglický zápis datumu mm/dd/rrrr
KIV/ZIS - filtr, texty ●
lze použít klasické operátory srovnání >, >=, =, <=, <
●
texty do dvojitých uvozovek
●
●
když je potřeba filtrovat jen podle částečného textu, použít operátor LIKE SELECT * FROM Zarizeni WHERE Nazev LIKE "Tisk*"; –
vybere zařízení, jejichž název začíná na „Tisk“
–
hvězdička znamená libovolné množství libovolných znaků, může se v textu opakovat víckrát na více místech
KIV/ZIS - mikroúkoly ●
●
Vypište telefonní seznam pracovníků 5. oddělení. Kteří zaměstnanci nastoupili do firmy v období 1. čtvrtiny roku 2009?
●
Kdo ze zaměstnanců nemá přidělenou telefonní linku?
●
Zjistěte inventární čísla tiskáren a konvic.
●
Vypište všechna zařízení dražší než 3 500,-Kč.
●
Vypište seznam pracovníků oddělení příjmu a výdeje, kteří nemají přiřazen telefon (pozn.: oddělení zapište číslem, tedy 1 a 2).
KIV/ZIS - řazení ●
●
●
SELECT ... ORDER BY sloupce; –
implicitně řazení vzestupně
–
chci-li sestupně, přidám za sloupec klíčové slovo DESC
SELECT * FROM Zamestnanci ORDER BY Plat DESC, Prijmeni; SELECT Nazev, InvCislo FROM Zarizeni WHERE PorizovaciCena > 2000 ORDER BY Nazev;
KIV/ZIS - mikroúkoly ●
●
Kdo ze zaměstnanců nemá přidělenou telefonní linku? Seřaďte dle oddělení. Vypište dle příjmení abecedně sestupně řazený telefonní seznam pracovníků 5. oddělení.
KIV/ZIS - agregace (souhrny) ●
SELECT ... GROUP BY sloupce; –
●
agregační funkce –
●
seskupení řádků podle zadaných sloupců
COUNT, SUM, AVG, MIN, MAX
SELECT Oddeleni, COUNT(*), MIN(Plat) FROM Zamestnanci WHERE Plat >= 20000 GROUP BY Oddeleni;
KIV/ZIS - agregace bez GROUP ●
nad celou tabulkou
●
SELECT COUNT(*) FROM Zamestnanci; –
●
SELECT AVG(Plat) FROM Zamestnanci; –
●
počet zaměstnanců v celé firmě/tabulce
průměrný plat v celé firmě/tabulce
SELECT SUM(PorizovaciCena) FROM Zarizeni;
KIV/ZIS - mikroúkoly ●
Zjistěte nejnižší a nejvyšší plat v jednotlivých odděleních.
●
Kolik zařízení mají ve správě jednotliví zaměstnanci?
●
Vypište telefonní linky, včetně počtu lidí, kteří je sdílí –
v rámci celé firmy
–
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 agregačnípodmínka; SELECT Oddeleni FROM Zamestnanci GROUP BY Oddeleni HAVING COUNT(*) > 2;
KIV/ZIS - mikroúkoly ●
●
Vypište čísla oddělení, jejichž zaměstnanci nemají nižší plat než 20000. 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 proměnnou SELECT * FROM Zamestnanci WHERE Plat > [JakyPlat:];
KIV/ZIS - mikroúkoly ●
Vypište zaměstnance z oddělení zadané parametrem.
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
–
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
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 - mikroúkoly ●
●
●
Uveďte jmenovitě správce tiskáren. Jaká je pořizovací cena jednotlivých zařízení, která spravuje Magdaléna Hrušková? Vypište názvy oddělení, na kterých mají konvici nebo stůl.
KIV/ZIS - DISTINCT ●
klíčové slovo DISTINCT zajistí, že ve výpisu 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; –
unikátní názvy
KIV/ZIS - výpočty v dotazu ●
SELECT Plat/1000 FROM Zamestnanci;
●
SELECT * FROM Zamestnanci WHERE Plat/1000 >= 20;
KIV/ZIS - prezentace semestrálních prací ●
●
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.