Prezentace se nahrává, počkejte prosím

Prezentace se nahrává, počkejte prosím

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

Podobné prezentace


Prezentace na téma: "Databázové systémy 2 Cvičení č. 10 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky"— Transkript prezentace:

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

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

3 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

4 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

5 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

6 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

7 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

8 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

9 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

10 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

11 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

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

13 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


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

Podobné prezentace


Reklamy Google