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

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

Fakulta elektrotechniky a informatiky

Podobné prezentace


Prezentace na téma: "Fakulta elektrotechniky a informatiky"— Transkript prezentace:

1 Fakulta elektrotechniky a informatiky jiri.zechmeister@upce.cz
Databázové systémy I Přednáška č. 7 Ing. Jiří Zechmeister Fakulta elektrotechniky a informatiky

2 Databázové systémy 1 - př. 7
Obsah Vnitřní a vnější spojení tabulek Opakování Spojování více než 2 tabulek (SQL 92) Vlastní spojení Alias Logické operátory Funkce Databázové systémy 1 - př. 7

3 Spojení tabulek – syntaxe SELECT
Vnitřní spojení INNER INNER JOIN, JOIN Do výsledku budou zahrnuty pouze ty řádky, pro které byla nalezena odpovídající hodnota v druhé tabulce. Vnější spojení OUTER Ve výsledku budou i ty řádky, pro které nebyly nalezeny odpovídající hodnoty v druhé tabulce. Pravé (RIGHT JOIN) .. Ve výsledku budou všechny řádky z pravé (druhé tabulky). Nebyl-li nalezen aspoň jeden odpovídající řádek v levé tabulce, budou ve výsledku hodnoty NULL ve všech sloupcích z první tabulky. Levé (LEFT JOIN) .. Ve výsledku budou všechny řádky z levé (první tabulky). Nebyl-li nalezen aspoň jeden odpovídající řádek v pravé tabulce, budou ve výsledku hodnoty NULL ve všech sloupcích z druhé tabulky. Úplné (FULL JOIN) .. Ve výsledku budou všechny řádky z levé i pravé (první i druhé tabulky). Databázové systémy 1 - př. 7

4 Databázové systémy 1 - př. 7
Spojení tabulek Produkty Příklad: Máme 4 tabulky popisující produkty, jejich dodavatele, lokální zastoupení v ČR a pobočky, v nichž mají tato zastoupení vlastní prodejny. PRODUKT_ID DODAVATEL_ID OZNACENI CENA 6 2 A600N 34000 7 A2500H 21000 8 A8JN-4P019M 64000 9 3 Lifebook S2110 22000 17 null Star new A_OBCHOD SCHÉMA Dodavatele DODAVATEL_ID NAZEV 2 Asus 3 Fujitsu Siemens 8 UMAX 9 VBI Pobocky Zastoupeni POBOCKA_ID ZASTOUPENI_ID MESTO 101 30 Stříbro 102 Karviná 103 33 Praha 105 Brno 106 Ostrava 104 88 DODAVATEL_ID ZASTOUPENI_ID ZASTOUPENI 3 30 Fujitsu CR, a.s. 33 Fujitsu Siemens Computers, s.r.o. 8 88 UMAX Czech a.s. Databázové systémy 1 - př. 7

5 Databázový model – schéma A_OBCHOD
Databázové systémy 1 - př. 7

6 Spojení tabulek – příklady
A_OBCHOD SCHÉMA Zjistěte produkty a města, v nichž je lze přímo od oficiálního zastoupení dodavatele v ČR zakoupit. Varianta dle SQL92: SELECT DISTINCT Produkty.oznaceni, Pobocky.mesto FROM Produkty JOIN Zastoupeni ON produkty.dodavatel_id = zastoupeni.dodavatel_id JOIN Pobocky ON zastoupeni.zastoupeni_id = pobocky.zastoupeni_id; Databázové systémy 1 - př. 7

7 Spojení tabulek – příklady
A_OBCHOD SCHÉMA Zjistěte produkty a města, v nichž je lze přímo od oficiálního zastoupení dodavatele v ČR zakoupit. Varianta dle SQL89: SELECT DISTINCT Produkty.oznaceni, Pobocky.mesto FROM Produkty, Zastoupeni, Pobocky WHERE produkty.dodavatel_id = zastoupeni.dodavatel_id AND zastoupeni.zastoupeni_id = pobocky.zastoupeni_id; Databázové systémy 1 - př. 7

8 Spojení tabulek – příklady
A_OBCHOD SCHÉMA Zjistěte názvy všech dodavatelů, kteří nemají v ČR oficiální zastoupení a doplňte názvy jejich produktů, které lze na trhu zakoupit (pokud nějaké dodávají). SELECT Dodavatele.nazev, Produkty.oznaceni FROM Dodavatele LEFT JOIN zastoupeni ON dodavatele.dodavatel_id = zastoupeni.dodavatel_id LEFT JOIN Produkty ON dodavatele.dodavatel_id = produkty.dodavatel_id WHERE zastoupeni.zastoupeni_id IS NULL; Databázové systémy 1 - př. 7

9 Spojení tabulek – příklady
Příklady využití vnějších spojení: Zobrazení všech dodavatelů, tedy i těch, kteří nedodávají žádný výrobek Zobrazení všech výrobků, tedy i těch, které nejsou přiřazeny žádnému dodavateli S využitím agregačních funkcí zobrazení počtu výrobků, které dodávají jednotliví dodavatelé (s vnějším spojením se zobrazí i hodnoty 0 u těch dodavatelů, kteří žádný výrobek nedodávají, v případě vnitřního spojení ve výsledku nebudou vůbec zahnuti) Databázové systémy 1 - př. 7

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

11 Pravdivostní tabulka AND
Operand 1 Operand 2 Výsledek AND ANO NE NULL Databázové systémy 1 - př. 7

12 Pravdivostní tabulka OR
Operand 1 Operand 2 Výsledek AND ANO NE NULL Databázové systémy 1 - př. 7

13 Pravdivostní tabulka NOT
Operand 1 Výsledek AND ANO NE NULL Databázové systémy 1 - př. 7

14 Logické operátory – příklady
A_OBCHOD SCHÉMA Příklady použití logických operátorů v jednoduchém dotazu nad jedinou tabulkou: SELECT DISTINCT oznaceni, cena FROM Produkty WHERE cena > ; WHERE cena IS NULL OR oznaceni LIKE ‘A%’; WHERE (cena <30000 AND oznaceni LIKE 'A%') OR dodavatel_id IS NULL; Databázové systémy 1 - př. 7

15 Aliasy v syntaxi příkazu SELECT
SELECT <seznam výstupních sloupců> FROM <seznam tabulek> …………. <seznam výstupních sloupců> =[ALL|DISTINCT|DISTINCTROW] { * | <specifikace sloupce1> [, <specifikace sloupce2> [, …]] } <specifikace sloupce> = { <název sloupce> | < specifikace tabulky > . <název sloupce> | < specifikace tabulky > . * | výraz } [[AS] <pojmenování sloupce> ] < specifikace tabulky > = { <název tabulky> | <pojmenování tabulky> | <název pohledu> } [<pojmenování tabulky>] Databázové systémy 1 - př. 7

16 Databázové systémy 1 - př. 7
Aliasy – příklad A_OBCHOD SCHÉMA Příklad SELECT prd.oznaceni AS Vyrobek, dod.Nazev Vyrobce FROM Produkty prd, Dodavatele dod WHERE dod.dodavatel_id = prd.dodavatel_id; Vyrobek Vyrobce A600N Asus A2500H A8JN-4P019M Lifebook S2110 Fujitsu Siemens Databázové systémy 1 - př. 7

17 Aliasy – kdy se bez nich neobejdeme ?
A_CLOVEK SCHÉMA Příklad - spojení tabulky s tou samou tabulkou Máme dánu tabulku: LIDE(Id, jmeno, prijmeni, narozen, pohlaví, Id_otce, Id_matky) Zjistěte jména dětí, které mají matku Boženu Malou? SELECT deti.jmeno as jmeno_ditete FROM lide rodice JOIN lide deti ON deti.Id_matky=rodice.Id WHERE rodice.jmeno LIKE 'Božena' AND rodice.prijmeni LIKE 'Malá'; Databázové systémy 1 - př. 7

18 Aliasy – kdy se bez nich neobejdeme ?
A_CLOVEK SCHÉMA Další příklady Zjistěte jména dětí, které mají rodiče s Id=2? SELECT vnoucata.jmeno as jmeno_vnoucete FROM lide JOIN lide deti ON (deti.Id_matky=lide.Id OR deti.Id_otce=lide.Id) WHERE lide.id=2; Databázové systémy 1 - př. 7

19 Aliasy – kdy se bez nich neobejdeme ?
A_CLOVEK SCHÉMA Další příklady Zjistěte jména vnoučat, které má osoba s Id=6? SELECT vnoucata.jmeno as jmeno_vnoucete FROM lide JOIN lide deti ON (deti.Id_matky=lide.Id OR deti.Id_otce=lide.Id) JOIN lide vnoucata ON (vnoucata.Id_matky= deti.Id OR vnoucata.Id_otce= deti.Id) WHERE lide.id=6; Databázové systémy 1 - př. 7

20 Databázové systémy 1 - př. 7
Výrazy Výraz je skupina konstant, proměnných a funkcí spojených pomocí operátorů. Výsledkem je hodnota. Datový typ je odvozen z datových typů jednotlivých prvků ve výrazu. Automatická konverze datových typů (například znaky na číslo při sčítání atd.) Základními kameny výrazů jsou Názvy sloupců Textové konstanty Číselné konstanty Výsledky funkcí Hodnota NULL Uzavření do závorek Unární (+/-) a binární operátory Vnořené dotazy (SELECT ….) Databázové systémy 1 - př. 7

21 Databázové systémy 1 - př. 7
Funkce Funkce jsou programové bloky, které provádějí požadované operace například s číselnými, znakovými či datovými hodnotami. Seznam lze najít např. na: Obecně je můžeme rozdělit: a) Jednořádkové funkce Analytické Konverzní Funkce pro práci s datem a časem Matematické Funkce pro práci s hodnotou NULL Řetězcové funkce Objektové funkce Funkce pro práci s formátem XML b) Agregační funkce Databázové systémy 1 - př. 7

22 Databázové systémy 1 - př. 7
Datové typy Oracle Datové typy pro kalendářní a časové hodnoty datum a čas Oba typy se skládají z polí YEAR, MONTH, DAY, HOUR, MINUTE, SECOND, TIMEZONE_HOUR, TIMEZONE_MINUTE (časový posun) DATE Vyjádření konkrétního data a času s přesností na sekundy, rozsah je od př.n.l. do TIMESTAMP (<přesnost sekund>) Struktura obsahující datum a čas s požadovanou přesností (až na miliontiny sekundy pro hodnotu parametru <přesnost sekund>=6). TIMESTAMP WITH TIME ZONE Struktura jako TIMESTAMP doplněná o časový posun oproti UTC Vnitřní reprezentace data v Oracle je číselná (rozdíl jednoho dne odpovídá 1). Datum možno sčítat a odčítat. Databázové systémy 1 - př. 7

23 Aktuální datum a čas v Oracle
Pro zjištění data a času můžeme použít několik funkcí SYSDATE – vrací aktuální datum a čas jako typ date, Pozor: obvykle se zobrazuje jen datum, ale hodnota obsahuje i čas, pro plné zobrazení je třeba použít konverzní funkci např. SELECT TO_CHAR(sysdate, 'DD.MM.YYYY HH24:MI:SS') FROM dual; LOCALTIMESTAMP vrací TIMESTAMP (v lokálním časovém pásmu) SYSTIMESTAMP vrací TIMESTAMP WITH TIME ZONE (s uvedeným časovým posunem systému) CURRENT_TIMESTAMP vrací TIMESTAMP WITH TIME ZONE (dle časového posunu nastaveného pro danou session) SELECT SESSIONTIMEZONE from dual; ALTER SESSION SET TIME_ZONE = '+1:0'; Všechny hodnoty jsou odvezeny dle systémových hodin na dtb. serveru. Databázové systémy 1 - př. 7

24 Databázové systémy 1 - př. 7
Tabulka DUAL V Oracle není možné použít příkaz SELECT bez klauzule „FROM" Příkaz SELECT je syntakticky nesprávný. Chceme-li zapsat příkaz bez přístupu dat k reálné tabulce, můžeme uvést tabulku DUAL, která je součástí systémového katalogu a vždy vrací jediný řádek výsledku. Příklad SELECT 1+1 FROM DUAL; SELECT sysdate FROM DUAL; SELECT user FROM DUAL; Databázové systémy 1 - př. 7

25 Práce s typy datum a čas v Oracle
Pro zjištění jedné hodnoty z hodnoty typu datum a čas je vhodná funkce EXTRACT. Příklad použití: SELECT EXTRACT(year FROM systimestamp) EY, EXTRACT(month FROM systimestamp) EM, EXTRACT(day FROM systimestamp) ED, EXTRACT(hour FROM systimestamp) EH, EXTRACT(minute FROM systimestamp) EM, EXTRACT(second FROM systimestamp) ES, EXTRACT(timezone_hour FROM systimestamp) TH, EXTRACT(timezone_minute FROM systimestamp) TM, EXTRACT(timezone_region FROM systimestamp) TR, EXTRACT(timezone_abbr FROM systimestamp) TA FROM dual; Databázové systémy 1 - př. 7

26 Práce s typy datum a čas v Oracle
Posun datumu a času lze povést například takto: SELECT current_timestamp + INTERVAL '10:30' MINUTE TO SECOND FROM dual; SELECT localtimestamp + INTERVAL '1' year(1) SELECT sysdate + 1/24 -- výsledek bude o hodinu posunut, nicméně čas není zobrazen (jen nastavení způsobu zobrazení) SELECT to_char(sysdate + 1/24, 'DD.MM.YYYY HH24:MI:SS') -- v posledním příkladu je pro zobrazení času použita funkce to_char Databázové systémy 1 - př. 7

27 Funkce pro zjištění aktuálního času
Next_day(datum, den_v_týdnu) funkce vrací nové datum představující následující zadaný den v týdnu Last_day(datum) poslední den v aktuálním měsíci Add_months(datum, n-měsíců) posune datum o n měsíců Months_between(datum1, datum2) počet měsíců mezi 2 daty Databázové systémy 1 - př. 7

28 Databázové systémy 1 - př. 7
Konverzní funkce Bin_To_Num(posloupnost 0 a 1 oddělená čárkami) převod binárního čísla na číslo desítkové soustavy To_Char(řet) převádí řetězec do standardní znakové sady To_Char(number [, formátovací_řetězec, nsl_par]) převádí datový typ NUMBER na typ VARCHAR2 To_Char(datetime [, formátovací_řetězec, nsl_par]) převádí datové typy na typ VARCHAR2 To_Date(řet, formátovací_řetězec [, nsl_par]) převádí textové datové typy na datový typ DATE To_Number(řet, formátovací_řetězec [, nsl_par]) převádí datový typ VARCHAR2 na číselný typ NUMBER nsl_par … parametr určující národní formát pro zápis data a času, čísel .. Databázové systémy 1 - př. 7

29 Databázové systémy 1 - př. 7
Parametry formátovacího řetězce funkce TO_CHAR pro práci s datem a časem YYYY 4-číslicový formát roku YYY, YY, Y Poslední 3, 2 nebo 1 číslice roku Q Čtvrtletí (1, 2, 3, 4) MM Měsíc (01-12; JAN = 01) MON Měsíc vyjádřený 3 znaky MONTH Měsíc celým názvem velkými písmeny RM Měsíc vyjádřený římskými číslicemi (I-XII; JAN = I) WW Týden v roce (1-53) W Týden v rámci měsíce (1-5) D Den v týdnu (1-7) DAY Den v týdnu vyjádřený slovně velkými písmeny DD Den v měsíci (1-31) DDD Den v roce (1-366) DY Den v týdnu vyjádřený pomocí zkratky názvu dne HH Hodina (1-12) HH12 Hodina vyjádřená ve 12-hodinovém formátu (1-12) HH24 Hodina vyjádřená ve 24-hodinovém formátu (0-23) MI Minuta (0-59) SS Sekunda (0-59) SSSSS Sekundy od půlnoci ( ) Databázové systémy 1 - př. 7

30 Konverzní funkce TO_CHAR
Příklady pro práci s datem a časem: to_char(sysdate, 'yyyy/mm/dd'); '2003/07/09' to_char(sysdate, 'Month DD, YYYY'); Říjen 16, 2006' to_char(sysdate, 'Month DD, YYYY', 'NLS_DATE_LANGUAGE=American') October 16, 2006 to_char(sysdate, 'Month DD, YYYY', 'NLS_DATE_LANGUAGE=Czech') Říjen 16, 2006 Databázové systémy 1 - př. 7

31 Parametry formátovacího řetězce funkce TO_CHAR pro práci s čísly
9 Symbol pro číslo se stanoveným počtem číslic (je-li číslo kratší, je doplněno mezerami a před záporným je znak mínus) 0 Číslo je na začátku nebo konci doplněné nulami $ Na začátku čísla je znak $ B Symbol zabrání vypsání čísla, pokud je jeho hodnota nula D Symbol pro určení oddělovače desetinných číslic G Symbol pro určení oddělovače tisíců L Symbol pro určení lokálního symbolu měny , Na příslušné pozici je čárka . Na příslušné pozici je tečka V číslo je zobrazené v exponenciálním formátu RN číslo je zobrazené velkými římskými číslicemi (do 3999) FM číslo je zobrazené bez úvodních mezer EEEE číslo ve vědeckém formátu Databázové systémy 1 - př. 7

32 Konverzní funkce TO_CHAR
Příklady pro práci s čísly: to_char( , '9999.9') '1210.7' to_char( , '9,999.99') '1,210.73' to_char( , '$9, ') '$1, ' to_char(21, '000099') '000021' select to_char( , '999G999D999L', 'NLS_NUMERIC_CHARACTERS =,.') from dual ' ,235Kč' NLS_NUMERIC_CHARACTERS = "<decimal_character><group_separator>" Databázové systémy 1 - př. 7

33 Funkce zaokrouhlování data a času
Round(datum, zaokrouhlení) zaokrouhlení data datum původní datum zaokrouhlení YEAR na celé roky MONTH na celé měsíce DDD na celé dny DAY první den v týdnu HH na celé hodiny MI na celé minuty Trunc(datum, část) ořezání data (parametry stejné jako u Round) Extract(část FROM datum) vrací požadovanou část z data (YEAR, MONTH, DAY, HOUR, MINUTE, SECOND) Databázové systémy 1 - př. 7

34 Funkce zaokrouhlování data a času
Příklady: SELECT ROUND (sysdate, 'DAY') FROM dual; SELECT TRUNC(sysdate, 'HH') SELECT EXTRACT(YEAR FROM sysdate) SELECT TO_CHAR(TRUNC(sysdate, 'HH'), 'DD. Month YYYY HH:MI') Databázové systémy 1 - př. 7

35 Jednořádkové znakové funkce
Case-manipulation funkce Funkce, které mění velikost znaků UPPER LOWER INITCAP Character-manipulation funkce Funkce, které mění řetězec CONCAT SUBSTR LENGTH LPAD Databázové systémy 1 - př. 4

36 Case-manipulation funkce
UPPER – všechny znaky převede na velké UPPER(sloupec | výraz) SELECT UPPER(username) FROM uzivatele; LOWER – všechny znaky převede na malé LOWER(sloupec | výraz) SELECT LOWER(username) FROM uzivatele; INITCAP – všechny první znaky každého slova převede na velké, ostatní znaky na malé INITCAP(sloupec | výraz) SELECT INITCAP(mesto) FROM adresy; Databázové systémy 1 - př. 4

37 Case-manipulation funkce
Příklady: SELECT * FROM zamestnanci WHERE UPPER(jmeno)=‘PETR‘; SELECT * FROM zamestnanci WHERE LOWER(jmeno)=‘petr‘; SELECT * FROM zamestnanci WHERE INITCAP(jmeno)=‘Petr‘; Databázové systémy 1 - př. 4

38 Character-manipulation funkce
CONCAT – spojí dva řetězce do jednoho Alternativou je operátor || SUBSTR – extrahuje podřetězec zadané délky SUBSTR(retezec, pocat, delka) LENGTH – vrátí délku řetězce ve znacích LENGTH(retezec) INSTR – nalezne pozici znaku v řetězci INSTR(řetězec, znak) LPAD – doplní řetězec na zadanou délku zleva LPAD(retezec, delka [, znak]) RPAD – doplní řetězec na zadanou délku zprava RPAD(retezec, delka [, znak]) Databázové systémy 1 - př. 4

39 Character-manipulation funkce
TRIM – odstraní z řetězce zadané znaky TRIM([ leading | trailing | booth [znaky FROM ]] řetězec) REPLACE – zamění výskyt sekvence znaků v řetězci za zadanou sekvenci znaků REPLACE(řetězec, co [, čím]) Databázové systémy 1 - př. 4

40 Akceptování hodnot NULL
A_OBCHOD SCHÉMA NVL(výraz1, výraz2) Pokud není hodnota výraz1 NULL, je vrácena hodnota výraz1, jinak výraz2. Tato funkce je vhodná pro nahrazení hodnoty null jinou hodnotou. NVL2(výraz1, výraz2, výraz3) Pokud není hodnota výraz1 NULL, je vrácena hodnota výraz2, jinak výraz3. Tato funkce rozšiřuje možnosti předchozí funkce. Použití v agregačních funkcích například: SELECT AVG(NVL(cena, 0)) as Prumerna_cena FROM produkty (interpretace – průměrná cena všech produktů produkt s neudanou cenou se pro výpočet považuje za produkt s nulovou cenou) SELECT AVG(cena) as Prumerna_cena FROM produkty (interpretace – průměrná cena všech produktů s udanou cenou) Databázové systémy 1 - př. 7

41 Databázové systémy 1 - př. 7
Čas pro dotazy Děkuji za pozornost Databázové systémy 1 - př. 7


Stáhnout ppt "Fakulta elektrotechniky a informatiky"

Podobné prezentace


Reklamy Google