Fakulta elektrotechniky a informatiky

Slides:



Advertisements
Podobné prezentace
PLAYBOY Kalendar 2007.
Advertisements

Aplikační a programové vybavení
KIV/ZIS Cvičení 6 SQL - SELECT.
MS ACCESS - DOTAZY DATABÁZOVÉ SYSTÉMY.
SQL Další dotazy a pohledy
Cvičení 06 Ing. Pavel Bednář
*Zdroj: Průzkum spotřebitelů Komise EU, ukazatel GfK. Ekonomická očekávání v Evropě Březen.
Jazyk SQL Ing. Zdena DOBEŠOVÁ. SQL Structured Query Language 1974 SEQUEL (Structured English Query Language) neprocedurální relační dotazovací jazyk norma.
DB1 – 9. cvičení Optimalizace dotazu Konkurenční přístup a deadlock Indexace Transakce.
Databázové systémy SQL Výběr dat.
YDASYS1 Ing. Monika Šimková.
Fakulta elektrotechniky a informatiky
Cvičení 03 SQL Select Ing. Pavel Bednář
Informační systémy Nástroje pro sběr dat, návrh a realizace databáze.
Další dotazy SQL Structured Query Language. Některé SQL příkazy mohou mít v sobě obsaženy další kompletní příkazy SELECT. Využijeme je tam, kde potřebujeme.
SQL Structured Query Language
Informatika pro ekonomy II přednáška 11
Architektury a techniky DS Tvorba efektivních příkazů I Přednáška č. 3 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky
Databázové systémy 1 Cvičení č. 6 Fakulta elektrotechniky a informatiky Univerzita Pardubice.
Databázové systémy 1 Cvičení č. 4 Fakulta elektrotechniky a informatiky Univerzita Pardubice.
Databázové systémy 1 Cvičení č. 2 Fakulta elektrotechniky a informatiky Univerzita Pardubice.
Databázové systémy I Přednáška č. 5 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky
Databázové systémy 1 Cvičení č. 3 Fakulta elektrotechniky a informatiky Univerzita Pardubice.
Temporální databáze a TSQL
Radek Špinka Přepínače MSSQL výběr.
Téma: SČÍTÁNÍ A ODČÍTÁNÍ CELÝCH ČÍSEL 2
Vizualizace projektu větrného parku Stříbro porovnání variant 13 VTE a menšího parku.
Vzdělávací materiál / DUMVY_32_INOVACE_02B14 Příkazový řádek: obsah souborů PŘÍKLADY AutorIng. Petr Haman Období vytvořeníLeden 2013 Ročník / věková kategorie3.
Dělení se zbytkem 3 MODERNÍ A KONKURENCESCHOPNÁ ŠKOLA
MODERNÍ A KONKURENCESCHOPNÁ ŠKOLA reg. č.: CZ.1.07/1.4.00/ Základní škola, Šlapanice, okres Brno-venkov, příspěvková organizace Masarykovo nám.
MySQL - Vytvoření nové tabulky  create table jméno_tabulky (jméno_položky typ_položky,... ) Přehled nejběžnějších datových typů Přehled nejběžnějších.
KASKÁDOVÉ STYLY 4.

Databázové systémy 2 Cvičení č. 7 Ing. Tomáš Váňa Fakulta elektrotechniky a informatiky Univerzita Pardubice.
Školení správců II. Petr Pinkas RNDr. Vít Ochozka.
A1PRG - Programování – Seminář Ing. Michal Operátory (2. část) 4 Verze
Databázové systémy II Přednáška č. 9 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky
Databázové systémy I Cvičení č. 9 Fakulta elektrotechniky a informatiky Univerzita Pardubice 2013.
KIV/ZIS cvičení 6 Tomáš Potužák. Pokračování SQL Klauzule GROUP BY a dotazy nad více tabulkami Stáhnout soubor studenti_dotazy_sql.mdb.
Databázové systémy I Cvičení č. 6 Fakulta elektrotechniky a informatiky Univerzita Pardubice 2013.
MS ACCESS DOTAZY.
Databázové systémy Přednáška č. 6.
SQL – základní pojmy Ing. Roman Danel, Ph.D.
SQL PVA Jan Hora. SQL „graficky“ Grafický vs. pravý SQL SELECT ORDED BY WHERE.
Databázové systémy 2 Cvičení č. 6 Ing. Tomáš Váňa Fakulta elektrotechniky a informatiky Univerzita Pardubice.
Fakulta elektrotechniky a informatiky
Přednost početních operací
Číslo šablony: III/2 VY_32_INOVACE_P4_3.8 Tematická oblast: Aplikační software pro práci s informacemi II. Databáze – základy SQL Typ: DUM - kombinovaný.
Dostupné z Metodického portálu ISSN: , financovaného z ESF a státního rozpočtu ČR. Provozováno Výzkumným ústavem pedagogickým v Praze.
Databázové systémy 2 Zkouška – 08:00. Příklad I – Procedura – 5 bodů Vytvořte proceduru P_ZK3(p_oddeleni_id_from NUMBER, p_oddeleni_id_to NUMBER,
Databázové systémy II Cvičení č. 3 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky
Databázové systémy Tomáš Skopal
Databázové systémy I Cvičení č. 7 Fakulta elektrotechniky a informatiky Univerzita Pardubice 2013.
Informatika II PAA DOTAZOVACÍ JAZYKY
Aplikační a programové vybavení
Databázové systémy SQL Výběr dat.
SQL Další dotazy a pohledy Databázové systémy. Některé SQL příkazy mohou mít v sobě obsaženy další kompletní příkazy SELECT. Využijeme je tam, kde potřebujeme.
ACCESS DOTAZY Ing. Jana Horáková IKT MS Office
ACCESS DOTAZY Ing. Jana Horáková IKT MS Office
Databázové systémy I Přednáška č. 6 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky
Příkazy jazyka SQL ve VFP a na SQL Serveru
SQL – příkaz SELECT Ing. Roman Danel, Ph.D.
Databázové systémy I Přednáška 5 Databázové systémy 1 – KIT/IDAS1
Databázové systémy I Přednáška 8 Databázové systémy 1 – KIT/IDAS1
Ing. Tomáš Váňa, Ing. Jiří Zechmeister
Databázové systémy a SQL
Databázové systémy a SQL
Optimalizace SQL dotazů
Přednáška 7 SQL – JOIN.
Transkript prezentace:

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

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

Syntaxe příkazu SELECT SELECT <seznam výstupních sloupců> FROM <seznam tabulek> [WHERE <podmínka řádku>] [GROUP BY <seznam výrazů seskupení>] [HAVING <podmínka skupiny>] [{UNION|UNION ALL|INTERSECT|MINUS} <příkaz SELECT>] [ORDER BY <seznam kritérií třídění>] Databázové systémy 1 - př. 6

Syntaxe příkazu SELECT <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ř. 6

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

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

Databázové systémy 1 - př. 6 Druhy spojení 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 Databázové systémy 1 - př. 6

Databázové systémy 1 - př. 6 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

Databázové systémy 1 - př. 6 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

Spojení tabulek – syntaxe SELECT Základní syntaxe pro vnitřní spojení <seznam tabulek> = < specifikace tabulky1> JOIN < specifikace tabulky2> ON < podmínky spojení> [ JOIN < specifikace tabulky3> ON < podmínky spojení> [, … ] ] 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

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

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

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

Spojení tabulek – syntaxe SELECT Obecný zápis syntaxe pro různé druhy spojení <seznam tabulek> = < specifikace tabulky1> [ { INNER | { LEFT | RIGHT | FULL } [OUTER] }] JOIN < specifikace tabulky2> ON < podmínky spojení> [ { INNER | { LEFT | RIGHT | FULL } [OUTER] }] JOIN < specifikace tabulky3> ON < podmínky spojení> [, … ] ] ] 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

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

Databázové systémy 1 - př. 6 Spojení tabulek A_OBCHOD SCHÉMA 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_ID DODAVATEL_ID OZNACENI 6 2 A600N 7 A2500H 8 A8JN-4P019M 9 3 Lifebook S2110 17 null Star new DODAVATEL_ID NAZEV 2 Asus 3 Fujitsu Siemens 8 UMAX 9 VBI SQL> DESC Dodavatele Name Null? Type ----------------------------- -------- ----------------- Dodavatel_ID NOT NULL NUMBER(4) Nazev NOT NULL VARCHAR2(100) SQL> SELECT * FROM Dodavatele; Databázové systémy 1 - př. 6

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

Spojení tabulek – příklady A_OBCHOD SCHÉMA 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; Produkt_Id Nazev 8 Asus 7 6 9 Fujitsu Siemens Databázové systémy 1 - př. 6

Spojení tabulek – příklady A_OBCHOD SCHÉMA 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; Produkt_Id Nazev 8 Asus 7 6 9 Fujitsu Siemens 17 null Databázové systémy 1 - př. 6

Spojení tabulek – příklady A_OBCHOD SCHÉMA 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; Produkt_Id Nazev 6 Asus 7 8 9 Fujitsu Siemens null UMAX VBI Databázové systémy 1 - př. 6

Spojení tabulek – příklady A_OBCHOD SCHÉMA 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; Produkt_Id Nazev 8 Asus 7 6 9 Fujitsu Siemens 17 null UMAX VBI Databázové systémy 1 - př. 6

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

Řazení řádků ve výsledku SELECT SELECT <seznam výstupních sloupců> FROM <seznam tabulek> [WHERE <podmínka řádku>] [GROUP BY <seznam výrazů seskupení>] [HAVING <podmínka skupiny>] [{UNION|UNION ALL|INTERSECT|MINUS} <příkaz SELECT>] [ORDER BY <seznam kritérií třídění>] <seznam kritérií třídění>= <kritérium třídění 1> [<kritérium třídění 2> [, …]] <kritérium třídění>= {<výraz> | <specifikace sloupce> | <pořadí sloupce>} } [{ 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

Řazení řádků ve výsledku SELECT A_OBCHOD SCHÉMA 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ř. 6

Aritmetické operátory 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 Databázové systémy 1 - př. 6

Databázové systémy 1 - př. 6 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

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

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

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

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

Databázové systémy 1 - př. 6 SELECT …. LIKE A_OBCHOD SCHÉMA 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'; Databázové systémy 1 - př. 6

Operátory pro porovnávání A_OBCHOD SCHÉMA 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%'; Databázové systémy 1 - př. 6

Databázové systémy 1 - př. 6 Prostor pro otázky a praktické ukázky Děkuji za pozornost Databázové systémy 1 - př. 6