Databázové systémy 2 Cvičení č. 10 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky

Slides:



Advertisements
Podobné prezentace
KIV/ZIS Cvičení 6 SQL - SELECT.
Advertisements

MS ACCESS - DOTAZY DATABÁZOVÉ SYSTÉMY.
Architektury a techniky DS
YDASYS1 Ing. Monika Šimková.
Fakulta elektrotechniky a informatiky
Informační systémy Nástroje pro sběr dat, návrh a realizace databáze.
Databázové systémy 2 Zkouška :00. Příklad I Vytvořte proceduru ZK_TRPASLICI_PLNENI(datum_od VARCHAR2, datum_do VARCHAR2), která na standardní.
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.
Fakulta elektrotechniky a informatiky
Architektury a techniky DS Tvorba efektivních příkazů I Přednáška č. 3 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky
Architektury a techniky DS
Architektury a techniky DS Cvičení č. 4 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 I Přednáška č. 5 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky
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 1 Cvičení č. 3 Fakulta elektrotechniky a informatiky Univerzita Pardubice.
Temporální databáze a TSQL
Databázové systémy 2 Cvičení č. 7 Ing. Tomáš Váňa Fakulta elektrotechniky a informatiky Univerzita Pardubice.
Databázové systémy II Přednáška č. 9 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky
Fakulta elektrotechniky a informatiky
Fakulta elektrotechniky a informatiky Univerzita Pardubice
Databázové systémy I Cvičení č. 9 Fakulta elektrotechniky a informatiky Univerzita Pardubice 2013.
Databázové systémy 2 Zkouška – 8:00. Příklad I - Funkce Vytvořte funkci ZK_HR_ODDELENI (p_oddeleni_id NUMBER). Funkce vrátí řetězec, obsahující.
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.
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.
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.
Fakulta elektrotechniky a informatiky
Fakulta elektrotechniky a informatiky
Fakulta elektrotechniky a informatiky
Databázové systémy 2 Zkouška – 08:00. Příklad I – Funkce – 4 body Vytvořte funkci F_ZK1(p_id_zamestnance NUMBER) RETURN VARCHAR2. Daná funkce.
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 2 Zkouška – 08:00. Příklad I – Procedura – 5 bodů Vytvořte proceduru P_ZK3(p_oddeleni_id_from NUMBER, p_oddeleni_id_to NUMBER,
Databázové systémy II Cvičení č. 3 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky
Databázové systémy 2 Zkouška – 8:00. Příklad I - Procedura Vytvořte proceduru PROCEDURE ZK_ZAM_HISTOGRAM(P_ROK_OD IN NUMBER, P_ROK_DO IN NUMBER)
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 2 Zkouška – 12:00. Příklad I - Funkce Vytvořte funkci ZK_TRP_TREND(P_ID_TRPASLIKA IN NUMBER, P_DATUM_OD IN VARCHAR2, P_DATUM_DO.
Databázové systémy I Cvičení č. 7 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_ZK2(p_table_name VARCHAR2, p_min_nuls NUMBER, p_drop.
Aplikační a programové vybavení
Architektury a techniky DS Cvičení č. 5 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky
Databázové systémy 2 Cvičení č. 5 Fakulta elektrotechniky a informatiky Univerzita Pardubice.
KIV/ZIS cvičení 4 Tomáš Potužák. Dotazy - úvod Umožňují pracovat s databází –Získávat specifické informace z tabulky, případně z více tabulek najednou.
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.
Databázové systémy 2 Cvičení IV Ing. Tomáš Váňa Fakulta elektrotechniky a informatiky
Databázové systémy 2 Zkouška – 12:00. Příklad I - Funkce Vytvořte funkci ZK_IS_COLUMN_FK(P_TABLE_NAME IN VARCHAR2, P_COLUMN_NAME IN VARCHAR2)
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.
Petr Čermák Michal Danihelka
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
SQL – příkaz SELECT Ing. Roman Danel, Ph.D.
Ing. Tomáš Váňa, Ing. Jiří Zechmeister
Databázové systémy a SQL
[ START WITH podmínka ] CONNECT BY podmínka
Optimalizace SQL dotazů
Přednáška 7 SQL – JOIN.
Přednáška 9 Triggery.
Transkript prezentace:

Databázové systémy 2 Cvičení č. 10 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky

Obsah cvičení -Spojení tabulky sama se sebou (self join) -Hierarchické dotazy dle syntaxe Oracle Databázové systémy 2 – cvičení 10 2

Hierarchické dotazy v Oracle 9i,10 SELECT sloupce FROM tabulka [WHERE podmínka3] START WITH podmínka1 CONNECT BY podmínka2 [ORDER BY …] Řádky vyhovující podmínce ve START WITH jsou považovány za kořenové řádky na první úrovni vnoření Pro každou řádku na úrovni i se rekurzivně hledají přímí potomci vyhovující podmínce v klauzuli CONNECT BY na úrovni i+1 – Řádka předka se v podmínce označuje klíčovým slovem PRIOR Na závěr jsou odstraněny řádky nevyhovující podmínce ve WHERE Pokud není definováno třídění, odpovídá pořadí průchodu pre-order Každý řádek obsahuje pseudo-sloupec LEVEL, obsahující úroveň řádku v hierarchii Databázové systémy 2 – cvičení 10 3

Příklad hierarchického dotazu Příklad: SELECT PRIJMENI, JMENO, level -- pseudosloupec označující úroveň FROM A_HR.ZAMESTNANCI CONNECT BY MANAZER_ID = PRIOR ZAMESTNANEC_ID -- MANAZER_ID se rovná ZAMESTNANEC_ID u předchůdce START WITH MANAZER_ID is null; -- začni od zaměstnance, který nemá nadřízeného Databázové systémy 2 – cvičení 10 4

Doplnění hierarchických dotazů Pro jednotlivé záznamy můžete také získat cestu od nejvyššího záznamu (jak to znáte třeba ze souborového systému) nebo řadu dalších informací: Funkce SYS_CONNECT_BY_PATH vrací cestu v hierarchii k aktuálnímu záznamu. Klauzule CONNECT_BY_ROOT vrací hodnotu z příslušného záznamu nejvyšší úrovně (tj. například nejvyššího manažera). Pokud byste chtěli výstup z dotazu použít pro zobrazení ve formě rozbalovací hierarchie tak, jak to třeba dělá u souborů Windows Explorer, bude se vám hodit i pseudosloupec CONNECT_BY_ISLEAF, který určuje, zda je aktuální záznam na poslední úrovni hierarchie (CONNECT_BY_ISLEAF=1) nebo zda má podřízené záznamy (CONNECT_BY_ISLEAF=0). Databázové systémy 2 – cvičení 10 5

Příklad hierarchických dotazů SELECT lpad(' ',level*3)||PRIJMENI||' '||JMENO name, SYS_CONNECT_BY_PATH(PRIJMENI, '/') path, CONNECT_BY_ROOT PRIJMENI topmgr, CONNECT_BY_ISLEAF isleaf, level FROM A_HR.ZAMESTNANCI CONNECT BY MANAZER_ID = PRIOR ZAMESTNANEC_ID START WITH MANAZER_ID is null ORDER SIBLINGS BY PRIJMENI; NAMEPATHTOPMGRISLEAFLEVEL King Steven/KingKing01 Cambrault Gerald/King/CambraultKing02 Bates Elizabeth/King/Cambrault/BatesKing13 Bloom Harrison/King/Cambrault/BloomKing13 Fox Tayler/King/Cambrault/FoxKing13 Kumar Sundita/King/Cambrault/KumarKing13 Ozer Lisa/King/Cambrault/OzerKing13 Smith William/King/Cambrault/SmithKing13 De Haan Lex/King/De HaanKing02 Hunold Alexander/King/De Haan/HunoldKing03 Austin David/King/De Haan/Hunold/AustinKing14 Databázové systémy 2 – cvičení 10 6

Příklady – Self Join Máme dánu ve schématu A_CLOVEK tabulku: Lide (Id, jmeno, prijmeni, narozen, pohlavi, Id_otce, Id_matky) Zjistěte, kolik dětí má otce s ID=27 a matku s ID=30. Dotaz upravte pro zjištění počtu vnoučat a následně pravnoučat. Vytvořte pohled CV10_VNOUCATA_BM (Id_babicky, prijmeni, jmeno) pro zjištění jmen a příjmení všech vnoučat osoby(osob) Božena Malá. Z výsledku musí být zřejmé i to, zda všechny Boženy Malé mají nějaká vnoučata. Databázové systémy 2 – cvičení 10 7

Příklady – Self Join Vytvořte pohled CV10_VLASTNI_SOUROZENCI (id, jmeno, prijmeni, pocet), který zobrazí ke každé osobě Id, jméno a příjmení a počet vlastních sourozenců (společní oba rodiče). Poznámka: Neuvažujte osoby, u nichž jeden či oba rodiče jsou neznámí. Vytvořte pohled CV10_PRUMER_PL_PARY (pocet) pro zjištění průměrného počtu dětí, které mají „plodné“ páry (za pár uvažujte stejné oba rodiče dítěte, „plodný“ znamená, že tito lidé mají potomka/y), výsledek zaokrouhlete na 2 desetinná místa. Výsledkem bude tedy jedno jediné číslo. Poznámka: Neuvažujte osoby, u nichž jeden či oba rodiče jsou neznámí. Databázové systémy 2 – cvičení 10 8

Příklady – hierarchické dotazy Vytvořte pohled CV10_NASLEDNICI_BM (Id_bm, vztah, jmeno, prijmeni) pro zjištění jmen a příjmení všech dětí, vnoučat a pravnoučat osoby(osob) Božena Malá. Z výsledku musí být zřejmé i to, zda všechny Boženy Malé mají nějaké potomky. U každé osoby uveďte kromě jména a příjmení i vztah – konkrétní hodnoty z oboru hodnot (dítě, vnouče, pravnouče). Úkol řešte pomocí příkazu SELECT s klauzulí START WITH pro rekurzivní spojení. Databázové systémy 2 – cvičení 10 9

Příklady – hierarchické dotazy Vytvořte funkci CV10_POCET_NASLEDNIKU (id_osoby NUMBER, uroven NUMBER), která vrátí počet následníků na dané úrovni pro konkrétní osobu (úroveň 1.. Děti, 2.. Vnoučata atd.), pokud id_osoby nebude existovat, vrátí funkce hodnotu NULL. Vytvořte pohled CV10_NASL_POCTY (Id, jmeno, prijmeni, deti, vnoucat, pravnoucat), který pro všechny ženy starší 20-ti let vypíše id osoby, její jméno a příjmení a počty dětí, vnoučat a pravnoučat. Databázové systémy 2 – cvičení 10 10

Příklady – hierarchické dotazy Vytvořte pohled CV10_LINIE_JMEN (prijmeni_ditete, retezec_jmen), který pro všechny osoby mladší 10-ti let zobrazí ve sloupci retezec_jmen všechna křestní jména v linii dle pohlaví u dané osoby a jejích předchůdců navzájem oddělená čárkami (nejmladší vlevo, nejstarší vpravo), zobrazte pouze řádky zobrazující celé známé linie (tedy až po posledního známého předchůdce). Nápověda: použijte SYS_CONNECT_BY_PATH, CONNECT_BY_ROOT a CONNECT_BY_ISLEAF Příklad HorkýMartin, Petr, Martin PlacháLucie, Monika Databázové systémy 2 – cvičení 10 11

A_CLOVEK Databázové systémy 2 – cvičení 10 12

Cvičení 10 – kontrola Všechny databázové objekty z tohoto cvičení vytvořte se svém schématu. Pro splnění cvičení je nutné, aby všechny objekty byly správně vytvořeny a funkční do půlnoci dne před následujícím cvičením. Databázové systémy 2 – cvičení 10 13