[ START WITH podmínka ] CONNECT BY podmínka Hierarchické dotazy I Slouží k vytvoření řazení pomocí hierarchické posloupnosti (strom) Užití GROUP BY nebo ORDER BY zničí výsledky tohoto příkazu [ START WITH podmínka ] CONNECT BY podmínka Kromě zmíněných klauzulí zavedeme ještě PRIOR a LEVEL
Hierarchické dotazy II Klauzule START WITH určující počátek struktury, tedy kořen stromu Může vzniknout i několik stromů, přičemž každý kořen musí vyhovovat dané podmínce Jedná se o nepovinnou část, při absenci je za kořen postupně považován každý záznam Klauzule CONNECT BY PRIOR pak určuje způsob řazení potomků ve stromu a klauzule LEVEL určuje aktuální úroveň zanoření
Hierarchické dotazy III Klauzule určující podmínku pro stanovené souvislosti mezi dvěma po sobě jdoucími záznamy v jedné větvi (vztah rodič - potomek) Pro určení syna, tj. sloupce podřazeného záznamu, se používá operátor PRIOR Právě jedna podmínka v CONNECT BY musí být kvalifikována pomocí PRIOR Jiné operátory než PRIOR mohou vést k nekonečnému cyklu
Příklad SELECT prijmeni ||' je podřízen '|| PRIOR prijmeni FROM zamestnanci START WITH nadrizeny IS NULL CONNECT BY PRIOR id_zamestnanci = nadrizeny
Pseudosloupec LEVEL Umožňuje orientaci v hierarchických strukturách SELECT LEVEL AS uroven, prijmeni AS zamestnanec, PRIOR prijmeni AS vedouci FROM zamestnanci START WITH nadrizeny IS NULL CONNECT BY PRIOR id_zamestnanci = nadrizeny
Klauzule WHERE a ORDER BY Při použití klauzule WHERE jsou ze stromu vyčleněny řádky, které jsou v ní přímo označeny Je-li součástí CONNECT BY PRIOR podmínka pro WHERE je odříznuta celá větev stromu Při použití ORDER BY má prioritu řazení, dojde tak ke zrušení hierarchie Použití ORDER SIBLINGS BY pro definici řazení v rámci potomků
ROWNUM Určí číslo řádku Požívá se například, když chceme vypsat N prvních SELECT ROWNUM, prijmeni FROM (SELECT prijmeni FROM zamestnanci ORDER BY plat DESC)
1. Vypište jména a příjmení zaměstnanců s nejvyšším počtem nadřízených 1. Vypište jména a příjmení zaměstnanců s nejvyšším počtem nadřízených. 2. Vytvořte stromovou strukturu zaměstnanců v následujících formátech: všichni zaměstnanci pro pobočku v Břeclavi
3. Vypište názvy prvních deseti neprodávanějších produktů na pobočce Brno 1 od 9. 2. do 17. 2. 2014 včetně pořadí. 4. Vypište pět dnů s nejnižším obratem. 5. Spočítejte kolik prodejů bylo zaplaceno v hotovosti, kolik kartou a u kolika to není možné z poskytnutých dat zjistit. 6. Pro jednotlivé pobočky vypište dny s nejvyšším ziskem.
7. Vypište názvy a zemi původu všech asijských produktů, které vyrobili producenti, kteří patřili mezi tři nejúspěšnějších producentů z hlediska počtu prodaných kusů. 8. Vypište názvy, zemi původu a název producenta všech neasijských produktů, které vyrobili producenti, kteří patřili mezi tři nejúspěšnější producenty z hlediska tržeb.
9. Vypište pořadí českých produktů (název produktu, producent, pořizovací cena, zisk), podle výše zisku, který přinesly. 10. Vypište 10 evropských produktů, které přinesly nejvyšší zisk hodonínské pobočce.
11. Vypište den s nejvyšším obratem za jednotlivá oddělení, pobočky a města. 12. Vypište tři dny s nejnižším obratem za jednotlivé pobočky.