Databázové systémy I Přednáška č. 5 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky

Slides:



Advertisements
Podobné prezentace
Aplikační a programové vybavení
Advertisements

KIV/ZIS Cvičení 6 SQL - SELECT.
MS ACCESS - DOTAZY DATABÁZOVÉ SYSTÉMY.
Jazyk SQL Ing. Zdena DOBEŠOVÁ. SQL Structured Query Language 1974 SEQUEL (Structured English Query Language) neprocedurální relační dotazovací jazyk norma.
Databázové systémy SQL Výběr dat.
YDASYS1 Ing. Monika Šimková.
Fakulta elektrotechniky a informatiky
Informační systémy Nástroje pro sběr dat, návrh a realizace databáze.
Výpočetní technika Akademický rok 2009/2010 Letní semestr Mgr. Petr Novák Katedra informatiky a geoinformatiky FŽP UJEP
AGREGACE Distinct, Group By, Having, SUM, …. DISTINCT  Slučování stejných řádků ve výsledku dotazu. AGREGACE 2 JménoPříjmeníID FrantišekVomáčka1 JosefPokorný2.
Další dotazy SQL Structured Query Language. Některé SQL příkazy mohou mít v sobě obsaženy další kompletní příkazy SELECT. Využijeme je tam, kde potřebujeme.
SQL Structured Query Language
Informatika pro ekonomy II přednáška 11
Databázové systémy 1 Cvičení č. 8 Fakulta elektrotechniky a informatiky Univerzita Pardubice.
Architektury a techniky DS Tvorba efektivních příkazů I Přednáška č. 3 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky
Databázové systémy 1 Cvičení č. 6 Fakulta elektrotechniky a informatiky Univerzita Pardubice.
Databázové systémy 1 Cvičení č. 4 Fakulta elektrotechniky a informatiky Univerzita Pardubice.
Databázové systémy 1 Cvičení č. 2 Fakulta elektrotechniky a informatiky Univerzita Pardubice.
Databázové systémy II Přednáška č. 6 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky
Databázové systémy 2 Cvičení č. 6 Ing. Tomáš Váňa Fakulta elektrotechniky a informatiky Univerzita Pardubice.
Databázové systémy 2 Cvičení č. 7 Ing. Tomáš Váňa Fakulta elektrotechniky a informatiky Univerzita Pardubice.
Školení správců II. Petr Pinkas RNDr. Vít Ochozka.
Databázové systémy II Přednáška č. 9 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky
LOGICKÉ ŘÍZENÍ GEORGE BOOLE
Fakulta elektrotechniky a informatiky
Databázové systémy I Cvičení č. 9 Fakulta elektrotechniky a informatiky Univerzita Pardubice 2013.
KIV/ZIS cvičení 6 Tomáš Potužák. Pokračování SQL Klauzule GROUP BY a dotazy nad více tabulkami Stáhnout soubor studenti_dotazy_sql.mdb.
Informatika pro ekonomy II přednáška 10
Databázové systémy 2 Cvičení č. 4 Fakulta elektrotechniky a informatiky Univerzita Pardubice.
Databázové systémy I Cvičení č. 6 Fakulta elektrotechniky a informatiky Univerzita Pardubice 2013.
MS ACCESS DOTAZY.
Databázové systémy Přednáška č. 6.
SQL – základní pojmy Ing. Roman Danel, Ph.D.
Databázové systémy 2 Cvičení č. 6 Ing. Tomáš Váňa Fakulta elektrotechniky a informatiky Univerzita Pardubice.
Databázové systémy II Přednáška č. X Ing. Tomáš Váňa, Ing. Jiří Zechmeister Fakulta elektrotechniky a informatiky
Fakulta elektrotechniky a informatiky
Fakulta elektrotechniky a informatiky
Fakulta elektrotechniky a informatiky
Databázové systémy I Cvičení č. 8 Fakulta elektrotechniky a informatiky Univerzita Pardubice 2013.
Architektury a techniky DS Cvičení č. 9 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky
Databázové systémy II Cvičení č. 3 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky
Databázové systémy I Cvičení č. 10 Fakulta elektrotechniky a informatiky Univerzita Pardubice 2013.
Databázové systémy 2 Zkouška – 8:00. Příklad I – Procedura – 5 bodů Vytvořte proceduru P_ZK4(p_oddeleni_id_from NUMBER, p_oddeleni_id_to NUMBER)
Databázové systémy Tomáš Skopal
Databázové systémy I Cvičení č. 7 Fakulta elektrotechniky a informatiky Univerzita Pardubice 2013.
Informatika II PAA DOTAZOVACÍ JAZYKY
2OP483 Manažerská informatika 3Access - BankaSnímek 1 2OP483 Manažerská informatika 3 Microsoft Office Access 2007 Dotazy v databázi Banka
Aplikační a programové vybavení
Databáze velké množství dat pevně dané struktury
Databázové systémy 2 Cvičení č. 5 Fakulta elektrotechniky a informatiky Univerzita Pardubice.
Databázové systémy SQL Výběr dat.
Databázové systémy 2 Cvičení č. 4 Fakulta elektrotechniky a informatiky Univerzita Pardubice.
 Agregační funkce  Agregační funkce jsou to funkce, které nějakým způsobem zpracují více hodnot a jako výsledek vrátí hodnotu jednu COUNT()  Funkce.
Použití dotazu jako zdroj dat pro pohled Vypracovala: Procházková Petra.
Databázové systémy 2 Zkouška – 8:00. Příklad I - Funkce Vytvořte funkci ZK_DIFF_MIN_MAX (P_ZAM_ID NUMBER) RETURN VARCHAR2. Funkce může vracet.
SQL Další dotazy a pohledy Databázové systémy. Některé SQL příkazy mohou mít v sobě obsaženy další kompletní příkazy SELECT. Využijeme je tam, kde potřebujeme.
CUBE - Operátor relační agregace
Databázové systémy 1 Cvičení č. 5 Fakulta elektrotechniky a informatiky Univerzita Pardubice.
Databázové systémy I Cvičení č. 8 Fakulta elektrotechniky a informatiky Univerzita Pardubice 2015.
Databázové systémy I Přednáška č. 6 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky
Filtrování záznamů Filtr podle výběru Filtr podle formuláře Rozšířený filtr Symboly, výrazy Dotazy.
Databáze MS ACCESS 2010.
Databázové systémy I Přednáška 7 Databázové systémy 1 – KIT/IDAS1
SQL – příkaz SELECT Ing. Roman Danel, Ph.D.
Databázové systémy I Přednáška 5 Databázové systémy 1 – KIT/IDAS1
Databázové systémy I Přednáška 8 Databázové systémy 1 – KIT/IDAS1
Databázové systémy a SQL
Informatika pro ekonomy přednáška 8
[ START WITH podmínka ] CONNECT BY podmínka
Optimalizace SQL dotazů
Transkript prezentace:

Databázové systémy I Přednáška č. 5 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky

Obsah – Logické operátory Opakování – Souhrnné dotazy – Skupinové dotazy Databázové systémy 1 - př. 5 2

Logické operátory AND a zároveň (vrací ANO, pokud oba operandy jsou zároveň ANO) OR nebo (vrací ANO, pokud alespoň jeden operand je ANO) NOT není pravda, že (vrací ANO, když následující operand je NE) Databázové systémy 1 - př. 5 3

Pravdivostní tabulka AND Operand 1Operand 2Výsledek AND ANO NE ANONE ANONULL NENULLNE NULLANONULL NE NULL Databázové systémy 1 - př. 5 4

Pravdivostní tabulka OR Operand 1Operand 2Výsledek AND ANO NEANO NEANO NE ANONULLANO NENULL ANO NULLNENULL Databázové systémy 1 - př. 5 5

Pravdivostní tabulka NOT Operand 1Výsledek AND ANONE ANO NULL Databázové systémy 1 - př. 5 6

Agregační funkce aritmetický průměr AVG ( [DISTINCT] [ALL] výraz) počet hodnot COUNT ( [DISTINCT] [ALL] výraz) maximum MAX (výraz) minimum MIN (výraz) součet hodnot SUM ( [DISTINCT] [ALL] výraz) Databázové systémy 1 - př. 5 7

Souhrnné dotazy Velice často nás nezajímají jednotlivé detaily uložené v konkrétních řádcích v jednotlivých tabulkách, ale několik málo souhrnných informací, které sumarizují obsah databáze, například: -Kolik zaměstnanců má společnost ? -Jaké jsou tržby pobočky ? -Kolik lidí jede průměrně v jednom vlaku ? -Jaká je průměrná délka života ? -Jaká je průměrná mzda ? -Kolik vstupenek se prodalo na všechna utkání ? -Jaká je nejvyšší a nejnižší vyplácená sociální dálka ? -Kdo získal nejméně bodů z testu ? Databázové systémy 1 - př. 5 8

Agregační funkce Agregační funkce pracují nad množinou řádků, přičemž vrací právě jeden výsledek pro celou vstupní množinu dat. Tyto funkce pomocí matematických a statistických operací zpracovávají agregované hodnoty z celých sloupců (není-li uvedeno jinak v podmínce). -AVG ( [DISTINCT] [ALL] výraz)aritmetický průměr -COUNT ( [DISTINCT] [ALL] výraz)počet hodnot -MAX (výraz)maximum -MIN (výraz)minimum -SUM ( [DISTINCT] [ALL] výraz)součet hodnot Databázové systémy 1 - př. 5 9

Agregační funkce a datové typy Data ve výrazech zpracovávaných funkcemi SUM() a AVG() musí být numerického typu, funkce pro hledání extrémních hodnot MIN() a MAX() mohou pracovat nad sloupci a výrazy v numerickém formátu, řetězci či ve formátu datum/čas. Při použití funkcí MIN() a MAX() nad řetězcovými daty je třeba si uvědomit, že porovnání dvou řetězců je závislé na použité znakové sadě. Ačkoli standard SQL2 obsahuje podporu pro národní znakové sady a alternativní posloupnosti řazení, implementace těchto vlastností se však mezi jednotlivými databázovými systémy liší. Databázové systémy 1 - př. 5 10

Agregační funkce – syntaxe SELECT Příklady: SELECT AVG(cena) FROM produkty; průměrná hodnota ve sloupci cena v tabulce produkty, počítají se jen z uvedených hodnot – tj. NOT NULL SELECT MIN(cena) FROM produkty WHERE oznaceni LIKE ‘L%’; minimální (uvedená) hodnota ve sloupci cena v tabulce produkty pro řádky splňující danou podmínku SELECT count(cena) FROM produkty WHERE cena >= 25000; počet uvedených hodnot ve sloupci cena v tabulce produkty pro řádky splňující danou podmínku SELECT count(*) FROM produkty; počet řádků tabulky produkty Agregační funkce tedy ignorují hodnoty NULL !!! A_OBCHOD SCHÉMA Databázové systémy 1 - př. 5 11

Agregační funkce – syntaxe SELECT Příklad: SELECT SUM(skutecne_trzby)-SUM(plan_trzby), SUM(skutecne_trzby-plan_trzby) FROM obchodni_vysledky; Pozor na skutečnost, že výsledkem tohoto dotazu mohou být za jistých okolností 2 různé hodnoty! Rozdíl nastane v okamžiku, kdy v některém řádku bude scházet například vyplněná hodnota skutecne_trzby (bude tedy null), ale plánovaná tržba bude uvedena. Zatímco plánovaná tržba ovlivní výsledek SUM(plan_trzby), tak hodnota SUM (skutecne_trzby-plan_trzby) ovlivněna nebude. Volba správného dotazu záleží na tom, jaký výsledek požadujeme a zda dokážeme potřebu správně naformulovat do SQL dotazu. Databázové systémy 1 - př. 5 12

Agregační funkce – syntaxe SELECT Použitím klíčového slova DISTINCT můžeme eliminovat započtení duplicitních hodnot ve sloupcové funkci. SELECT count(DISTINCT mesto) FROM pobocky; Podívejme se na rozdíl výsledku tohoto dotazu s výsledky dotazu následujícího SELECT count(mesto) FROM pobocky; První dotaz s klíčovým slovem DISTINCT zjistí počet rozdílných NOT NULL hodnot ve sloupci mesto, druhý dotaz počet NOT NULL hodnot ve sloupci mesto. Výsledkem jsou tedy obecně úplně různé informace. Volba dotazu opět záleží na zadání a jeho přesném pochopení. A_OBCHOD SCHÉMA Databázové systémy 1 - př. 5 13

Skupinové dotazy Na rozdíl od souhrnných dotazů dochází k výpočtu agregačních funkcí pro konkrétní skupiny řádků. Nevzniká tedy na výstupu jeden jediný řádek, ale řádky pro jednotlivé skupiny. -Kolik zaměstnanců mají jednotlivá oddělení společnosti ? -Jaké jsou tržby poboček společnosti ? -Kolik lidí jede průměrně v jednom vlaku na dané trase ? -Jaká je průměrná délka života pro muže a ženy ? -Jaká je průměrná mzda v různých sektorech ? -Kolik vstupenek se prodalo na jednotlivá utkání ? -Jaká je nejvyšší a nejnižší vyplácená sociální dálka v krajích ? -Kdo získal nejméně bodů z testu v daném předmětu ? Databázové systémy 1 - př. 5 14

Skupinové dotazy – syntaxe SELECT SELECT,,..., FROM WHERE GROUP BY,,... ; V předchozích příkladech jsme vyhodnocovali hodnoty v celých sloupcích, nyní budeme vytvářet mezisoučty, které budou vztahovat k jednotlivým skupinám. Pod pojmem skupina můžeme chápat konkrétní pobočku společnosti, studovaný předmět, město, osobu, … Všechny sloupce, které nejsou agregovány a jsou uvedeny za klíčovým slovem SELECT (definují skupiny, pro něž dochází k výpočtu agregačních funkcí) musí být uvedeny i za klauzulí GROUP BY. Databázové systémy 1 - př. 5 15

Skupinové dotazy – syntaxe SELECT Příklad: SELECT dodavatel_id, AVG(cena) FROM produkty GROUP BY dodavatel_id; Databázový systém nejdříve rozdělí produkty do skupin podle DODAVATEL_ID, pro každého dodavatele jedna skupina. V rámci každé skupiny mají všechny produkty stejnou hodnotu DODAVATEL_ID. Pro každou skupinu pak vypočte požadované agregační funkce. Dotazy obsahující klauzuli GROUP BY označujeme jako skupinové dotazy, neboť seskupují data ze zdrojových tabulek do skupin a pro každou z těchto skupin vytváří jediný souhrnný řádek. Sloupce uváděné za klauzulí GROUP BY označujeme jako seskupující sloupce. Databázové systémy 1 - př. 5 16

Omezení výsledků skupinových dotazů SELECT,,..., FROM WHERE GROUP BY,,... HAVING ; Ve výsledku budou pouze ty agregované řádky, které splňují podmínky uvedené za klauzulí HAVING. Omezení uvedená za klauzulí HAVING se aplikují až po vytvoření skupin, tedy před zobrazením (případně seřazením) výsledku. Databázové systémy 1 - př. 5 17

Omezení výsledků skupinových dotazů Příklady: SELECT dodavatel_id, AVG(cena) FROM produkty GROUP BY dodavatel_id HAVING AVG(cena) >=33000; SELECT nazev, AVG(cena) FROM dodavatele JOIN produkty ON dodavatele.dodavatel_id = produkty.dodavatel_id GROUP BY nazev HAVING AVG(cena) >=33000; A_OBCHOD SCHÉMA Databázové systémy 1 - př. 5 18

Postup provádění skupinových dotazů 1)spojení tabulek (dle zadaných podmínek spojení) JOIN 2)Aplikace omezujících podmínek za klauzulí WHERE 3)Seskupení řádků do skupin (dle atributů uvedených za klauzulí) GROUP BY 4)Výpočet agregačních funkcí SUM, COUNT, MAX, MIN, AVG nad skupinami řádků – pro každou skupinu vznikne jediný řádek 5)Aplikace omezujících podmínek za klauzulí HAVING 6)Seřazení výsledku dle klauzule ORDER BY Databázové systémy 1 - př. 5 19

Příklad SELECT nazev, AVG(cena) prum_cena, count(*) pocet_produktu FROM A_OBCHOD.dodavatele JOIN A_OBCHOD.produkty ON dodavatele.dodavatel_id = produkty.dodavatel_id WHERE oznaceni not like 'A2500H' and nazev like 'ASUS' GROUP BY nazev HAVING count(cena)>0 ORDER BY nazev; Databázové systémy 1 - př. 5 20

Shrnutí Agregační funkce slouží k výpočtu součtu, průměru, minimální a maximální hodnoty nebo k určení počtu hodnot ve sloupci nebo ve výsledku dotazu. Souhrnný dotaz neobsahuje klauzuli GROUP BY a generuje jediný řádek výsledku dotazu. Skupinové dotazy obsahují klauzuli GROUP BY a generují řádky na výstup dotazu pro každou kombinaci atributů uvedených za klauzulí GROUP BY. Klauzule HAVING vykonává obdobnou funkci jako klauzule WHERE. Zatímco klauzule WHERE se aplikuje na řádky vstupující do zpracování, klauzule HAVING se aplikuje až na agregované hodnoty v již seskupených řádcích. Databázové systémy 1 - př. 5 21

Pozvánka na příště Pohledy Základy vytváření jednoduchých i komplexních pohledů. Seznámení se základní syntaxí příkazu pro vytvoření pohledu, s pravidly pro provádění DML operací nad pohledy a s použitím in-line pohledů. Vnořené dotazy Práce s vnořenými dotazy. Popisuje rozdíl mezi korelovanými a nekorelovanými vnořenými dotazy a zobrazuje jejich použití. Množinové operátory Problematika množinových operátorů a práce s množinovými operátory v jazyce SQL. Seznámení s operátory UNION ALL, UNION, MINUS a INTERSECT. Databázové systémy 1 - př. 5 22