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

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

Databázové systémy I Přednáška č. 6 Ing. Jiří Zechmeister Fakulta elektrotechniky a informatiky

Podobné prezentace


Prezentace na téma: "Databázové systémy I Přednáška č. 6 Ing. Jiří Zechmeister Fakulta elektrotechniky a informatiky"— Transkript prezentace:

1 Databázové systémy I Přednáška č. 6 Ing. Jiří Zechmeister Fakulta elektrotechniky a informatiky

2 Obsah – Příkaz SELECT – Vnitřní, vnější spojování tabulek – Operátory, výrazy, podmínky Databázové systémy 1 - př. 6 2

3 Syntaxe příkazu SELECT SELECT FROM [WHERE ] [GROUP BY ] [HAVING ] [{UNION|UNION ALL|INTERSECT|MINUS} ] [ORDER BY ] Databázové systémy 1 - př. 6 3

4 Syntaxe příkazu SELECT =[ ALL|DISTINCT|DISTINCTROW] { * | [, [, …]] } = { |. |. * | výraz} [[AS] ] = { | | } [ ] Databázové systémy 1 - př. 6 4

5 Syntaxe příkazu SELECT DISTINCT - ve výsledku nebudou duplicitní řádky, které mají stejné hodnoty ve vypisovaných sloupcích DISTINCTROW - ve výsledku nebudou duplicitní řádky, které mají stejné hodnoty ve všech sloupcích bez ohledu na to, zda jsou vypisovány ALL – ve výsledku budou všechny řádky bez ohledu na duplicity, defaultní nastavení Databázové systémy 1 - př. 6 5

6 SELECT - příklady Příklad: SELECT * FROM dodavatele WHERE mesto = 'Praha 4'; SELECT dodavatel_id, nazev, zastoupeni FROM dodavatele WHERE dodavatel_id > 4; Databázové systémy 1 - př. 6 6

7 Druhy spojení Databázové systémy 1 - př. 6 7 Spojení (join): spojení založené na libovolném typu vztahu mezi hodnotami propojovacích položek Ekvivalentní spojení (equi-join): spojení založené na shodě hodnot v propojovacích položkách Spojení nerovností (non-equi-join): spojení založené na nerovnosti hodnot v propojovacích položkách

8 Druhy spojení Vnitřní spojení (inner join, exkluzivní spojení): spojení, v němž jsou záznamy ze dvou tabulek kombinovány a přidávány k výsledkům dotazu pouze tehdy, když k záznamům z první tabulky existují odpovídající záznamy v tabulce druhé Vnější spojení (outer join, inkluzivní spojení): spojení, kdy je každý odpovídající záznam ze dvou tabulek kombinován do jednoho záznamu ve výsledku dotazu. Není-li k záznamu z tabulky, která poskytuje všechny své záznamy, nalezen odpovídající záznam ve druhé tabulce, je přesto zahrnut do výsledků dotazu s prázdnými poli v místech, kde nebyl nalezen odpovídající záznam ve druhé tabulce. Databázové systémy 1 - př. 6 8

9 Druhyspojení Druhy spojení Samospojení (self–join, recursive join): spojení, v němž jsou záznamy z tabulky kombinovány s jinými záznamy z téže tabulky Kartézský součin (cartesian product-join): Spojení bez podmínek. Záznamy z tabulek jsou kombinovány stylem každý s každým. Výsledná množina obsahuje MxN záznamů. Varianta kartézského součinu od Oracle je cross-join. Přirozené spojení (natural-join): Spojení, kde si systém sám najde nejvhodnější sloupce, přes které bude spojovat Databázové systémy 1 - př. 6 9

10 Spojení tabulek – syntaxe SELECT Základní syntaxe pro vnitřní spojení = JOIN ON [ JOIN ON [, … ] ] Příklad SELECT dodavatele.nazev, produkty.oznaceni FROM dodavatele JOIN produkty ON dodavatele.dodavatel_id = produkty.dodavatel_id; Databázové systémy 1 - př. 6 10

11 Spojení tabulek – syntaxe SELECT Vnitřní spojení – varianta 2. =[ [, [, …]] } Sloupce, přes které se realizuje spojení se uvádějí v podmínce za klíčovým slovem WHERE. Příklad SELECT dodavatele.nazev, produkty.oznaceni FROM dodavatele, produkty WHERE dodavatele.dodavatel_id = produkty.dodavatel_id; Databázové systémy 1 - př. 6 11

12 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, RIGHT OUTER 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, LEFT OUTER 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ř. 6 12

13 Spojení tabulek – syntaxe SELECT Vnější spojení – syntaxe podle Oracle -Nepoužívá se klíčové slovo JOIN, spojení probíhá přes klazuli WHERE -Tabulky, které NEBUDOU obsaženy ve výsledku celé, jsou v podmínkách označeny jako symbolem (+) Příklad SELECT * FROM a_hr.zamestnanci, a_hr.oddeleni WHERE zamestnanci.oddeleni_id=oddeleni.oddeleni_id(+); -- odpovídá dotazu SELECT * FROM a_hr.zamestnanci LEFT JOIN a_hr.oddeleni ON zamestnanci.oddeleni_id=oddeleni.oddeleni_id; Databázové systémy 1 - př. 6 13

14 Spojenítabulek – syntaxe SELECT Spojení tabulek – syntaxe SELECT Obecný zápis syntaxe pro různé druhy spojení = [ { INNER | { LEFT | RIGHT | FULL } [OUTER] }] JOIN ON [ { INNER | { LEFT | RIGHT | FULL } [OUTER] }] JOIN ON [, … ] ] ] Příklad SELECT dodavatele.nazev, produkty.oznaceni FROM dodavatele JOIN produkty ON dodavatele.dodavatel_id = produkty.dodavatel_id; Databázové systémy 1 - př. 6 14

15 Spojení tabulek – syntaxe SELECT Kartézský součin SELECT dodavatele.nazev, produkty.oznaceni FROM dodavatele, produkty Oracle Cross Join SELECT dodavatele.nazev, produkty.oznaceni FROM dodavatele CROSS JOIN produkty Databázové systémy 1 - př. 6 15

16 Spojenítabulek Spojení tabulek Příklad: SQL> DESC Produkty Name Null? Type Produkt_ID NOT NULL NUMBER(8) Oznaceni NOT NULL VARCHAR(30) Dodavatel_ID NUMBER(4) … SQL> SELECT * FROM Produkty; PRODUKT_IDDODAVATEL_IDOZNACENI 62A600N 72A2500H 82A8JN-4P019M 93Lifebook S nullStar new DODAVATEL_IDNAZEV 2Asus 3Fujitsu Siemens 8UMAX 9VBI SQL> DESC Dodavatele Name Null? Type Dodavatel_ID NOT NULL NUMBER(4) Nazev NOT NULL VARCHAR2(100) SQL> SELECT * FROM Dodavatele; A_OBCHOD SCHÉMA Databázové systémy 1 - př. 6 16

17 Spojenítabulek – příklady Spojení tabulek – příklady Produkt_IdNazev 8Asus 7 6 9Fujitsu Siemens Příklad - vnitřní spojení SQL> SELECT Produkty.produkt_id, Dodavatele.Nazev FROM Produkty, Dodavatele WHERE dodavatele.dodavatel_id = produkty.dodavatel_id; Databázové systémy 1 - př A_OBCHOD SCHÉMA

18 Spojení tabulek – příklady Produkt_IdNazev 8Asus 7Asus 6Asus 9 Fujitsu Siemens Příklad - vnitřní spojení s klauzulí JOIN SQL> SELECT Produkty.produkt_id, Dodavatele.Nazev FROM Produkty INNER JOIN Dodavatele ON dodavatele.dodavatel_id = produkty.dodavatel_id; Databázové systémy 1 - př A_OBCHOD SCHÉMA

19 Spojení tabulek – příklady Produkt_IdNazev 8Asus 7 6 9Fujitsu Siemens 17null Příklad - levé vnější spojení SQL> SELECT Produkty.produkt_id, Dodavatele.Nazev FROM Produkty LEFT OUTER JOIN Dodavatele ON dodavatele.dodavatel_id = produkty.dodavatel_id; Databázové systémy 1 - př A_OBCHOD SCHÉMA

20 Spojení tabulek – příklady Produkt_IdNazev 6Asus 7 8 9Fujitsu Siemens nullUMAX nullVBI Příklad - pravé vnější spojení SQL> SELECT Produkty.produkt_id, Dodavatele.Nazev FROM Produkty RIGHT OUTER JOIN Dodavatele ON dodavatele.dodavatel_id = produkty.dodavatel_id; Databázové systémy 1 - př A_OBCHOD SCHÉMA

21 Spojení tabulek – příklady Produkt_IdNazev 8Asus 7 6 9Fujitsu Siemens 17null UMAX nullVBI Příklad - úplné vnější spojení SQL> SELECT Produkty.produkt_id, Dodavatele.Nazev FROM Produkty FULL OUTER JOIN Dodavatele ON dodavatele.dodavatel_id = produkty.dodavatel_id; Databázové systémy 1 - př A_OBCHOD SCHÉMA

22 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ř. 6 22

23 Řazení řádků ve výsledku SELECT SELECT FROM [WHERE ] [GROUP BY ] [HAVING ] [{UNION|UNION ALL|INTERSECT|MINUS} ] [ORDER BY ] = [ [, …]] = { | | } } [{ ASC | DESC }] Ve výsledku budou řádky seřazeny dle požadavků uvedených za klauzulí ORDER BY: ASC.. Vzestupně DESC.. Sestupně Databázové systémy 1 - př. 6 23

24 Řazení řádků ve výsledku SELECT SELECT nazev FROM dodavatele WHERE mesto <> 'Ostrava' ORDER BY nazev DESC; SELECT nazev, mesto FROM dodavatele WHERE mesto <> 'Ostrava' ORDER BY 2 ASC, 1 DESC; SELECT mesto, zastoupeni FROM dodavatele WHERE nazev <> ' IBM' ORDER BY mesto ASC, zastoupeni DESC ; Databázové systémy 1 - př A_OBCHOD SCHÉMA

25 Aritmetické operátory Databázové systémy 1 - př Umožňují na základě původních hodnot vypočítat hodnoty nové. Sčítání + (unární i binární) Odčítání- (unární i binární) Násobení* Dělení/ Priorita Nejprve se vyhodnocují části výrazu uzavřené v závorkách Násobení a dělení mají přednost před sčítáním a odečítáním Operátory se stejnou prioritou se vyhodnocují zleva doprava

26 Operátor zřetězení Umožňuje spojovat hodnoty ze sloupců a znakové řetězce Zřetězení|| Příklad SELECT nazev, mesto || ' ' || zastoupeni AS pobocka FROM dodavatele; Databázové systémy 1 - př. 6 26

27 Operátory pro porovnávání =rovnost <>nerovnost větší než <=menší nebo rovno >=větší nebo rovno Databázové systémy 1 - př. 6 27

28 Operátory pro porovnávání [NOT] BETWEEN x AND y [není] větší nebo rovno x a menší nebo rovno y [NOT] IN [ne] patří do množiny ANY, SOME porovnání hodnoty s každou hodnotou v seznamu nebo řádkem vnořeného dotazu, musí být doplněn jedním z operátorů =,, =. Výraz je pravdivý, pokud je pravdivý alespoň pro JEDNU položku seznamu. ALL porovnání hodnoty s každou hodnotou v seznamu nebo řádkem vnořeného dotazu, musí být doplněn jedním z operátorů =,, =. Výraz je pravdivý, pokud je pravdivý pro VŠECHNY položky seznamu. Databázové systémy 1 - př. 6 28

29 Operátory pro porovnávání Databázové systémy 1 - př [NOT] EXISTSve vnořeném dotazu je vrácen alespoň jeden řádek IS [NOT] NULL test na [ne] rovnost NULL X [NOT] LIKE yporovnání řetězce s maskou obsahující zástupné znaky _ právě jeden libovolný znak % nula nebo více libovolných znaků

30 Operátory pro porovnávání Příklady SELECT oznaceni FROM produkty WHERE cena BETWEEN AND SELECT Produkty.oznaceni FROM Produkty, Dodavatele WHERE dodavatele.dodavatel_id = produkty.dodavatel_id AND dodavatel.nazev IN (‘UMAX’, ‘Asus’) SELECT oznaceni FROM produkty WHERE cena = ANY (20000, 30000, 25000, 35000) SELECT oznaceni FROM produkty WHERE cena>= ALL (SELECT cena FROM produkty ) A_OBCHOD SCHÉMA Databázové systémy 1 - př. 6 30

31 SELECT …. LIKE LIKE umožňuje využití zástupných znaků při definici podmínek za WHERE v SQL příkazech jako select, insert, update, delete. % nahrazuje libovolný řetězec libovolné délky (i nulové délky) _ nahrazuje libovolný jeden znak Příklady: SELECT * FROM dodavatele WHERE mesto LIKE '%ra%'; SELECT * FROM dodavatele WHERE mesto NOT LIKE 'Pha%'; SELECT * FROM produkty WHERE oznaceni LIKE 'TravelMate 2__0'; A_OBCHOD SCHÉMA Databázové systémy 1 - př. 6 31

32 Operátory pro porovnávání Příklady SELECT oznaceni FROM produkty WHERE EXISTS (SELECT * FROM dodavatele WHERE dodavatele.dodavatel_id = produkty.dodavatel_id) ; SELECT nazev FROM dodavatele WHERE zastoupeni IS NULL; SELECT nazev, oznaceni FROM dodavatele, produkty WHERE dodavatele.dodavatel_id = produkty.dodavatel_id AND oznaceni LIKE 'VAIO%'; A_OBCHOD SCHÉMA Databázové systémy 1 - př. 6 32

33 DĚKUJI ZA POZORNOST Prostor pro otázky a praktické ukázky Databázové systémy 1 - př. 6 33


Stáhnout ppt "Databázové systémy I Přednáška č. 6 Ing. Jiří Zechmeister Fakulta elektrotechniky a informatiky"

Podobné prezentace


Reklamy Google