UNICORN COLLEGE BAKALÁŘSKÁ PRÁCE

Rozměr: px
Začít zobrazení ze stránky:

Download "UNICORN COLLEGE BAKALÁŘSKÁ PRÁCE"

Transkript

1 UNICORN COLLEGE Katedra informačních technologií BAKALÁŘSKÁ PRÁCE Pokročilé dotazování v databázích Oracle pomocí analytických funkcí Michael Remiš Ing. Miroslav Žďárský 2013, Praha

2

3 Čestné prohlášení Prohlašuji, že jsem svou bakalářskou práci na téma Pokročilé dotazování v databázích Oracle pomocí analytických funkcí vypracoval samostatně pod vedením vedoucího bakalářské práce a s použitím výhradně odborné literatury a dalších informačních zdrojů, které jsou v práci citovány a jsou také uvedeny v seznamu literatury a použitých zdrojů. Jako autor této bakalářské práce dále prohlašuji, že v souvislosti s jejím vytvořením jsem neporušil autorská práva třetích osob a jsem si plně vědom následků porušení ustanovení 11 a následujících autorského zákona č. 121/2000 Sb. V. dne... (Michael Remiš)

4 Poděkování Děkuji vedoucímu bakalářské práce Ing. Miroslavu Žďárskému za účinnou metodickou, pedagogickou a odbornou pomoc a další cenné rady při zpracování mé bakalářské práce.

5 Pokročilé dotazování v databázích Oracle pomocí analytických funkcí Advanced SQL queries with analytic functions in Oracle - 5 -

6 Abstrakt Analytické funkce jsou rozšířením jazyka SQL, které nám umožňují vyřešit složitá zadání dotazů jednoduchým zápisem namísto komplikovaného skládání SQL dotazů či procedurálního řešení. V rámci tohoto tématu bude popsáno, jak jsou analytické funkce řešeny, jejich pohled na data a využití jednotlivých funkcí v různých případech spolu s ukázkami. Cílem práce by měl být vznik tutoriálu, který člověku se znalostí SQL rozšíří znalosti i o tuto oblast. Klíčová slova: analytické funkce, reportování, optimalizace, SQL Abstract Analytic functions are SQL extension that allows developers to solve difficult task using simple SQL query instead of complicated constructions or usage of procedural language. This text contains the description of basic principles of analytic functions, description of how they work with data and usage of analytic functions in different situations with simple examples. The goal of this work is to create tutorial that can help anyone with basic knowledge of SQL to understand this topic. Key words: analytic functions, reporting, optimization, SQL - 6 -

7 1 Obsah 1 Obsah Úvod Analytické funkce Výhody analytických funkcí Základní terminologie Zpracování SQL dotazu Základy analytických dotazů Oblasti (partitions) Řazení oblasti (ORDER BY) Okna (windows) Zpracování SQL dotazu s analytickou funkcí Přehled analytických funkcí Ranking family ROW_NUMBER, RANK, DENSE_RANK PERCENT_RANK CUME_DIST Window aggregate family AVG, SUM, MIN, MAX, COUNT RATIO_TO_REPORT LEAD/LAG family LEAD, LAG FIRST/LAST family FIRST, LAST FIRST_VALUE, LAST_VALUE NTH_VALUE Statistické funkce NTILE PERCENTILE_CONT, PERCENTILE_DISC VARIANCE, VAR_SAMP, VAR_POP STDDEV, STDDEV_SAMP, STDDEV_POP Další funkce LISTAGG

8 4 Rozdíly mezi dotazy s analytickou funkcí a bez AVG Nevhodné použití analytické funkce Závěr Seznam použité literatury Seznam tabulek Příloha 1: Instalace testovacích dat Schéma HR Testovací tabulka EMPLOYEES_TEST

9 2 Úvod Cílem této práce je vytvořit přehled nejpoužívanějších analytických funkcí v prostředí Oracle a vysvětlit jejich základy. Text předpokládá čtenářovu základní znalost SQL a je určen především začátečníkům v oblasti analytických dotazů, ale i těm, kteří si chtějí své znalosti rozšířit, případně hledají příručku, návod či příklad. V první části této práce je popsán základní princip analytických funkcí a jejich výhody. V druhé části jsou pak jednotlivé funkce detailně vysvětleny. Následuje soubor příkladů, kde jsou analytické funkce porovnány s jejich protějšky bez použití analytických funkcí. Součástí instalace RDBMS Oracle je schéma HR, které obsahuje několik ukázkových tabulek i s daty. Většina příkladů SQL dotazů je právě nad tabulkami (zejména tabulka EMPLOYEES) z tohoto schématu. V tomto textu uvádím strukturu tabulky vždy při jejím prvním použití. Text obsahuje řadu příkladů konkrétních SQL dotazů spolu s výpisem vrácených řádků. Ve výsledcích dotazů je vždy uvedeno zpravidla jen prvních deset záznamů, ačkoliv příslušný SQL dotaz pro názornost takové omezení neobsahuje. 2.1 Analytické funkce I přesto, že podstatou jazyka SQL je jednoduchost a co největší podoba s běžným jazykem (angličtinou) (1), poskytuje obrovské možnosti při dotazování v relačních databázích. Jednoduché dotazy mají přímočarou konstrukci. Například seznam všech zaměstnanců z tabulky ZAMESTNANCI získáme dotazem: * FROM ZAMESTNACI; Jazyk SQL nám ale umožňuje pokládat daleko složitější dotazy. Pokud budeme chtít u zaměstnanců zobrazit i průměrný plat v jeho oddělení a rozdíl proti tomuto průměru, dotaz bude sice mírně složitější, ale stále bude poměrně přímočarý. Zajímá-li nás seznam všech zaměstnanců ve společnosti seřazený podle jejich platu navíc ještě s informací o rozdílu proti předchozímu zaměstnanci, dostáváme se do situace, kterou stále půjde řešit dotazem SQL, nicméně jeho zápis bude nečitelný a složitý. Databázový server Oracle (2) v sobě poprvé obsahoval skupinu funkcí, které nám v podobných případech pomohou. Jedná se o sadu analytických funkcí (anglicky - 9 -

10 analytical functions). Tyto funkce jsou někdy označovány jako windowing nebo reporting functions (2). Analytické funkce (AF) jsou podobné agregačním funkcím, které vracejí vždy jednu hodnotu pro právě definovanou skupinu záznamů. Mějme tabulku EMPLOYEES, která obsahuje informace o zaměstnancích (tabulka ze schématu HR). DESCRIBE EMPLOYEES; NAME NULL TYPE EMPLOYEE_ID NOT NULL NUMBER(6) FIRST_NAME VARCHAR2(20) LAST_NAME NOT NULL VARCHAR2(25) NOT NULL VARCHAR2(25) PHONE_NUMBER VARCHAR2(20) HIRE_DATE NOT NULL DATE JOB_ID NOT NULL VARCHAR2(10) SALARY NUMBER(8,2) COMMISSION_PCT NUMBER(2,2) MANAGER_ID NUMBER(6) DEPARTMENT_ID NUMBER(4) Pro zjištění průměrného platu podle oddělení (DEPARTMENT_ID) nám postačí jednoduchá agregační funkce AVG: DEPARTMENT_ID, AVG(SALARY) GROUP BY DEPARTMENT_ID; Agregační funkce nám seznam zaměstnanců rozdělila na skupiny podle oddělení, ve kterém zaměstnanec pracuje a pro každé oddělení spočítala aritmetický průměr. Analytické funkce se liší v tom, že vytvářejí skupinu pro každý řádek (1). Tato skupina se označuje jak oblast (angl. partition). Pokud dotaz obsahuje více analytických funkcí, bude sestaveno i více oblastí 1 pro jeden řádek. To je rozdíl oproti použití GROUP BY, kde je pouze jedna oblast 2. I to je důvod, proč mnoho agregačních funkcí má svůj analytický protějšek. Funkce jsou totiž v mnohém podobné (1). V případě GROUP BY je možné nad oblastí volat několik funkcí (zajímá nás např. průměrný a maximální plat v jednotlivých odděleních). 1 Oblast můžeme dále členit použitím oken. Pak může funkce v rámci oblasti vracet různé hodnoty pro různé řádky. Takovou hodnotou je např. kumulovaný součet. Podrobně viz kapitola GROUP BY může obsahovat více sloupců, neznamená to ale, že je sestaveno více oblastí. Více sloupců v klauzuli GROUP BY znamená jemnější dělení do oblastí. Např. GROUP BY DEPARTMENT_ID vytvoří oblasti zaměstnanců ve stejném oddělení, kdežto GROUP BY DEPARTMENT_ID, JOB_ID vytvoří oblasti zaměstnanců se stejným oddělením a na stejné pracovní pozici

11 Analytické funkce rozšiřují možnosti Business Inteligence a poskytují výkonný nástroj pro analýzu dat, která hraje důležitou roli při obchodním rozhodování. Důležitosti datové analýzy si Oracle byl vždy vědom a již od verze Oracle8i Release 1 přináší podporu pro dotazy CUBE a ROLLUP, které jsou rozšířením konstrukce GROUP BY a poskytuje tak poměrně silný reportovací nástroj. Postupně pak přidává další analytické a agregační funkce(3). 2.2 Výhody analytických funkcí Vedle významu pro Business Inteligence mají analytické funkce význam i pro samotné vývojáře. Složité konstrukce lze velmi snadno přepsat na jednoduché dotazy. Jednak dochází ke zvýšení produktivity, neboť analytické funkce nabízejí jednodušší řešení složitých dotazů. V druhé řadě jsou pak dotazy více čitelné, což usnadňuje spolupráci. Vývojáři tak nejsou nuceni doplňovat dotazy o komentáře a mohou se soustředit na psaní samotného dotazu (3). V určitých situacích dokonce není ani možné úlohu řešit využitím prostého SQL a je nutné využít možností procedurálního zpracování. Použití analytických funkcí má rovněž dopad i na výkon. Tedy na rychlost zpracování dotazu a tedy i na celkovou rychlost či odezvu celého systému. V moderních databázových systémech dochází před vykonáním dotazu k řadě procesů, které mají za úkol optimalizovat výsledný prováděcí plán. Při použití analytických funkcí může databázový server lépe dotaz pochopit a lépe tak naplánovat jeho provedení. Složité dotazy obsahující mnoho spojování tabulek (JOIN), poddotazů či volání procedur jsou nahrazeny mnohem výkonnějším dotazem (3). Analytické funkce jsou ale vhodné jen v určitých situacích a samotné použití analytické funkce nemusí vést ke zvýšení výkonu. Naopak špatné použití analytické funkce může systém výrazně zpomalit (viz kapitola 4.2). 2.3 Základní terminologie V následující kapitole jsou nejprve popsány základní principy zpracování jednoduchého SQL dotazu. Dále je popsán syntax a konstrukty analytických funkcí Zpracování SQL dotazu Pro pochopení analytických funkcí je důležité nejdříve znát způsob, jakým je každý SQL dotaz zpracován. Mějme jednoduchý dotaz do tabulky EMPLOYEES:

12 EMPLOYEE_ID, LOWER(FIRST_NAME) AS NAME ; Server dotaz zpracuje a vrátí výslednou množinu řádku. Ve výsledné množině budou všechny řádky z tabulky a bude obsahovat dva sloupce EMPLOYEE_ID a NAME. Výsledný dotaz můžeme seřadit nejen podle libovolného sloupce v tabulce (tedy nejen podle vybraných), ale i podle sloupce NAME, který obsahuje návratovou hodnotu funkce LOWER. Z toho plyne, že nejdříve je spočítána hodnota funkce LOWER pro všechny řádky a až po té je výsledná množina seřazena. Pokud však budeme chtít výslednou množinu omezit a vybrat pouze některé řádky použijeme klauzuli WHERE: EMPLOYEE_ID, LOWER(FIRST_NAME) AS NAME WHERE NAME = 'ADAM' ORDER BY NAME; V tomto případě ale Oracle vrátí následující chybu: ORA-00904: "NAME": INVALID IDENTIFIER "%S: INVALID IDENTIFIER" *CAUSE: *ACTION: ERROR AT LINE: 3 COLUMN: 7 Omezující podmínka WHERE se totiž odkazuje na sloupec NAME, který ale v době vykonávání podmínky ještě neexistuje. Nejdříve je totiž zpracována podmínka WHERE, poté je zpracována funkce LOWER a až na závěr je množina řádek seřazena podle sloupce NAME. Pokud bychom chtěli data filtrovat podle sloupce NAME, je nutné použít poddotaz: * FROM ( EMPLOYEE_ID, LOWER(FIRST_NAME) AS NAME ) WHERE NAME = 'adam'; Případně použít funkci LOWER znovu v klauzuli WHERE: EMPLOYEE_ID, LOWER(FIRST_NAME) AS NAME WHERE LOWER(FIRST_NAME) = 'adam'; Pokud k nějakému SQL dotazu přidáme seskupení GROUP BY, bude podmínka vyhodnocena před vykonáním seskupení. Dotaz WHERE

13 DEPARTMENT_ID, AVG(SALARY) AS AVG WHERE SALARY > 5000 GROUP BY DEPARTMENT_ID; vrátí průměrné platy po odděleních s tím, že jsou započítáni pouze zaměstnanci s platem vyšším než Případné řazení ORDER BY by bylo vykonáno až po vykonání GROUP BY 3. Seskupené řádky je možné dále filtrovat pomocí klauzule HAVING. Zde ale není možné použít sloupec AVG 4. Následující dotaz je rozšířením předchozího. Výsledné řádky navíc seřadí podle sloupce AVG a vybere jen řádky s průměrem vyšším než 7000: DEPARTMENT_ID, AVG(SALARY) AS AVG WHERE SALARY > 5000 GROUP BY DEPARTMENT_ID HAVING AVG(SALARY) > 7000 ORDER BY AVG; Základy analytických dotazů Analytické dotazy jsou podobné agregačním dotazům. Liší se tím, že vracejí hodnotu pro každou skupinu záznamů (1). Skupina záznamů se nazývá oblast a je definována v analytické části dotazu. Každý řádek patří právě do jedné oblasti. Chceme-li z databáze získat report všech zaměstnanců firmy s nějakou informací týkající se určité veličiny v oddělení příslušného zaměstnance (např. průměrný plat) budou jednotlivé oblasti tvořit řádky se zaměstnanci daného oddělení. Syntaxe analytické funkce vypadá následovně (4): ANALYTICKÁ FUNKCE (ARGUMENTY) OVER (ANALYTICKÁ KLAUZULE) Všechny analytické funkce jsou vykonány až v závěru těsně před vykonáním řazení ORDER BY. Analytickým funkcím tedy předchází vykonání spojeni JOIN, seskupení GROUP BY a filtrování HAVING (4). Dále platí, že analytické dotazy je možné použít kdekoliv ve výčtu sloupců nebo v klauzuli GROUP BY. Pro pochopení jak fungují analytické funkce a oblasti použijeme jednoduchý příklad s hodnocením řádků podle kritéria (ranking, podrobně viz kapitola 3.1). 3 Je tedy možné řadit i podle sloupce AVG 4 Resp. není možné použít jeho alias, ale pouze jeho původní definici, tedy AVG (SALARY)

14 K jednoduchému hodnocení řádku slouží pseudosloupec ROWNUM, který očísluje vrácené řádky. ROWNUM, FIRST_NAME, SALARY ; Výsledek dotazu je následující (uvedeno je pouze prvních 10 záznamů). Řádky jsou vráceny tak, jak jsou uloženy v datových souborech (to nemusí nutně odpovídat pořadí vkládání záznamů). ROWNUM FIRST_NAME LAST_NAME SALARY STEVEN KING NEENA KOCHHAR LEX DE HAAN ALEXANDER HUNOLD BRUCE ERNST DAVID AUSTIN VALLI PATABALLA DIANA LORENTZ NANCY GREENBERG DANIEL FAVIET 9000 Pokud bychom chtěli data seřadit podle platu, použijeme klauzuli ORDER BY: ROWNUM, FIRST_NAME, SALARY ORDER BY SALARY; ROWNUM FIRST_NAME LAST_NAME SALARY TJ OLSON STEVEN MARKLE HAZEL PHILTANKER JAMES LANDRY KI GEE KAREN COLMENARES JAMES MARLOW JOSHUA PATEL PETER VARGAS MARTHA SULLIVAN 2500 Opět je uvedeno pouze prvních 10 záznamů. Na výsledných záznamech je vidět, že ROWNUM je vykonáno dříve než ORDER BY. Sloupec ROWNUM by ale měl obsahovat pořadí

15 zaměstnance ve skupině seřazené podle výše platu. Toho lze snadno docílit použitím poddotazu. ROWNUM, T.* FROM ( FIRST_NAME, SALARY ORDER BY SALARY ) T; ROWNUM FIRST_NAME LAST_NAME SALARY TJ OLSON STEVEN MARKLE HAZEL PHILTANKER JAMES LANDRY KI GEE KAREN COLMENARES JAMES MARLOW JOSHUA PATEL PETER VARGAS MARTHA SULLIVAN 2500 Zde přichází na řadu analytické funkce, neboť stejného výsledku dosáhneme, pokud použijeme analytickou funkci ROW_NUMBER (podrobně viz kapitola 3.1.1). ROW_NUMBER() OVER (ORDER BY SALARY), FIRST_NAME, SALARY ORDER BY SALARY; Již v tomto triviálním příkladě je vidět jednoduchost zápisu dotazu. Nejprve uvádíme název analytické funkce ROW_NUMBER, která nepřijímá žádné argumenty. Následuje klíčové slovo OVER a definice pořadí řádků v oblasti (ORDER BY SALARY). Nejdříve je proveden dotaz... a výsledná sada záznamů je předána funkci ROW_NUMBER. Tato sada záznamů je dále seřazena dle ORDER BY SALARY v analytické klauzuli. Funkce ROW_NUMER pak pro každý řádek vrací hodnotu s pořadím ve vytvořené skupině 5. 5 Zde se jedná o jednu velkou skupinu obsahující všechny řádky

16 2.3.3 Oblasti (partitions) V praxi se často setkáváme s požadavkem reportu, který bude obsahovat všechny řádky ale s nějakou informací, která je společná pouze pro určitou skupinu řádek. Takovým reportem může být například seznam všech zaměstnanců společnosti spolu s průměrným platem v jeho oddělení. Chceme tedy dotaz, který vrátí následující sloupce (jejich význam je zřejmý) DEPARTMENT_ID, SALARY, DEP_AVG_SALARY. Dotaz, který vrátí požadovaný seznam, vypadá následovně: DEPARTMENT_ID DEP_ID, SALARY, AVG(SALARY) OVER (PARTITION BY DEPARTMENT_ID) DEP_AVG_SALARY ; LAST_NAME DEP_ID SALARY DEP_AVG_SALARY WHALEN HARTSTEIN FAY RAPHAELY KHOO BAIDA TOBIAS HIMURO COLMENARES MAVRIS Tento dotaz nám ilustruje, jak vznikají a jak se používají oblasti. Jednotlivé oblasti jsou naznačeny různým podbarvením řádku. Funkce AVG přijímá jako argument název sloupce, pro který se průměr počítá. Řádky jsou poté rozděleny do oblastí podle odpovídajícího oddělení. Oblast je definována pomocí klíčových slov PARTITION BY, která je součástí analytické klauzule. Funkce AVG pak vrací hodnotu v závislosti na tom, do které oblasti procházený řádek patří. Definice oblasti pomocí PARTITION BY je obdobné jako definování oblasti pomocí GROUP BY a může obsahovat více sloupců. Řekněme, že bychom chtěli znovu sledovat průměrné platy v odděleních, ale chtěli bychom zaměstnance odlišit i podle data nástupu. Pro lepší ilustraci jsou vybráni zaměstnanci z oddělení 30 a

17 DEPARTMENT_ID DEP_ID, TO_CHAR(HIRE_DATE, 'YYYY') YEAR, SALARY, AVG(SALARY) OVER (PARTITION BY DEPARTMENT_ID, TO_CHAR(HIRE_DATE, 'YYYY')) AVG_SALARY WHERE DEPARTMENT_ID IN (30, 60); Tento dotaz vrátí jméno, oddělení, rok 6, plat a průměrný plat v oddělení u zaměstnanců se stejným datem nástupu. V definici oblasti jsou použity dva sloupce oddělení a rok nástupu. Naznačeny jsou oblasti, které obsahují více než jeden řádek. Řádky v těchto oblastech mají různou hodnotu sloupce SALARY, ale obsahují stejnou hodnotu průměrného platu. Ostatní záznamy tvoří jednořádkovou oblast. LAST_NAME DEP_ID YEAR SALARY AVG_SALARY RAPHAELY KHOO BAIDA TOBIAS HIMURO COLMENARES AUSTIN HUNOLD PATABALLA ERNST LORENTZ Vraťme se nyní k dotazu, který hodnotil řádky v seznamu podle platu ROW_NUMBER() OVER (ORDER BY SALARY), FIRST_NAME, SALARY ORDER BY SALARY; Zde definice oblasti zcela chybí. Pokud v dotazu není definice oblasti uvedena, je vytvořena oblast se všemi řádky. To je vhodné pokud chceme znát pořadí podle jiného sloupce, než podle kterého jsou řádky výsledně seřazeny. Takovým seznamem může být například seznam zaměstnanců seřazených podle jména a jeho pořadí ve firmě podle platu a pořadí ve firmě podle provize. 6 Rok je z data nástup získán pomocí funkce TO_CHAR. Stejná funkce je použita i v definici oblasti, neboť na sloupec YEAR se nelze odkázat, protože vzniká současně s výpočtem analytické funkce

18 FIRST_NAME, ROW_NUMBER() OVER (ORDER BY SALARY) SALARY_POS, ROW_NUMBER() OVER (ORDER BY COMMISSION_PCT) COMMISION_POS ORDER BY FIRST_NAME; V definici oblasti smí být nejen název sloupce ale i konstanta, volání neanalytické funkce nebo funkční výraz 7 (4). Volání neanalytické funkce v PARTITION BY klauzuli jsme použili v dotazu, který vracel průměrné platy zaměstnanců podle oddělení a roku nástupu Řazení oblasti (ORDER BY) Oblast vytvořená v rámci analytické funkce může být dále seřazena. To je užitečné zejména u různých žebříčků (rankings, viz kapitola 3.1). K ilustraci opět využijeme tabulku zaměstnanců. Budeme chtít znát jejich pořadí v oddělení podle výše platu. K tomu využijeme funkci ROW_NUMBER, která nám k seřazeným záznamům vrátí pořadí. Seřazení zajistíme klíčovými slovy ORDER BY v analytické klauzuli a uvedením sloupců, podle nichž se má řadit. V našem případě je to sloupec SALARY. Jednotlivé oblasti jsou pro názornost vyznačeny různým podbarvením. DEPARTMENT_ID DEP_ID, SALARY, ROW_NUMBER() OVER (PARTITION BY DEPARTMENT_ID ORDER BY SALARY) RANK ; 7 Funkční výraz je například součet sloupců apod

19 LAST_NAME DEP_ID SALARY RANK WHALEN FAY HARTSTEIN COLMENARES HIMURO TOBIAS BAIDA KHOO RAPHAELY MAVRIS OLSON PHILTANKER MARKLE Pro potvrzení výše uvedeného výsledku (prvních 10 záznamů) zobrazíme zaměstnance z oddělení 30 seřazené podle výše platu. SALARY WHERE DEPARTMENT_ID=30 ORDER BY SALARY; LAST_NAME SALARY COLMENARES 2500 HIMURO 2600 TOBIAS 2800 BAIDA 2900 KHOO 3100 RAPHAELY Když se na výsledek dotazu podíváme podrobněji, zjistíme, že funkce ROW_NUMBER() ohodnotila zaměstnance Philtanker a Markle z oddělení 50 různou hodnotu ačkoliv mají stejný plat a patří do stejného oddělení. To je vlastnost funkce ROW_NUMBER. Další možnosti hodnocení řádků jsou uvedeny v kapitole 3.1. V našem případě je zaměstnanec Philtanker před Marklem protože jej Oracle načetl jako první z datového souboru. Řekněme ale, že v našem případě hraje při hodnocení řádku roli i například datum nástupu zaměstnance. Čím později zaměstnanec nastoupil, tím bychom ho chtěli lépe 8 hodnotit. Definice řazení sloupců může obsahovat více sloupců a umožňuje nám vyřešit 8 Neboli posunout jej v žebříčku výše a zvýšit jeho skóre (snížit číselné vyjádření jeho pozice)

20 situace, kdy jsou řádky hodnoceny stejně. K ORDER BY SALARY přidáme ještě sloupec HIRE_DATE. Tímto způsobem můžeme zajistit jedinečné a deterministické seřazení oblasti 9. DEPARTMENT_ID DEP_ID, SALARY, HIRE_DATE, ROW_NUMBER() OVER (PARTITION BY DEPARTMENT_ID ORDER BY SALARY, HIRE_DATE DESC) RANK ; LAST_NAME DEP_ID SALARY HIRE_DATE RANK WHALEN SEP-03 1 FAY AUG-05 1 HARTSTEIN FEB-04 2 COLMENARES AUG-07 1 HIMURO NOV-06 2 TOBIAS JUL-05 3 BAIDA DEC-05 4 KHOO MAY-03 5 RAPHAELY DEC-02 6 MAVRIS JUN-02 1 OLSON APR-07 1 MARKLE MAR-08 2 PHILTANKER FEB Okna (windows) V předchozích příkladech byla vždy vytvořena oblast a analytická funkce měla na svém vstupu všechny řádky spadající do příslušné oblasti. Například pro průměrný plat v oddělení byla vytvořena oblast pro každé oddělení. Všichni zaměstnanci z tohoto oddělení byli započítáni do průměrného platu oddělení. V určitých případech by nás z oblasti mohla zajímat jen její část. Takovým příkladem je třeba klouzavý aritmetický průměr. Požadavek je sestavit seznam zaměstnanců a jejich klouzavý průměr o délce 3 (samozřejmě v rámci oddělení). Jinými slovy chceme sestavit oblast podle oddělení, seřazenou podle platu a vyjmout z ní ke každé řádce pouze předchozí a následující záznam. K tomu slouží okna (windows). 9 Seřazení je deterministické za předpokladu, že neexistují dva zaměstnanci, kteří nastoupili ve stejný den a mají stejný plat. Jedná se o takový případ, kdy je pořadí řádků na výstupu jednoznačně dáno pouze a jen pořadím definovaným pomocí sloupců v ORDER BY klauzuli a neovlivní jej žádné jiné další faktory

21 Okno se definuje v analytické klauzuli za ORDER BY a je možné použít dva typy oken. Prvním typem je okno definované pomocí počtu řádek. Klíčovým slovem je pak ROWS. Definovat lze začátek a konec relativně vůči procházené řádce. Jednotkou je zde počet řádků. Například tři řádky před a tři řádky po, šest řádek před a dvě řádky před, jedna řádka po a 3 řádky po. Okno tedy nutně nemusí začínat před aktuální řádkou a končit za. Následující příklad ukazuje výpočet klouzavého průměru v rámci oddělení o délce 3 a 5. V prvním výsledku je ohraničením naznačena oblast pro oddělení 30 a v ní různým podbarvením okna pro výpočet klouzavého průměru o délce 3 (sloupec AVG_3) pro zaměstnance Himuro a pro zaměstnance Khoo (tyto okna se nepřekrývají). V dotazu se ptáme na jeden řádek před a na jeden řádek po (ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING). Pro zaměstnance Himuro byl počítán klouzavý průměr z platu zaměstnanců Colmenares a Tobias, kteří se nacházejí na řádce před Himuro, resp. na řádce po. DEPARTMENT_ID, SALARY, AVG(SALARY) OVER (PARTITION BY DEPARTMENT_ID ORDER BY SALARY ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING) AVG_3, AVG(SALARY) OVER (PARTITION BY DEPARTMENT_ID ORDER BY SALARY ROWS BETWEEN 2 PRECEDING AND 2 FOLLOWING) AVG_5 ORDER BY DEPARTMENT_ID, SALARY; LAST_NAME DEPARTMENT_ID SALARY AVG_3 AVG_ WHALEN FAY HARTSTEIN COLMENARES HIMURO TOBIAS BAIDA KHOO RAPHAELY MAVRIS Okno, které bylo sestaveno pro výpočet klouzavého průměru o délce 5 (sloupec AVG_5) např. pro zaměstnance Baida, by vypadalo následovně (naznačena je oblast pro oddělení 30 a okno pro zaměstnance Baida). Pomocí ROWS BETWEEN 2 PRECEDING AND 2 FOLLOWING říkáme, že do výpočtu klouzavého průměru vstupují 2 řádky před a dva řádky

22 po aktuální řádce. Pro zaměstnance Baida jsou to tedy řádky s platy zaměstnanců Himuro, Tobias (dva řádky před). A dále řádky s platy zaměstnanců Khoo a Raphaely. LAST_NAME DEPARTMENT_ID SALARY AVG_3 AVG_ WHALEN FAY HARTSTEIN COLMENARES HIMURO TOBIAS BAIDA KHOO RAPHAELY MAVRIS Důležité je, že pomocí klíčového slova ROWS vybíráme předcházející či následující řádky na základě jejich počtu bez ohledu na hodnoty v těchto řádcích. Druhým typem je okno definované na základě hodnot v řádku. Na rozdíl od předchozího způsobu bude počet řádek proměnlivý a bude záviset na hodnotách v řádcích. Klíčové slovo zde je RANGE. Uvedený způsob bychom mohli využít například, pokud bychom chtěli (v rámci oddělení) znát u každého zaměstnance počet zaměstnanců, kteří mají podobný plat (řekněme ±200+). Výsledek analytické funkce je zde ještě upraven o -1- neboť vždy zahrnuje i aktuální řádek, který je nutné odečíst. DEPARTMENT_ID, SALARY, COUNT(*) OVER (PARTITION BY DEPARTMENT_ID ORDER BY SALARY RANGE BETWEEN 200 PRECEDING AND 200 FOLLOWING) - 1 COUNT ORDER BY DEPARTMENT_ID, SALARY;

23 LAST_NAME DEPARTMENT_ID SALARY COUNT WHALEN FAY HARTSTEIN COLMENARES HIMURO TOBIAS BAIDA KHOO RAPHAELY MAVRIS Např. pro zaměstnance Tobias jsou do počtu zahrnuty řádky, které mají plat vyšší nebo roven = 2600 a nižší nebo roven = 3000 (tedy zaměstnanci Himuro a Baida). Řádky, které vstoupí do výpočtu, byly v tomto případě vybrány na základě hodnoty ve sloupci SALARY, nikoliv na základě přesně stanoveného počtu řádků. Syntaxe okna je následující (4): [RANGE ROWS] BETWEEN <START> AND <END> RANGE či ROWS definuje typ okna. Následuje část BETWEEN <START> AND <END>, která nastavuje začátek a konec oblasti. Část BETWEEN <START> AND může být vynechána, <END> poté bude začátek okna a koncem okna bude aktuální řádka 10. <START> a <END> mohou nabývat hodnot UNBOUNDED [PRECEDING FOLLOWING], nebo CURRENT ROW NEBO VÝRAZ [PRECEDING FOLLOWING]. Hodnoty START a END (jak bylo vidět v předchozím příkladě), jsou hodnoty, které budou přičteny k hodnotě v požadovaném sloupci pro každý procházený řádek (nikoliv absolutní hodnoty). Následující příklad obsahuje dotaz, který vrací přehled zaměstnanců, kde je ke každému zaměstnanci zobrazen počet zaměstnanců v oddělení, kteří mají více než dvojnásobný plat. Sloupec SALARY*2 obsahuje hodnotu dvojnásobku platu a LAST_NAME_2 obsahuje jméno prvního takového zaměstnance (v seznamu zaměstnanců seřazeném podle oddělení a platu). Pro názornost byli vybráni pouze zaměstnanci z oddělení Jinými slovy, pokud uvedeme jen jednu mez a vynecháme BETWEEN, bude tato mez chápána jako začátek okna a jako dolní mez se bere aktuální řádka

24 DEPARTMENT_ID, SALARY, SALARY*2, FIRST_VALUE(LAST_NAME) OVER (PARTITION BY DEPARTMENT_ID ORDER BY SALARY ASC RANGE BETWEEN SALARY FOLLOWING AND UNBOUNDED FOLLOWING) LAST_NAME_2, COUNT(*) OVER (PARTITION BY DEPARTMENT_ID ORDER BY SALARY ASC RANGE BETWEEN SALARY FOLLOWING AND UNBOUNDED FOLLOWING) COUNT WHERE DEPARTMENT_ID=50; ORDER BY DEPARTMENT_ID, SALARY ASC; LAST_NAME DEPARTMENT_ID SALARY SALARY*2 LAST_NAME_2 COUNT OLSON SARCHAND 6 MARKLE MOURGOS 5 PHILTANKER MOURGOS 5... BULL FRIPP 1 SARCHAND MOURGOS VOLLMAN KAUFLING WEISS FRIPP Například dvojnásobek platu zaměstnance Olsona je Tento či vyšší plat má ještě šest dalších zaměstnanců počínaje zaměstnance Sarchandem. Dvojnásobek platu zaměstnance Bulla je Takový plat má pouze zaměstnance Fripp. Definice okna může být i úplně vynechána, vznikne pak výchozí okno od první řádky až po aktuální řádku. Funkce AVG (viz 3.2.1) vrací aritmetický průměr, ne vždy ale musí být výsledek dle očekávání. DEPARTMENT_ID, SALARY, HIRE_DATE, AVG(SALARY) OVER (PARTITION BY DEPARTMENT_ID) AVG1, AVG(SALARY) OVER (PARTITION BY DEPARTMENT_ID ORDER BY HIRE_DATE) AVG2 ORDER BY DEPARTMENT_ID, HIRE_DATE;

25 LAST_NAME DEPARTMENT_ID SALARY HIRE_DATE AVG1 AVG WHALEN SEP HARTSTEIN FEB FAY AUG RAPHAELY DEC KHOO MAY TOBIAS JUL BAIDA DEC HIMURO NOV COLMENARES AUG MAVRIS JUN Sloupec AVG1 obsahuje hodnotu aritmetického průměru v oddělení. Ačkoliv se může zdát, že aritmetický průměr nad neseřazenými a seřazenými záznamy v oblasti (oddělní) bude stejný, není tomu tak. Sloupec AVG2 totiž vrací hodnotu, kterou bychom mohli nazvat kumulativní průměr, neboli průměr hodnot až po aktuální řádku v rámci oddělení, kde jsou hodnoty seřazeny podle sloupce HIRE_DATE. Oracle totiž při uvedení ORDER BY klauzule vytvoří výchozí okno od první řádky až po aktuální řádku. Z použití okna plyne několik omezení pro analytickou klauzuli. Pokud vytváříme okno, je nutné definovat řazení oblasti pomocí ORDER BY. Na řazení jsou pak kladeny ještě další požadavky, pokud je použit typ RANGE. Za předpokladu že je použit typ RANGE a <START> či <END> obsahuje výraz, musí být oblast řazena pouze podle jednoho sloupce Zpracování SQL dotazu s analytickou funkcí V případě, že SQL dotaz obsahuje volání analytické funkce, je tato funkce zpracována těsně před vykonáním řazení GROUP BY. Pořadí tedy je: výběr sloupců, omezení WHERE, seskupení GROUP BY, omezení HAVING, volání analytické funkce (a sestavení oblasti pro tuto funkci), řazení ORDER BY (2)

26 3 Přehled analytických funkcí 3.1 Ranking family Tyto funkce jsou využívány k hodnocení řádků a k určení jejich pořadí v rámci seřazené množiny záznamů ROW_NUMBER, RANK, DENSE_RANK Tyto funkce jsou si velmi podobné. Všechny tyto funkce určují pořadí řádku v oblasti seřazené dle libovolného sloupce (popř. sloupců). Liší se tím, jak postupují v případě, že se v oblasti nacházejí řádky se stejným hodnocením. Následující příklad ukazuje použití těchto funkcí. Hodnotíme zaměstnance v celé společnosti podle platu 11. DEPARTMENT_ID AS DEP_ID, SALARY, ROW_NUMBER() OVER(ORDER BY SALARY) ROW_NUMBER, RANK() OVER (ORDER BY SALARY) RANK, DENSE_RANK() OVER (ORDER BY SALARY) DENSE_RANK ; LAST_NAME DEP_ID SALARY ROW_NUMBER RANK DENSE_RANK OLSON MARKLE PHILTANKER LANDRY GEE COLMENARES MARLOW PATEL VARGAS SULLIVAN Z uvedeného výsledku je rozdíl mezi funkcemi patrný. ROW_NUMBER přiřadí každé řádce unikátní pořadové číslo. Tzn., že pokud mají řádky stejné hodnocení, funkce jim i tak 11 Příklad zároveň ukazuje situaci, kdy je vynechána část PARTITION BY. Při zpracování tak vzniká pouze jediná oblast, která zahrnuje všechny řádky

27 přiřadí různou hodnotu. Funkce při shodě hodnocení přiřazuje hodnotu v závislosti na uložení řádku v datovém souboru 12. Naproti tomu funkce RANK stejně hodnoceným řádkům přiřadí stejnou hodnotu. Řádek následující po skupině se stejným hodnocením, je ale ohodnocen tak, že v řadě jsou vynechány hodnoty podle velikosti skupiny se stejným hodnocením a řada tak není spojitá. Zaměstnanci s platem 2200 jsou hodnoceni číslem 2, následující řádky pak začínají číslem 4 (číslo tři bylo vynecháno). Funkce DENSE_RANK je podobná funkci RANK, ale udržuje řadu spojitou. Po zaměstnancích s platem 2200 s hodnocením 2 následují řádky s hodnocením 3. Vzniká tak spojitá řada bez mezer PERCENT_RANK Funkce PERCENT_RANK stanovuje pořadí vyjádřené pomocí procentuální hodnoty. Funkce nabývá hodnot od nuly do jedné, přičemž první řádek v oblasti má hodnotu 0 a poslední 1. Hodnocení je založené na hodnotě funkce RANK a její definice vypadá následovně (2): PERCENT_RANK = (RANK 1) / (COUNT 1) Pro ilustraci chceme opět hodnotit zaměstnance v celé společnosti podle platu. Příklad ukazuje výpočet funkce RANK, PERCENT_RANK a ruční výpočet PERCENT_RANK (sloupec PR1) pomocí hodnoty RANK a COUNT podle výše uvedeného vzorce (sloupec PR2) 13. DEPARTMENT_ID AS DEP_ID, SALARY, RANK() OVER (ORDER BY SALARY) RANK, PERCENT_RANK() OVER (ORDER BY SALARY) PR1, (RANK() OVER (ORDER BY SALARY) - 1)/(COUNT(LAST_NAME) OVER() - 1) PR2 ; 12 Uložení v datovém souboru není v čase konstantní a funkce tak může být nedeterministická a může pro stejně hodnocené řádky vracet různá pořadí. Je tedy vhodné použít více sloupců v ORDER BY, aby řazení bylo unikátní. 13 Hodnoty ve sloupcích PR1 a PR2 jsou zaokrouhleny na 4 desetinná místa

28 LAST_NAME DEP_ID SALARY RANK PR1 PR OLSON MARKLE PHILTANKER LANDRY GEE COLMENARES MARLOW PATEL VARGAS SULLIVAN CUME_DIST Funkce CUME_DIST počítá komutativní distribuční funkci, ale pro řádky se stejným hodnocením vrací funkce stejnou hodnotu. Jedná se tedy o hodnotu R/N, kde R je počet řádku se stejným či nižším hodnocením a N je celkový počet řádků (5). DEPARTMENT_ID AS DEP_ID, SALARY, CUME_DIST() OVER (ORDER BY SALARY) CUME_DIST ; LAST_NAME DEP_ID SALARY CUME_DIST OLSON MARKLE PHILTANKER LANDRY GEE COLMENARES MARLOW PATEL VARGAS SULLIVAN Hodnota funkce CUME_DIST se dá spočítat ručně pomocí hodnot ROW_NUMBER, RANK a pomocí vnořeného dotazu. Nejprve si spočteme hodnoty RANK a ROW_NUMBER. Výsledek dotazu použijeme ve vnějším dotazu. Řádky rozdělíme do oblastí podle hodnoty RANK a z oblasti vybereme maximální hodnotu sloupce ROW_NUMBER, neboli určíme počet řádků se stejným či nižším hodnocením (to je pro řádky se stejným hodnocením stejné). Získanou hodnotu stačí vydělit celkovým počtem řádků a získáme hodnotu CUME_DIST

29 T.*, MAX(RN) OVER(PARTITION BY RANK) / COUNT(*) OVER() CD2 FROM ( SALARY, RANK() OVER (ORDER BY SALARY) RANK, ROW_NUMBER() OVER (ORDER BY SALARY) RN, CUME_DIST() OVER (ORDER BY SALARY) CD1 ) T; LAST_NAME SALARY RANK RN CD1 CD OLSON PHILTANKER MARKLE GEE LANDRY SULLIVAN VARGAS PATEL MARLOW PERKINS Window aggregate family AVG, SUM, MIN, MAX, COUNT Význam těchto funkcí je naprosto zřejmý. AVG počítá průměrnou hodnotu, SUM součet, MAX vrací nejvyšší hodnotu, MIN vrací nejnižší hodnotu a COUNT vrací počet hodnot. Následující příklad počítá výše uvedené veličiny pro hodnotu SALARY. Hodnoty funkcí jsou počítány v rámci oddělení. SALARY, DEPARTMENT_ID AS DEP_ID, AVG(SALARY) OVER(PARTITION BY DEPARTMENT_ID) AVG, MAX(SALARY) OVER(PARTITION BY DEPARTMENT_ID) MAX, MIN(SALARY) OVER(PARTITION BY DEPARTMENT_ID) MIN, COUNT(SALARY) OVER(PARTITION BY DEPARTMENT_ID) COUNT, SUM(SALARY) OVER(PARTITION BY DEPARTMENT_ID) SUM ;

30 LAST_NAME SALARY DEP_ID AVG MAX MIN COUNT SUM WHALEN HARTSTEIN FAY RAPHAELY KHOO BAIDA TOBIAS HIMURO COLMENARES MAVRIS Definice těchto funkcí vypadá následovně (4): FUNKCE(DISTINCT ALL FUNKČNÍ VÝRAZ) OVER (ANALYTICKÁ KLAUZULE) Pokud není uveden modifikátor DISTINCT nebo ALL, použije se ALL. ALL zahrne do výpočtu všechny hodnoty, DISTINCT zahrne pouze unikátní hodnoty. Pokud je uveden modifikátor DISTINCT nelze v analytické klauzuli použít ORDER BY a definici okna (dotaz skončí vyhozením výjimky). Pokud chceme například zjistit, kolik různých platů se vyplácí v každém oddělení, použijeme agregační funkci COUNT. DEPARTMENT_ID, COUNT(*) EMP_COUNT, COUNT(DISTINCT SALARY) SAL_COUNT GROUP BY DEPARTMENT_ID; DEPARTMENT_ID EMP_COUNT SAL_COUNT Například oddělení 90 má tři různé zaměstnance, ale dva z nich mají stejný plat. Stejně tak lze počítat například aritmetický průměr z unikátních hodnot či součet unikátních hodnot

31 Argumentem funkce COUNT může být navíc ještě symbol * (asterisk). Funkce pak vrací počet řádků včetně null hodnot a duplicit (4) RATIO_TO_REPORT Funkce RATIO_TO_REPORT vrací poměr hodnoty výrazu k součtu všech hodnot výrazu v oblasti. DEPARTMENT_ID, SALARY, RATIO_TO_REPORT(SALARY) OVER (PARTITION BY DEPARTMENT_ID) RATIO, SALARY / SUM(SALARY) OVER (PARTITION BY DEPARTMENT_ID) RATIO2 ORDER BY DEPARTMENT_ID, SALARY LAST_NAME DEPARTMENT_ID SALARY RATIO RATIO WHALEN FAY HARTSTEIN COLMENARES HIMURO TOBIAS BAIDA KHOO RAPHAELY MAVRIS Sloupec RATIO obsahuje výsledek funkce RATIO_TO_REPORT a RATIO2 pak ručně spočítanou hodnotu pomocí podílu a funkce SUM. 3.3 LEAD/LAG family LEAD, LAG Funkce LEAD a LAG nám umožňují se v oblasti podívat na hodnotu (resp. výraz) v řádce, která se nachází o určitý počet řádek před aktuální řádkou resp. po aktuální řádce. V SQL dotazu tak máme k dispozici nejen data z aktuální řádky, ale i z libovolné další řádky v oblasti. Funkce LEAD a LAG přebírají mimo funkčního výrazu ještě offset a výchozí hodnotu. Syntax je následující (4):

32 LEAD LAG (VÝRAZ, OFFSET, VÝCHOZÍ HODNOTA) RESPECT IGNORE NULLS OVER (PARTITION BY KLAUULE ORDER BY KLAUZULE) 14 Výrazem může být název sloupce či jiný funkční výraz. Offset je pořadí požadovaného řádku před či po aktuální řádce. Tento parametr je volitelný a výchozí hodnotou je null. Volitelně lze pak ještě nastavit výchozí hodnotu, která bude vrácena v případě, že offset zasahuje za hranici oblasti (např. pro předchozí řádek u první řádky) (4). RESPECT IGNORE NULLS je volitelný modifikátor (výchozí hodnota je RESPECT NULLS), který ovlivňuje chování řádků vracejících NULL. IGNORE NULLS zajistí, že budou přeskočeny řádky, které vracejí NULL. Tyto řádky nebudou započítány do hodnoty offset (přeskočeno bude OFFSET řádků plus všechny řádky, které vracejí NULL) (5). Dotaz v následujícím příkladě vrací seznam zaměstnanců seřazený podle oddělení a platu (vzestupně). U každého zaměstnance je zobrazen rozdíl mezi předchozím nižším platem a jméno zaměstnance, který tento plat dostává (v rámci oddělení). Pokud neexistuje zaměstnanec s nižším platem, je rozdíl roven hodnotě NULL a místo jména je zobrazen text N/A. Toho je docíleno dosazením volitelného parametru. DEPARTMENT_ID, SALARY, SALARY - LAG(SALARY) OVER (PARTITION BY DEPARTMENT_ID ORDER BY SALARY ASC) SALARY_DIFF, LAG( 1, 'N/A') OVER (PARTITION BY DEPARTMENT_ID ORDER BY SALARY ASC) PREV_NAME ORDER BY DEPARTMENT_ID, SALARY ASC; 14 Alternativně lze modifikátor RESPECT IGNORE NULLS uvést za výrazem

33 LAST_NAME DEPARTMENT_ID SALARY SALARY_DIFF PREV_NAME WHALEN N/A FAY N/A HARTSTEIN FAY COLMENARES N/A HIMURO COLMENARES TOBIAS HIMURO BAIDA TOBIAS KHOO BAIDA RAPHAELY KHOO MAVRIS N/A 3.4 FIRST/LAST family FIRST, LAST Funkce FIRST a LAST od ostatních odlišuje jejich syntax. Umožňují nám operovat nad první resp. poslední skupinou, která vznikne hodnocením pomocí DENSE_RANK. Nad řádky, které vrátí FIRST či LAST je možné volat libovolnou agregační funkci (resp. funkce MIN, MAX, SUM, AVG, COUNT, VARIANCE, STDDEV) (3). Syntax je následující (5): AGREGAČNÍ FUNKCE KEEP (DENSE_RANK FIRST LAST ORDER BY VÝRAZ) OVER (PARTITION BY KLAUZULE) Klauzuli PARTITION BY je možné vynechat, funkce FIRST či LAST pak bude operovat nad všemi řádky. Pokud je vynechána celá část počínaje klíčovým slovem OVER, je funkce chápána jako funkce agregační (a je tedy nutné seskupit řádky pomocí GROUP BY). Tabulka EMPLOYEES obsahuje sloupec COMMISSION_PCT, kde uchováváme informace provizi. Chceme (v rámci oddělení) porovnat plat zaměstnance s nejnižším resp. nejvyšším platem ze skupiny zaměstnanců, kteří mají nejmenší resp. nejvyšší provizi (4). DEPARTMENT_ID, SALARY, COMMISSION_PCT, MIN(SALARY) KEEP (DENSE_RANK FIRST ORDER BY COMMISSION_PCT) OVER (PARTITION BY DEPARTMENT_ID) WORST, MAX(SALARY) KEEP (DENSE_RANK LAST ORDER BY COMMISSION_PCT) OVER (PARTITION BY DEPARTMENT_ID) BEST ORDER BY DEPARTMENT_ID, COMMISSION_PCT, SALARY;

34 LAST_NAME DEPARTMENT_ID SALARY COMMISSION_PCT WORST BEST WHALEN FAY HARTSTEIN COLMENARES ERNST HUNOLD BAER KUMAR JOHNSON BANDA ANDE LEE MARVINS TUVAULT PARTNERS MCEWEN SULLY KING RUSSELL DE HAAN Jak funguje funkce FIRST a LAST je nejlépe vidět na zaměstnancích z oddělení 80. V rámci tohoto oddělení 15 byli zaměstnanci v případě výpočtu sloupce WORST seřazeni vzestupně 16 podle hodnoty COMMISSION_PCT. DENSE_RANK všem řádkům v oblasti přiřadí hodnocení. FIRST omezí řádky pouze na ty, které mají hodnocení nejnižší (hodnota 0.1) a vrátí je funkci MIN, která spočítá minimální hodnotu ze sloupce SALARY. Průběh výpočtu sloupce BEST je obdobný, ale je použita funkce LAST, která vrací řádky s nejvyšším hodnocením (hodnota 0.4). Funkce MAX pak vrací maximum z těchto řádků. Naznačena je vytvořená oblast oddělení 80, minimální plat ve skupině s nejnižší provizí a maximální plat ve skupině s nejvyšší provizí FIRST_VALUE, LAST_VALUE FIRST_VALUE resp. LAST_VALUE se od předchozích funkcí odlišuje tím, že vrací první resp. poslední hodnotu celé oblasti (nikoliv výsledek aplikování funkce nad první resp. poslední ohodnocenou skupinou). Nejdříve se určí oblast, které se seřadí a poté je vrácena hodnota z prvního resp. posledního řádku. Syntax je následující (4): 15 Rozdělení na oddělení bylo dosaženo pomocí části OVER a klauzule PARTITION BY DEPARTMENT_ID 16 Seřazení bylo dosaženo pomocí ORDER BY COMMISION_PCT

35 FIRST_VALUE LAST_VALUE(VÝRAZ)RESPECT IGNORE NULLS OVER(PARTITION BY KLAUZULE) RESPECT NULLS je výchozí volba, která zajistí navrácení hodnoty z prvního resp. posledního řádku i v případě že se jedná o hodnotu NULL. Oproti tomu IGNORE NULLS zajistí vrácení první nenulové hodnoty (pokud taková existuje, jinak vrátí rovněž NULL). V následujícím příkladě chceme u každého zaměstnance znát maximální plat z jeho oddělení. K tomu je možné využít jak funkci MAX, tak funkci FIRST_VALUE. Funkce MAX nám ovšem nestačí v případě, kdy chceme ke každému zaměstnanci znát jméno zaměstnance s nejvyšším platem v oddělení. DEPARTMENT_ID, SALARY, MAX(SALARY) OVER (PARTITION BY DEPARTMENT_ID) MAX, FIRST_VALUE(SALARY) OVER (PARTITION BY DEPARTMENT_ID ORDER BY SALARY DESC) FIRST_VALUE, FIRST_VALUE(LAST_NAME) OVER (PARTITION BY DEPARTMENT_ID ORDER BY SALARY DESC) NAME_FIRST_VALUE LAST_NAME DEPARTMENT_ID SALARY MAX FIRST_VALUE MAX_NAME WHALEN WHALEN HARTSTEIN HARTSTEIN FAY HARTSTEIN RAPHAELY RAPHAELY KHOO RAPHAELY BAIDA RAPHAELY TOBIAS RAPHAELY HIMURO RAPHAELY COLMENARES RAPHAELY MAVRIS MAVRIS FRIPP FRIPP WEISS FRIPP Sloupce MAX a FIRST_VALUE obsahují stejné hodnoty, ačkoliv jsou počítány různými způsoby. Sloupec MAX_NAME obsahuje jméno zaměstnance v oddělení, který má nejvyšší plat. Funkce nejdříve rozdělí záznamy do oblastí, poté je seřadí a vrátí hodnotu sloupce SALARY z prvního řádku seřazené oblasti. Pozn.: Funkcí FIRST_VALUE resp. LAST_VALUE jsme schopni částečně nahradit funkce LEAD a LAG, které vracejí hodnoty z předchozích resp. následujících řádků. Pomocí okna vybereme z oblasti jen předchozí resp. následující řádku. Např. ROWS BETWEEN 2 PRECEEDING AND 1 PRECEEDING

36 3.4.3 NTH_VALUE Do verze 11gR2 přidal Oracle funkci NTH_VALUE, které je zobecněním funkcí FIRST_VALUE a LAST_VALUE. Funkce vrací hodnotu z n-tého řádku od konce či od začátku. Ačkoliv seřazení není vyžadováno, má tato funkce smysl pouze v případě seřazené oblasti. Syntax je následující (4): NTH_VALUE (VÝRAZ, N) FROM FIRST LAST IGNORE RESPECT NULLS OVER (PARTITION BY KLAUZULE ORDER BY KLAUZULE) Funkce jako svůj druhý parametr přijímá offset, tedy počet přeskočených řádků od konce či od začátku. To zda funkce vrací hodnotu z n-tého řádku od konce nebo od začátku, určuje modifikátor FROM FIRST LAST, jehož výchozí hodnota je FROM FIRST. FROM FIRST vrací hodnotu z n-tého řádku od začátku oblasti, FROM LAST od konce. Modifikátor IGNORE RESPECT NULLS pak určuje, zda jsou do offsetu započítány řádky, které vracejí null. Vztah s funkcemi FIRST_VALUE a LAST_VALUE je následující: FIRST VALUE (...) = NTH_VALUE (..., 1) FROM FIRST LAST VALUE (...) = NTH_VALUE (..., 1) FROM LAST V následujícím příkladě chceme porovnat plat každého zaměstnance s třemi nejvyššími platy v oddělení. DEPARTMENT_ID, SALARY, NTH_VALUE(SALARY, 1) OVER (PARTITION BY DEPARTMENT_ID ORDER BY SALARY DESC) FIRST, NTH_VALUE(SALARY, 2) OVER (PARTITION BY DEPARTMENT_ID ORDER BY SALARY DESC) SECOND, NTH_VALUE(SALARY, 3) OVER (PARTITION BY DEPARTMENT_ID ORDER BY SALARY DESC) THIRD ORDER BY DEPARTMENT_ID, SALARY DESC;

37 LAST_NAME DEPARTMENT_ID SALARY FIRST SECOND THIRD WHALEN HARTSTEIN FAY RAPHAELY KHOO BAIDA TOBIAS HIMURO COLMENARES MAVRIS FRIPP WEISS KAUFLING Sloupec SECOND a THIRD obsahuje hodnoty NULL i např. v oddělení 30, ačkoliv v oddělení pracují více než 3 zaměstnanci. NULL hodnota ve sloupci SECOND a THIRD není v oddělení 10 překvapivá. Pracuje zde jen jeden zaměstnanec a tak hodnoty druhý nejvyšší a třetí nejvyšší plat nedávají smysl. V oddělení 30 by ale tyto hodnoty měly existovat u každého řádku (zaměstnance). Výsledky SQL dotazu jsou ale správné a jsou v souladu s kapitolou Analytické klauzule u sloupců FIRST, SECOND a THIRD obsahují definici řazení ORDER BY (jinak by dotaz postrádal smysl) ale neobsahují definici okna. Výchozím oknem tak je ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW. Pokud chceme mít hodnoty sloupců SECOND a THIRD 17 v každém řádku, je nutné explicitně uvést definici okna, které bude obsahovat všechny řádky, tedy ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING. Následující SQL dotaz je důkazem. Zde se hodnoty NULL vyskytují pouze tam, kde hodnota skutečně neexistuje (oddělení obsahuje méně zaměstnanců než je n-tá hodnota). zaměstnance. 17 Sloupec FIRST neobsahuje v žádném řádku hodnotu NULL, neboť neexistuje oddělení bez

38 DEPARTMENT_ID, SALARY, NTH_VALUE(SALARY, 1) OVER (PARTITION BY DEPARTMENT_ID ORDER BY SALARY DESC) FIRST, NTH_VALUE(SALARY, 2) OVER (PARTITION BY DEPARTMENT_ID ORDER BY SALARY DESC ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) SECOND, NTH_VALUE(SALARY, 3) OVER (PARTITION BY DEPARTMENT_ID ORDER BY SALARY DESC ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) THIRD ORDER BY DEPARTMENT_ID, SALARY DESC; LAST_NAME DEPARTMENT_ID SALARY FIRST SECOND THIRD WHALEN HARTSTEIN FAY RAPHAELY KHOO BAIDA TOBIAS HIMURO COLMENARES MAVRIS FRIPP WEISS KAUFLING Statistické funkce Oracle obsahuje poměrně velké množství funkcí určených pro různé statistické výpočty. V následujícím textu jsou popsány některé nejběžnější funkce NTILE Funkce NTILE(N) rozdělí oblast na N skupin. Každý řádek je pak zařazen právě do jedné skupiny. Pokud je N větší než počet řádků v oblasti, bude počet skupin roven počtu řádků (4). Chceme například rozdělit zaměstnance do 4 platových skupin. Pro názornost vybereme pouze zaměstnance z oddělení 30. SALARY, NTILE(4) OVER (ORDER BY SALARY) NTILE WHERE DEPARTMENT_ID = 30;

XMW4 / IW4 Pokročilé SELECT dotazy. Štefan Pataky

XMW4 / IW4 Pokročilé SELECT dotazy. Štefan Pataky XMW4 / IW4 Pokročilé SELECT dotazy Štefan Pataky TOP, OFFSET-FETCH Konverze datových typů Logické funkce Práce s řetězci Poddotazy a množinové dotazy SQL Windowing Agenda TOP TOP omezení počtu vrácených

Více

KIV/ZIS cvičení 5. Tomáš Potužák

KIV/ZIS cvičení 5. Tomáš Potužák KIV/ZIS cvičení 5 Tomáš Potužák Úvod do SQL (1) SQL (Structured Query Language) je standardizovaný strukturovaný dotazovací jazyk pro práci s databází Veškeré operace v databázi se dají provádět pomocí

Více

6. blok část B Vnořené dotazy

6. blok část B Vnořené dotazy 6. blok část B Vnořené dotazy Studijní cíl Tento blok je věnován práci s vnořenými dotazy. Popisuje rozdíl mezi korelovanými a nekorelovanými vnořenými dotazy a zobrazuje jejich použití. Doba nutná k nastudování

Více

6. blok část C Množinové operátory

6. blok část C Množinové operátory 6. blok část C Množinové operátory Studijní cíl Tento blok je věnován problematice množinových operátorů a práce s množinovými operátory v jazyce SQL. Čtenáři se seznámí s operátory, UNION, a INTERSECT.

Více

Gymnázium a Střední odborná škola, Rokycany, Mládežníků 1115

Gymnázium a Střední odborná škola, Rokycany, Mládežníků 1115 Gymnázium a Střední odborná škola, Rokycany, Mládežníků 1115 Číslo projektu: Číslo šablony: Název materiálu: Ročník: Identifikace materiálu: Jméno autora: Předmět: Tématický celek: Anotace: CZ.1.07/1.5.00/34.0410

Více

Základní přehled SQL příkazů

Základní přehled SQL příkazů Základní přehled SQL příkazů SELECT Základní použití Příkaz SELECT slouží k získání dat z tabulky nebo pohledu v požadované podobě. Získání všech řádků a sloupců z tabulky SELECT * FROM Person.Contact

Více

Databázové systémy I

Databázové systémy I Databázové systémy I Přednáška č. 8 Ing. Jiří Zechmeister Fakulta elektrotechniky a informatiky jiri.zechmeister@upce.cz Skupinové a souhrnné dotazy opakování Obsah Pohledy syntaxe použití význam Vnořené

Více

Operátory ROLLUP a CUBE

Operátory ROLLUP a CUBE Operátory ROLLUP a CUBE Dotazovací jazyky, 2009 Marek Polák Martin Chytil Osnova přednášky o Analýza dat o Agregační funkce o GROUP BY a jeho problémy o Speciální hodnotový typ ALL o Operátor CUBE o Operátor

Více

Databáze SQL SELECT. David Hoksza http://siret.cz/hoksza

Databáze SQL SELECT. David Hoksza http://siret.cz/hoksza Databáze SQL SELECT David Hoksza http://siret.cz/hoksza Osnova Úvod do SQL Základní dotazování v SQL Cvičení základní dotazování v SQL Structured Query Language (SQL) SQL napodobuje jednoduché anglické

Více

Informační systémy 2008/2009. Radim Farana. Obsah. Dotazy přes více tabulek

Informační systémy 2008/2009. Radim Farana. Obsah. Dotazy přes více tabulek 5 Vysoká škola báňská Technická univerzita Ostrava Fakulta strojní, Katedra automatizační techniky a řízení 2008/2009 Radim Farana 1 Obsah Jazyk SQL, Spojení tabulek, agregační dotazy, jednoduché a složené

Více

Úvod do databázových systémů

Úvod do databázových systémů Vysoká škola báňská Technická univerzita Ostrava Fakulta elektrotechniky a informatiky Katedra informatiky Database Research Group Úvod do databázových systémů Cvičení 3 Ing. Petr Lukáš petr.lukas@vsb.cz

Více

Úvod do databázových systémů

Úvod do databázových systémů Vysoká škola báňská Technická univerzita Ostrava Fakulta elektrotechniky a informatiky Úvod do databázových systémů Cvičení 3 Ing. Petr Lukáš petr.lukas@vsb.cz Ostrava, 2014 Opakování 4 fáze vytváření

Více

Úvod do databázových systémů

Úvod do databázových systémů Vysoká škola báňská Technická univerzita Ostrava Fakulta elektrotechniky a informatiky Úvod do databázových systémů Cvičení 5 Ing. Petr Lukáš petr.lukas@vsb.cz Ostrava, 2014 Opakování K čemu se používají

Více

2. blok část B Základní syntaxe příkazů SELECT, INSERT, UPDATE, DELETE

2. blok část B Základní syntaxe příkazů SELECT, INSERT, UPDATE, DELETE 2. blok část B Základní syntaxe příkazů SELECT, INSERT, UPDATE, DELETE Studijní cíl Tento blok je věnován základní syntaxi příkazu SELECT, pojmům projekce a restrikce. Stručně zde budou představeny příkazy

Více

Jaký je rozdíl v definicicíh VARCHAR2(20 BYTE) a VARCHAR2(20 CHAR):

Jaký je rozdíl v definicicíh VARCHAR2(20 BYTE) a VARCHAR2(20 CHAR): Mezi příkazy pro manipulaci s daty (DML) patří : 1. SELECT 2. ALTER 3. DELETE 4. REVOKE Jaké vlastnosti má identifikující relace: 1. Je relace, která se využívá pouze v případě modelovaní odvozených entit

Více

Dotazy tvorba nových polí (vypočítané pole)

Dotazy tvorba nových polí (vypočítané pole) Téma 2.4 Dotazy tvorba nových polí (vypočítané pole) Pomocí dotazu lze také vytvářet nová pole, která mají vazbu na již existující pole v databázi. Vznikne tedy nový sloupec, který se počítá podle vzorce.

Více

Databázové systémy. Cvičení 6: SQL

Databázové systémy. Cvičení 6: SQL Databázové systémy Cvičení 6: SQL Co je SQL? SQL = Structured Query Language SQL je standardním (ANSI, ISO) textovým počítačovým jazykem SQL umožňuje jednoduchým způsobem přistupovat k datům v databázi

Více

Kurz Databáze. Obsah. Dotazy. Zpracování dat. Doc. Ing. Radim Farana, CSc.

Kurz Databáze. Obsah. Dotazy. Zpracování dat. Doc. Ing. Radim Farana, CSc. 1 Kurz Databáze Zpracování dat Doc. Ing. Radim Farana, CSc. Obsah Druhy dotazů, tvorba dotazu, prostředí QBE (Query by Example). Realizace základních relačních operací selekce, projekce a spojení. Agregace

Více

Gymnázium a Střední odborná škola, Rokycany, Mládežníků 1115

Gymnázium a Střední odborná škola, Rokycany, Mládežníků 1115 Gymnázium a Střední odborná škola, Rokycany, Mládežníků 1115 Číslo projektu: Číslo šablony: Název materiálu: Ročník: Identifikace materiálu: Jméno autora: Předmět: Tématický celek: Anotace: CZ.1.07/1.5.00/34.0410

Více

12. blok Pokročilé konstrukce SQL dotazů - část II

12. blok Pokročilé konstrukce SQL dotazů - část II 12. blok Pokročilé konstrukce SQL dotazů - část II Studijní cíl Tento blok je věnován pokročilým konstrukcím SQL dotazů, které umožní psát efektivní kód. Pozornost je věnována vytváření pohledů v rámci

Více

Databáze I. Přednáška 6

Databáze I. Přednáška 6 Databáze I Přednáška 6 SQL aritmetika v dotazech SQL lze přímo uvádět aritmetické výrazy násobení, dělení, sčítání, odčítání příklad z minulé přednášky: zdvojnásobení platu všem zaměstnancům UPDATE ZAMESTNANEC

Více

Gymnázium a Střední odborná škola, Rokycany, Mládežníků 1115

Gymnázium a Střední odborná škola, Rokycany, Mládežníků 1115 Gymnázium a Střední odborná škola, Rokycany, Mládežníků 1115 Číslo projektu: Číslo šablony: Název materiálu: Ročník: Identifikace materiálu: Jméno autora: Předmět: Tématický celek: Anotace: CZ.1.07/1.5.00/34.0410

Více

Ukládání a vyhledávání XML dat

Ukládání a vyhledávání XML dat XML teorie a praxe značkovacích jazyků (4IZ238) Jirka Kosek Poslední modifikace: $Date: 2014/12/04 19:41:24 $ Obsah Ukládání XML dokumentů... 3 Ukládání XML do souborů... 4 Nativní XML databáze... 5 Ukládání

Více

5. blok Souhrnné a skupinové dotazy

5. blok Souhrnné a skupinové dotazy 5. blok Souhrnné a skupinové dotazy Studijní cíl Tento blok je věnován základům při vytváření souhrnných a skupinových dotazů s využitím agregačních funkcí SUM(), AVG(), MIN(), MAX() a COUNT() a klauzulí

Více

Marketingová komunikace. 2. soustředění. Mgr. Pavel Vávra 9103@mail.vsfs.cz. Kombinované studium Skupina N9KMK1aPH/N9KMK1bPH (um1a1ph/um1b1ph)

Marketingová komunikace. 2. soustředění. Mgr. Pavel Vávra 9103@mail.vsfs.cz. Kombinované studium Skupina N9KMK1aPH/N9KMK1bPH (um1a1ph/um1b1ph) Marketingová komunikace Kombinované studium Skupina N9KMK1aPH/N9KMK1bPH (um1a1ph/um1b1ph) 2. soustředění Mgr. Pavel Vávra 9103@mail.vsfs.cz http://vavra.webzdarma.cz/home/index.htm Minulé soustředění úvod

Více

4. blok část A Logické operátory

4. blok část A Logické operátory 4. blok část A Logické operátory Studijní cíl Tento blok je věnován představení logických operátorů AND, OR, NOT v jazyce SQL a práce s nimi. Doba nutná k nastudování 1-2 hodiny Průvodce studiem Při studiu

Více

KIV/ZIS - SELECT, opakování

KIV/ZIS - SELECT, opakování KIV/ZIS - SELECT, opakování soubor 4_databaze.accdb (lze použít ten z minula) http://home.zcu.cz/~krauz/zis/4_databaze.accdb minule: SELECT FROM WHERE ORDER BY SELECT sloupce jaké sloupce chceme vybrat

Více

Informační systémy ve zdravotnictví. 10. cvičení

Informační systémy ve zdravotnictví. 10. cvičení Vysoká škola báňská Technická univerzita Ostrava Fakulta elektrotechniky a informatiky Informační systémy ve zdravotnictví 10. cvičení Ing. Petr Lukáš petr.lukas@nativa.cz Ostrava, 2014 Opakování K čemu

Více

Databázové systémy a SQL

Databázové systémy a SQL Databázové systémy a SQL Lekce 2 Daniel Klimeš Autor, Název akce 1 Operátory a funkce +,- Sčítání, odečítání *,/ Násobení, dělení =, , >=,

Více

Návrh a tvorba WWW stránek 1/14. PHP a databáze

Návrh a tvorba WWW stránek 1/14. PHP a databáze Návrh a tvorba WWW stránek 1/14 PHP a databáze nejčastěji MySQL součástí balíčků PHP navíc podporuje standard ODBC PHP nemá žádné šablony pro práci s databází princip práce s databází je stále stejný opakované

Více

Dotazování v relačním modelu a SQL

Dotazování v relačním modelu a SQL Databázové systémy Dotazování v relačním modelu a SQL Petr Krajča Katedra informatiky Univerzita Palackého v Olomouci Petr Krajča (UP) KMI/YDATA: Přednáška II. 14. říjen, 2016 1 / 35 Opakování Relační

Více

DATA CUBE. Mgr. Jiří Helmich

DATA CUBE. Mgr. Jiří Helmich DATA CUBE Mgr. Jiří Helmich Analytické kroky formulace dotazu analýza extrakce dat vizualizace Motivace n-sloupcová tabulka v Excelu vs. sloupcový graf Dimensionality reduction n dimenzí data obecně uspořádána

Více

Co bude výsledkem mého SELECTu? RNDr. David Gešvindr MVP: Data Platform MCSE: Data Platform MCSD: Windows Store MCT

Co bude výsledkem mého SELECTu? RNDr. David Gešvindr MVP: Data Platform MCSE: Data Platform MCSD: Windows Store MCT Co bude výsledkem mého SELECTu? RNDr. David Gešvindr MVP: Data Platform MCSE: Data Platform MCSD: Windows Store MCT david@wug.cz @gesvindr Logické zpracování dotazu Jazyk T-SQL je deklarativní Popisujeme,

Více

Databázové systémy. - SQL * definice dat * aktualizace * pohledy. Tomáš Skopal

Databázové systémy. - SQL * definice dat * aktualizace * pohledy. Tomáš Skopal Databázové systémy - SQL * definice dat * aktualizace * pohledy Tomáš Skopal Osnova přednášky definice dat definice (schémat) tabulek a integritních omezení CREATE TABLE změna definice schématu ALTER TABLE

Více

MS Access Dotazy SQL

MS Access Dotazy SQL MS Access Dotazy SQL Dotaz SELECT Michal Nykl Materiály pro cvičení KIV/ZIS 2012 Červeně značené výsledky odpovídají souboru cv4_testovacidatabaze250312.accdb Dotaz SELECT - struktura SELECT [ DISTINCT

Více

8. Posloupnosti, vektory a matice

8. Posloupnosti, vektory a matice . jsou užitečné matematické nástroje. V Mathcadu je často používáme například k rychlému zápisu velkého počtu vztahů s proměnnými parametry, ke zpracování naměřených hodnot, k výpočtům lineárních soustav

Více

Tiskové sestavy. Zdroj záznamu pro tiskovou sestavu. Průvodce sestavou. Použití databází

Tiskové sestavy. Zdroj záznamu pro tiskovou sestavu. Průvodce sestavou. Použití databází Tiskové sestavy Tiskové sestavy se v aplikaci Access používají na finální tisk informací z databáze. Tisknout se dají všechny objekty, které jsme si vytvořili, ale tiskové sestavy slouží k tisku záznamů

Více

Dotazovací jazyky I. Datová krychle. Soběslav Benda

Dotazovací jazyky I. Datová krychle. Soběslav Benda Dotazovací jazyky I Datová krychle Soběslav Benda Obsah Úvod do problematiky Varianty přístupu uživatelů ke zdrojům dat OLTP vs. OLAP Datová analýza Motivace Vytvoření křížové tabulky Datová krychle Teorie

Více

Popis ovládání. Po přihlášení do aplikace se objeví navigátor. Navigátor je stromově seřazen a slouží pro přístup ke všem oknům celé aplikace.

Popis ovládání. Po přihlášení do aplikace se objeví navigátor. Navigátor je stromově seřazen a slouží pro přístup ke všem oknům celé aplikace. Popis ovládání 1. Úvod Tento popis má za úkol seznámit uživatele se základními principy ovládání aplikace. Ovládání je možné pomocí myši, ale všechny činnosti jsou dosažitelné také pomocí klávesnice. 2.

Více

Úvod do databází. Modelování v řízení. Ing. Petr Kalčev

Úvod do databází. Modelování v řízení. Ing. Petr Kalčev Úvod do databází Modelování v řízení Ing. Petr Kalčev Co je databáze? Množina záznamů a souborů, které jsou organizovány za určitým účelem. Jaké má mít přínosy? Rychlost Spolehlivost Přesnost Bezpečnost

Více

Dotaz se souhrny a dotaz křížový

Dotaz se souhrny a dotaz křížový Téma 3.1. Dotaz se souhrny a dotaz křížový Pomocí dotazů lze také vytvářet skupinové výpočty (skupinové sumarizace). Tyto přehledy lze tvořit dvěma způsoby: 1. ponecháme původní strukturu Výběrového dotazu

Více

KAPITOLA 9 - POKROČILÁ PRÁCE S TABULKOVÝM PROCESOREM

KAPITOLA 9 - POKROČILÁ PRÁCE S TABULKOVÝM PROCESOREM KAPITOLA 9 - POKROČILÁ PRÁCE S TABULKOVÝM PROCESOREM CÍLE KAPITOLY Využívat pokročilé možnosti formátování, jako je podmíněné formátování, používat vlastní formát čísel a umět pracovat s listy. Používat

Více

Tabulkový procesor. Základní rysy

Tabulkový procesor. Základní rysy Tabulkový procesor Tabulkový procesor je počítačový program zpracovávající data uložená v buňkách tabulky. Program umožňuje použití vzorců pro práci s daty a zobrazuje výsledné hodnoty podle vstupních

Více

Databázové systémy a SQL

Databázové systémy a SQL Databázové systémy a SQL Lekce 2 Daniel Klimeš Autor, Název akce 1 CREATE TABLE Vytvoření tabulky (ORACLE) DDL příkazem v grafickém prostředí CREATE TABLE jmeno ( text VARCHAR2(200), cislo NUMBER(9,1),

Více

Marketingová komunikace. 2. a 3. soustředění. Mgr. Pavel Vávra 9103@mail.vsfs.cz. Kombinované studium Skupina N9KMK3PH (vm3aph)

Marketingová komunikace. 2. a 3. soustředění. Mgr. Pavel Vávra 9103@mail.vsfs.cz. Kombinované studium Skupina N9KMK3PH (vm3aph) Marketingová komunikace Kombinované studium Skupina N9KMK3PH (vm3aph) 2. a 3. soustředění Mgr. Pavel Vávra 9103@mail.vsfs.cz http://vavra.webzdarma.cz/home/index.htm Co nás čeká: 2. soustředění 16.1.2009

Více

Úvod do databázových systémů 3. cvičení

Úvod do databázových systémů 3. cvičení Vysoká škola báňská Technická univerzita Ostrava Fakulta elektrotechniky a informatiky Úvod do databázových systémů 3. cvičení Ing. Petr Lukáš petr.lukas@nativa.cz Ostrava, 2012 Klauzule příkazu Klauzule

Více

45 Plánovací kalendář

45 Plánovací kalendář 45 Plánovací kalendář Modul Správa majetku slouží ke tvorbě obecných ročních plánů činností organizace. V rámci plánu je třeba definovat oblasti činností, tj. oblasti, ve kterých je možné plánovat. Každá

Více

Obsah. SQL konstrukce select join Rekurze (rekurzivní with) Analytické funkce, group by Pivoting

Obsah. SQL konstrukce select join Rekurze (rekurzivní with) Analytické funkce, group by Pivoting Cvičení 5 SQL 1 Obsah SQL konstrukce select join Rekurze (rekurzivní with) Analytické funkce, group by Pivoting 2 2 Oracle Model 3 3 Načtení modelu z katalogu Napojení: IP adresa: 193.85.191.165 Port:

Více

Multi-dimensional expressions

Multi-dimensional expressions Multi-dimensional expressions Query sent to cube / returned from cube jazyk pro multidimenzionální dotazy ekvivalent SQL pro multidimenzionální databáze je jen prostředkem pro přístup k datům jako SQL

Více

Databázové systémy Cvičení 5.2

Databázové systémy Cvičení 5.2 Databázové systémy Cvičení 5.2 SQL jako jazyk pro definici dat Detaily zápisu integritních omezení tabulek Integritní omezení tabulek kromě integritních omezení sloupců lze zadat integritní omezení jako

Více

SQL SQL-SELECT. Informační a znalostní systémy. Informační a znalostní systémy SQL- SELECT

SQL SQL-SELECT. Informační a znalostní systémy. Informační a znalostní systémy SQL- SELECT -SELECT Informační a znalostní systémy 1 - Structured Query Language norma pro dotazování nad relačními databáze díky přenositelnosti- rozmach relačních databází zahrnuje jak dotazování na data, tak změny

Více

Gymnázium a Střední odborná škola, Rokycany, Mládežníků 1115

Gymnázium a Střední odborná škola, Rokycany, Mládežníků 1115 Gymnázium a Střední odborná škola, Rokycany, Mládežníků 1115 Číslo projektu: Číslo šablony: Název materiálu: Ročník: Identifikace materiálu: Jméno autora: Předmět: Tématický celek: CZ.1.07/1.5.00/34.0410

Více

8 Třídy, objekty, metody, předávání argumentů metod

8 Třídy, objekty, metody, předávání argumentů metod 8 Třídy, objekty, metody, předávání argumentů metod Studijní cíl Tento studijní blok má za cíl pokračovat v základních prvcích jazyka Java. Konkrétně bude věnována pozornost třídám a objektům, instančním

Více

Novinky v PostgreSQL 9.4. Tomáš Vondra, 2ndQuadrant

Novinky v PostgreSQL 9.4. Tomáš Vondra, 2ndQuadrant Novinky v PostgreSQL 9.4 Tomáš Vondra, 2ndQuadrant (tomas@2ndquadrant.com) http://blog.pgaddict.com (tomas@pgaddict.com) vývojáři JSONB aggregate expressions (FILTER) SELECT a, SUM(CASE WHEN b < 10 THEN

Více

Sada 1 - PHP. 15. Výběr dat z databáze. Příkaz SELECT

Sada 1 - PHP. 15. Výběr dat z databáze. Příkaz SELECT S třední škola stavební Jihlava Sada 1 - PHP 15. Výběr dat z databáze. Příkaz SELECT Digitální učební materiál projektu: SŠS Jihlava šablony registrační číslo projektu:cz.1.09/1.5.00/34.0284 Šablona: III/2

Více

RELAČNÍ DATABÁZE ACCESS

RELAČNÍ DATABÁZE ACCESS RELAČNÍ DATABÁZE ACCESS 1. Úvod... 2 2. Základní pojmy... 3 3. Vytvoření databáze... 5 4. Základní objekty databáze... 6 5. Návrhové zobrazení tabulky... 7 6. Vytváření tabulek... 7 6.1. Vytvoření tabulky

Více

DATABÁZE A SYSTÉMY PRO UCHOVÁNÍ DAT 61 DATABÁZE - ACCESS. (příprava k vykonání testu ECDL Modul 5 Databáze a systémy pro zpracování dat)

DATABÁZE A SYSTÉMY PRO UCHOVÁNÍ DAT 61 DATABÁZE - ACCESS. (příprava k vykonání testu ECDL Modul 5 Databáze a systémy pro zpracování dat) DATABÁZE A SYSTÉMY PRO UCHOVÁNÍ DAT 61 DATABÁZE - ACCESS (příprava k vykonání testu ECDL Modul 5 Databáze a systémy pro zpracování dat) DATABÁZE A SYSTÉMY PRO UCHOVÁNÍ DAT 62 Databáze a systémy pro uchování

Více

Databázové systémy. Datová integrita + základy relační algebry. 4.přednáška

Databázové systémy. Datová integrita + základy relační algebry. 4.přednáška Databázové systémy Datová integrita + základy relační algebry 4.přednáška Datová integrita Datová integrita = popisuje pravidla, pomocí nichž hotový db. systém zajistí, že skutečná fyzická data v něm uložená

Více

Jazyk PL/SQL Úvod, blok

Jazyk PL/SQL Úvod, blok Jazyk PL/SQL Úvod, blok 1 Bc. Tomáš Romanovský Procedural Language for Structured Query Language Součást systému Oracle, rozšíření SQL o procedurální rysy Prostředky pro vytváření a spouštění programových

Více

Marketingová komunikace. 3. soustředění. Mgr. Pavel Vávra 9103@mail.vsfs.cz. Kombinované studium Skupina N9KMK3PH (vm3bph)

Marketingová komunikace. 3. soustředění. Mgr. Pavel Vávra 9103@mail.vsfs.cz. Kombinované studium Skupina N9KMK3PH (vm3bph) Marketingová komunikace Kombinované studium Skupina N9KMK3PH (vm3bph) 3. soustředění Mgr. Pavel Vávra 9103@mail.vsfs.cz http://vavra.webzdarma.cz/home/index.htm Zdroje Studijní materiály Heleny Palovské

Více

VZORCE A VÝPOČTY. Autor: Mgr. Dana Kaprálová. Datum (období) tvorby: září, říjen 2013. Ročník: sedmý

VZORCE A VÝPOČTY. Autor: Mgr. Dana Kaprálová. Datum (období) tvorby: září, říjen 2013. Ročník: sedmý Autor: Mgr. Dana Kaprálová VZORCE A VÝPOČTY Datum (období) tvorby: září, říjen 2013 Ročník: sedmý Vzdělávací oblast: Informatika a výpočetní technika 1 Anotace: Žáci se seznámí se základní obsluhou tabulkového

Více

Úvod do databázových systémů

Úvod do databázových systémů Vysoká škola báňská Technická univerzita Ostrava Fakulta elektrotechniky a informatiky Úvod do databázových systémů Cvičení 8 Ing. Petr Lukáš petr.lukas@vsb.cz Ostrava, 2014 Opakování Entita Entitní typ

Více

Databáze. Velmi stručný a zjednodušený úvod do problematiky databází pro programátory v Pythonu. Bedřich Košata

Databáze. Velmi stručný a zjednodušený úvod do problematiky databází pro programátory v Pythonu. Bedřich Košata Databáze Velmi stručný a zjednodušený úvod do problematiky databází pro programátory v Pythonu Bedřich Košata K čemu jsou databáze Ukládání dat ve strukturované podobě Možnost ukládat velké množství dat

Více

Osnova je orientační pro FIT, u FEKTu se dá předpokládat, že budou zohledněny předchozí znalosti studentů, kde většina s databází nikdy přímo

Osnova je orientační pro FIT, u FEKTu se dá předpokládat, že budou zohledněny předchozí znalosti studentů, kde většina s databází nikdy přímo 1 Osnova je orientační pro FIT, u FEKTu se dá předpokládat, že budou zohledněny předchozí znalosti studentů, kde většina s databází nikdy přímo nepracovala. 2 3 4 5 6 7 8 9 10 11 12 Autor zadání je doc.

Více

B0M33BDT Technologie pro velká data. Supercvičení SQL, Python, Linux

B0M33BDT Technologie pro velká data. Supercvičení SQL, Python, Linux B0M33BDT Technologie pro velká data Supercvičení SQL, Python, Linux Sergej Stamenov, Jan Hučín 18. 10. 2017 Osnova cvičení Linux SQL Python 2 SQL pro uživatele aneb co potřebuje znát a umět bigdatový uživatel:

Více

Gymnázium a Střední odborná škola, Rokycany, Mládežníků 1115

Gymnázium a Střední odborná škola, Rokycany, Mládežníků 1115 Gymnázium a Střední odborná škola, Rokycany, Mládežníků 1115 Číslo projektu: Číslo šablony: Název materiálu: Ročník: Identifikace materiálu: Jméno autora: Předmět: Tématický celek: Anotace: CZ.1.07/1.5.00/34.0410

Více

Informační systémy ve zdravotnictví. 6. cvičení

Informační systémy ve zdravotnictví. 6. cvičení Vysoká škola báňská Technická univerzita Ostrava Fakulta elektrotechniky a informatiky Informační systémy ve zdravotnictví 6. cvičení Ing. Petr Lukáš petr.lukas@nativa.cz Ostrava, 2014 Opakování Relace

Více

5. Lokální, vázané a globální extrémy

5. Lokální, vázané a globální extrémy 5 Lokální, vázané a globální extrémy Studijní text Lokální extrémy 5 Lokální, vázané a globální extrémy Definice 51 Řekneme, že f : R n R má v bodě a Df: 1 lokální maximum, když Ka, δ Df tak, že x Ka,

Více

Instalace. Produkt je odzkoušen pro MS SQL server 2008 a Windows XP a Windows 7. Pro jiné verze SQL server a Windows nebyl testován.

Instalace. Produkt je odzkoušen pro MS SQL server 2008 a Windows XP a Windows 7. Pro jiné verze SQL server a Windows nebyl testován. Instalace Produkt se neinstaluje. Stačí soubor uložit na libovolné místo na Vašem počítací (klikněte pravým tlačítkem a dejte 'uložit cíl jako ), pak jen spustit. Požadavky na software Produkt je odzkoušen

Více

Úvod do databázových systémů

Úvod do databázových systémů Vysoká škola báňská Technická univerzita Ostrava Fakulta elektrotechniky a informatiky Úvod do databázových systémů Cvičení 4 Ing. Petr Lukáš petr.lukas@vsb.cz Ostrava, 2014 Opakování Klauzule příkazu

Více

KIV/ZIS cvičení 6. Tomáš Potužák

KIV/ZIS cvičení 6. Tomáš Potužák KIV/ZIS cvičení 6 Tomáš Potužák Pokračování SQL Klauzule GROUP BY a dotazy nad více tabulkami Slučování záznamů do skupin (1) Chceme zjistit informace obsažené ve více záznamech najednou Klauzule GROUP

Více

Databázové systémy I. 4. přednáška

Databázové systémy I. 4. přednáška Databázové systémy I. 4. přednáška Co nás dnes čeká Základy relační algebry Anatomie příkazu SELECT Srovnávací operátory pro klauzuli WHERE Agregační funkce Jednořádkové funkce Víceřádkové funkce Relační

Více

PG 9.5 novinky ve vývoji aplikací

PG 9.5 novinky ve vývoji aplikací PG 9.5 novinky ve vývoji aplikací P2D2 2016 Antonín Houska 18. února 2016 Část I GROUPING SETS, ROLLUP, CUBE Agregace Seskupení řádků tabulky (joinu) do podmnožin podle určitého kĺıče. Za každou podmnožinu

Více

Jazyk SQL 1. Michal Valenta. Katedra softwarového inženýrství FIT České vysoké učení technické v Praze c Michal Valenta, 2012 BI-DBS, ZS 2011/12

Jazyk SQL 1. Michal Valenta. Katedra softwarového inženýrství FIT České vysoké učení technické v Praze c Michal Valenta, 2012 BI-DBS, ZS 2011/12 Jazyk SQL 1 Michal Valenta Katedra softwarového inženýrství FIT České vysoké učení technické v Praze c Michal Valenta, 2012 BI-DBS, ZS 2011/12 https://edux.fit.cvut.cz/courses/bi-dbs/ Michal Valenta (FIT

Více

Jak používat statistiky položkové v systému WinShop Std.

Jak používat statistiky položkové v systému WinShop Std. Jak používat statistiky položkové v systému WinShop Std. Systém WinShop Std. využívá k zápisům jednotlivých realizovaných pohybů (příjem zboží, dodací listy, výdejky, převodky, prodej zboží na pokladně..)

Více

Univerzita Pardubice Fakulta ekonomicko-správní. Analytické funkce Oracle. Josef Pirkl

Univerzita Pardubice Fakulta ekonomicko-správní. Analytické funkce Oracle. Josef Pirkl Univerzita Pardubice Fakulta ekonomicko-správní Analytické funkce Oracle Josef Pirkl Bakalářská práce 2008 Poděkování práce. Děkuji Ing. Miloslavu Hubovi, PhD. za hodnotné rady a odborné vedení během mé

Více

Databázové systémy Cvičení 5.3

Databázové systémy Cvičení 5.3 Databázové systémy Cvičení 5.3 SQL jako jazyk pro manipulaci s daty SQL jako jazyk pro manipulaci s daty Aktualizace dat v SQL úprava záznamů v relacích (tabulkách) vložení záznamu INSERT INTO oprava záznamu

Více

Kontingenční tabulky v MS Excel 2010

Kontingenční tabulky v MS Excel 2010 Kontingenční tabulky v MS Excel 2010 Autor: RNDr. Milan Myšák e-mail: milan.mysak@konero.cz Obsah 1 Vytvoření KT... 3 1.1 Data pro KT... 3 1.2 Tvorba KT... 3 2 Tvorba KT z dalších zdrojů dat... 5 2.1 Data

Více

Inovace a zkvalitnění výuky prostřednictvím ICT. Základní seznámení s MySQL Ing. Kotásek Jaroslav

Inovace a zkvalitnění výuky prostřednictvím ICT. Základní seznámení s MySQL Ing. Kotásek Jaroslav Střední průmyslová škola a Vyšší odborná škola technická Brno, Sokolská 1 Šablona: Název: Téma: Autor: Číslo: Anotace: Inovace a zkvalitnění výuky prostřednictvím ICT Databáze Základní seznámení s MySQL

Více

8.2 Používání a tvorba databází

8.2 Používání a tvorba databází 8.2 Používání a tvorba databází Slide 1 8.2.1 Základní pojmy z oblasti relačních databází Slide 2 Databáze ~ Evidence lidí peněz věcí... výběry, výpisy, početní úkony Slide 3 Pojmy tabulka, pole, záznam

Více

Řazení řádků ve vzestupném pořadí (A až Z nebo 0 až 9) nebo sestupném pořadí (Z až A nebo 9 až 0)

Řazení řádků ve vzestupném pořadí (A až Z nebo 0 až 9) nebo sestupném pořadí (Z až A nebo 9 až 0) Řazení oblasti Řazení řádků ve vzestupném pořadí (A až Z nebo 0 až 9) nebo sestupném pořadí (Z až A nebo 9 až 0) 1. Klepněte na buňku ve sloupci, podle kterého chcete řádek seřadit. 2. Klepněte na tlačítko

Více

DJ2 rekurze v SQL. slajdy k přednášce NDBI001. Jaroslav Pokorný

DJ2 rekurze v SQL. slajdy k přednášce NDBI001. Jaroslav Pokorný DJ2 rekurze v SQL slajdy k přednášce NDBI001 Jaroslav Pokorný 1 Obsah 1. Úvod 2. Tvorba rekurzívních dotazů 3. Počítaní v rekurzi 4. Rekurzívní vyhledávání 5. Logické hierarchie 6. Zastavení rekurze 7.

Více

1. Umístěte kurzor do sloupce Datový typ na řádek s polem, ve kterém vytvořit chcete seznam.

1. Umístěte kurzor do sloupce Datový typ na řádek s polem, ve kterém vytvořit chcete seznam. 10.6.7 POSTUP TVORBY KOMBINOVANÉHO SEZNAMU 1. Umístěte kurzor do sloupce Datový typ na řádek s polem, ve kterém vytvořit chcete seznam. 2. V rozbalovací nabídce se seznamem datových typů vyberte volbu

Více

Stored Procedures & Database Triggers, Tiskové sestavy v Oracle Reports

Stored Procedures & Database Triggers, Tiskové sestavy v Oracle Reports , Marek Rychlý Vysoké učení technické v Brně Fakulta informačních technologií Ústav informačních systémů Demo-cvičení pro IDS 9. dubna 2014 Marek Rychlý Stored Procedures & Database Triggers, Demo-cvičení

Více

Řešení úloh z TSP MU SADY S 1

Řešení úloh z TSP MU SADY S 1 Řešení úloh z TSP MU SADY S 1 projekt RESENI-TSP.CZ úlohy jsou vybírány z dříve použitých TSP MU autoři řešení jsou zkušení lektoři vzdělávací agentury Kurzy-Fido.cz Masarykova univerzita nabízí uchazečům

Více

Excel tabulkový procesor

Excel tabulkový procesor Pozice aktivní buňky Excel tabulkový procesor Označená aktivní buňka Řádek vzorců zobrazuje úplný a skutečný obsah buňky Typ buňky řetězec, číslo, vzorec, datum Oprava obsahu buňky F2 nebo v řádku vzorců,

Více

Jazyk SQL 2. Michal Valenta. Katedra softwarového inženýrství FIT České vysoké učení technické v Praze c M.Valenta, 2011 BI-DBS, ZS 2011/12

Jazyk SQL 2. Michal Valenta. Katedra softwarového inženýrství FIT České vysoké učení technické v Praze c M.Valenta, 2011 BI-DBS, ZS 2011/12 Jazyk SQL 2 Michal Valenta Katedra softwarového inženýrství FIT České vysoké učení technické v Praze c M.Valenta, 2011 BI-DBS, ZS 2011/12 https://edux.fit.cvut.cz/courses/bi-dbs/ M.Valenta (FIT ČVUT) Jazyk

Více

MySQL sežere vaše data

MySQL sežere vaše data MySQL sežere vaše data David Karban @davidkarban AWS Certified http://davidkarban.cz/ It s not a bug, it s a feature syndrome Pravděpodobně znáte indexy. Urychlují dotazy. Mohou být řazené, vzestupně i

Více

Informační systémy 2006/2007

Informační systémy 2006/2007 13 Vysoká škola báňská Technická univerzita Ostrava Fakulta strojní, Katedra automatizační techniky a řízení Informační systémy 2006/2007 Ivan Kedroň 1 Obsah Analytické nástroje SQL serveru. OLAP analýza

Více

Excel - pokračování. Př. Porovnání cestovních kanceláří ohraničení tabulky, úprava šířky sloupců, sestrojení grafu

Excel - pokračování. Př. Porovnání cestovních kanceláří ohraničení tabulky, úprava šířky sloupců, sestrojení grafu Excel - pokračování Př. Porovnání cestovních kanceláří ohraničení tabulky, úprava šířky sloupců, sestrojení grafu Př. Analýza prodeje CD základní jednoduché vzorce karta Domů Př. Skoky do dálky - funkce

Více

Databázové systémy a SQL

Databázové systémy a SQL Databázové systémy a SQL Daniel Klimeš Autor, Název akce 1 About me Daniel Klimeš Vzdělání: Obecná biologie PGS: onkologie Specializace: klinické databáze Databáze ORACLE klimes@iba.muni.cz Kotlářská 2,

Více

Databáze I. Přednáška 4

Databáze I. Přednáška 4 Databáze I Přednáška 4 Definice dat v SQL Definice tabulek CREATE TABLE jméno_tab (jm_atributu typ [integr. omez.], jm_atributu typ [integr. omez.], ); integritní omezení lze dodefinovat později Definice

Více

Vkládání, aktualizace, mazání

Vkládání, aktualizace, mazání Kapitola 4 Vkládání, aktualizace, mazání Tématem několika předchozích kapitol byly základní techniky pokládání dotazů, které se všechny zaměřovaly na zisk dat z databáze. V kapitole čtvrté půjde o něco

Více

KOMBINATORIKA (4.ročník I.pololetí DE, 2.ročník I.pololetí NS)

KOMBINATORIKA (4.ročník I.pololetí DE, 2.ročník I.pololetí NS) KOMBINATORIKA (4.ročník I.pololetí DE,.ročník I.pololetí NS) Kombinatorika je část matematiky, zabývající se uspořádáváním daných prvků podle jistých pravidel do určitých skupin a výpočtem množství těchto

Více

Copyright 2013 Martin Kaňka;

Copyright 2013 Martin Kaňka; Copyright 2013 Martin Kaňka; http://dalest.kenynet.cz Popis aplikace Hlavním cílem aplikace Cubix je výpočet a procvičení výpočtu objemu a povrchu těles složených z kostek. Existují tři obtížnosti úkolů

Více

Databázové systémy Cvičení 5

Databázové systémy Cvičení 5 Databázové systémy Cvičení 5 Dotazy v jazyce SQL SQL jako jazyk pro manipulaci s daty Aktualizace dat v SQL úprava záznamů v relacích (tabulkách) vložení záznamu INSERT INTO oprava záznamu UPDATE vymazání

Více

Oborové číslo Hodnocení - část A Hodnocení - část B Hodnocení - část A+B

Oborové číslo Hodnocení - část A Hodnocení - část B Hodnocení - část A+B PŘIJÍMACÍ TEST Z INFORMATIKY A MATEMATIKY NAVAZUJÍCÍ MAGISTERSKÉ STUDIUM V OBORU APLIKOVANÁ INFORMATIKA FAKULTA INFORMATIKY A MANAGEMENTU UNIVERZITY HRADEC KRÁLOVÉ ČÁST A Oborové číslo Hodnocení - část

Více

DATABÁZE MS ACCESS 2010

DATABÁZE MS ACCESS 2010 DATABÁZE MS ACCESS 2010 KAPITOLA 5 PRAKTICKÁ ČÁST TABULKY POPIS PROSTŘEDÍ Spuštění MS Access nadefinovat název databáze a cestu k uložení databáze POPIS PROSTŘEDÍ Nahoře záložky: Soubor (k uložení souboru,

Více

Microsoft Access. Typy objektů databáze: Vytvoření a návrh nové tabulky. Vytvoření tabulky v návrhovém zobrazení

Microsoft Access. Typy objektů databáze: Vytvoření a návrh nové tabulky. Vytvoření tabulky v návrhovém zobrazení Microsoft Access Databáze je seskupení většího množství údajů, které mají určitou logiku a lze je určitým způsobem vyhodnocovat, zpracovávat a analyzovat Access je jedním z programů určených pro zpracování

Více