Databázové systémy I Přednáška 8 Databázové systémy 1 – KIT/IDAS1

Slides:



Advertisements
Podobné prezentace
Aplikační a programové vybavení
Advertisements

KIV/ZIS Cvičení 6 SQL - SELECT.
SQL Další dotazy a pohledy
Základy jazyka SQL Jan Tichava
SQL: DDL v ORACLE CREATE TABLE jméno_tabulky (atribut datový_typ [DEFAULT][attribut_constraint] [, atribut datový_typ [DEFAULT] [attribut_constraint]],...
Aplikační a programové vybavení
Jazyk SQL Ing. Zdena DOBEŠOVÁ. SQL Structured Query Language 1974 SEQUEL (Structured English Query Language) neprocedurální relační dotazovací jazyk norma.
Databázové systémy SQL Výběr dat.
YDASYS1 Ing. Monika Šimková.
Fakulta elektrotechniky a informatiky
Informační systémy Nástroje pro sběr dat, návrh a realizace databáze.
AGREGACE Distinct, Group By, Having, SUM, …. DISTINCT  Slučování stejných řádků ve výsledku dotazu. AGREGACE 2 JménoPříjmeníID FrantišekVomáčka1 JosefPokorný2.
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
Temporální databáze a TSQL
SQL Přednáška DB1. Literatura CONNOLLY, T.M.-BEGG,C.E.-STRACHAN,A.D.: Database Systems – A Practial Approach to Design, Implementation and Management.
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.
Databázové systémy II Přednáška č. 8 – Pohledy (Views)
Školení správců II. Petr Pinkas RNDr. Vít Ochozka.
Databázové systémy II Přednáška č. 9 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky
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.
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.
Rauer Luboš Kopic Petr Blažek Tomáš. Structured Query Language - dotazovací jazyk -> pracuje s dotazy - neprocedurální jazyk - mocný, ale přitom jednoduchý.
Databázové systémy 2 Cvičení č. 6 Ing. Tomáš Váňa Fakulta elektrotechniky a informatiky Univerzita Pardubice.
Fakulta elektrotechniky a informatiky
Čí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ý.
Databázové systémy II Přednáška č. 9. Transakce je logická jednotka práce sestávající z jednoho nebo více SQL příkazů, které jsou atomické z hlediska.
Databázové systémy I Cvičení č. 10 Fakulta elektrotechniky a informatiky Univerzita Pardubice 2013.
Databázové systémy I Cvičení č. 7 Fakulta elektrotechniky a informatiky Univerzita Pardubice 2013.
Databázové systémy UIN010 N-ticový (řádkový) relační kalkul Hodnoty proměnných n-tice relací (řádky) Konstanty hodnoty atributů Unární funkční.
Informatika II PAA DOTAZOVACÍ JAZYKY
Aplikační a programové vybavení
Obchodní akademie, Ostrava-Poruba, příspěvková organizace Vzdělávací materiál/DUM VY_32_INOVACE_01B13 Autor Ing. Jiří Kalousek Období vytvoření březen.
Databázové systémy 2 Cvičení č. 5 Fakulta elektrotechniky a informatiky Univerzita Pardubice.
XQuery Dotazovací jazyk XML Daniel Privalenkov. O čem bude prezentace Nutnost dotazovacího jazyku v XML Rychlý přehled XQuery Několik příkladů.
Databázové systémy SQL Výběr dat.
TEMPORÁLNÍ DATABÁZE A TSQL2
 Agregační funkce  Agregační funkce jsou to funkce, které nějakým způsobem zpracují více hodnot a jako výsledek vrátí hodnotu jednu COUNT()  Funkce.
Použití dotazu jako zdroj dat pro pohled Vypracovala: Procházková Petra.
Databázové Aplikace Slidy ke cvičení DBI026, část 3 KSI MFF UK Verze
Databázové systémy 2 Zkouška – 8:00. Příklad I - Funkce Vytvořte funkci ZK_DIFF_MIN_MAX (P_ZAM_ID NUMBER) RETURN VARCHAR2. Funkce může vracet.
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.
J. Pokorný, I Halaška1 DBS: SQL92 Jaroslav Pokorný MFF UK, Praha
SQL Structured Query Language
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
Databázové systémy I Přednáška 7 Databázové systémy 1 – KIT/IDAS1
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
Ing. Tomáš Váňa, Ing. Jiří Zechmeister
Databázové systémy 1 – KIT/IDAS1 Ing. Monika Borkovcová, Ph.D.
Databázové systémy a SQL
Databázové systémy a SQL
[ START WITH podmínka ] CONNECT BY podmínka
Optimalizace SQL dotazů
Databázové systémy a SQL
Dotazovací jazyk SQL - II
Databázové systémy a SQL
Databázové systémy a SQL
Transkript prezentace:

Databázové systémy I Přednáška 8 Databázové systémy 1 – KIT/IDAS1 Ing. Monika Borkovcová, Ph.D.

Databázové systémy 1 - př. 8 Obsah Skupinové a souhrnné dotazy opakování Pohledy syntaxe použití význam Vnořené dotazy typy vnořených dotazů způsob použití v dotazu využití operátorů pro porovnání Operátory pro porovnání a množinové operátory Databázové systémy 1 - př. 8

Databázové systémy 1 - př. 8 Souhrnné dotazy A_OBCHOD SCHÉMA Příklady: SELECT AVG(cena) FROM produkty; průměrná hodnota ve sloupci cena v tabulce produkty, počítají se jen z uvedených hodnot – tj. NOT NULL SELECT MIN(cena) FROM produkty; minimální (uvedená) hodnota ve sloupci cena v tabulce produkty SELECT count(cena) FROM produkty; počet nenulových hodnot ve sloupci cena v tabulce produkty SELECT count(*) FROM produkty; počet řádků tabulky produkty Sloupcové funkce ignorují hodnoty NULL !!! Databázové systémy 1 - př. 8

Agregační funkce s DISTINCT A_OBCHOD SCHÉMA Použitím klíčového slova DISTINCT můžeme eliminovat započtení duplicitních hodnot ve sloupcové funkci. SELECT count(DISTINCT mesto) FROM pobocky; Podívejme se na rozdíl výsledku tohoto dotazu s výsledky dotazu následujícího SELECT count(mesto) FROM pobocky; První dotaz s klíčovým slovem DISTINCT zjistí počet rozdílných NOT NULL hodnot ve sloupci mesto, druhý dotaz počet NOT NULL hodnot ve sloupci mesto. Výsledkem jsou tedy obecně úplně různé informace. Volba dotazu opět záleží na zadání a jeho přesném pochopení. Databázové systémy 1 - př. 8

Databázové systémy 1 - př. 8 Skupinové dotazy SELECT <sloupec_1>, <sloupec_2>, ... <sloupec_n>, <agregační_funkce (výraz)> FROM <seznam tabulek> WHERE <podmínky> GROUP BY <sloupec_1>, <sloupec_2>, ... <sloupec_n> HAVING <podmínky pro agregované výsledky>; Databázové systémy 1 - př. 8

Příklady skupinových dotazů Příklady: SELECT dodavatel_id, AVG(cena) FROM produkty GROUP BY dodavatel_id ; SELECT nazev, AVG(cena) FROM dodavatele JOIN produkty ON dodavatele.dodavatel_id = produkty.dodavatel_id GROUP BY nazev HAVING AVG(cena) >=33000; A_OBCHOD SCHÉMA Databázové systémy 1 - př. 8

Postup provádění skupinových dotazů spojení tabulek (dle zadaných podmínek spojení) JOIN Aplikace omezujících podmínek za klauzulí WHERE Seskupení řádků do skupin (dle atributů uvedených za klauzulí) GROUP BY Výpočet agregačních funkcí SUM, COUNT, MAX, MIN, AVG nad skupinami řádků – pro každou skupinu vznikne jediný řádek Aplikace omezujících podmínek za klauzulí HAVING Seřazení výsledku dle klauzule ORDER BY Databázové systémy 1 - př. 8

Databázové systémy 1 - př. 8 Pohledy Pohled je předpis pro získání podmnožiny dat z jedné či více tabulek. Pohled obsahuje JEN předpis, NIKOLI data. S pohledy se pracuje obdobně jako s vlastními tabulkami. Určitá omezení souvisí například se změnou dat. Jednoduché pohledy - vytvořeny z dat jediné tabulky, - neobsahují žádné funkce ani skupiny, - můžeme v nich provádět i změny (nezakážeme-li to) Komplexní pohledy - jsou vytvořeny z dat více databázových tabulek, - mohou obsahovat funkce nebo skupiny, - změnu dat umožňují jen ve velmi omezených případech Databázové systémy 1 - př. 8

Databázové systémy 1 - př. 8 Pohledy - syntaxe Vytvoření pohledu: CREATE [OR REPLACE] VIEW název_pohledu [alias] AS dotaz [seznam_omezení]; Příklady omezení: WITH READ ONLY – nelze vkládat, mazat ani měnit záznamy, WITH CHECK OPTION – upravované či vkládané záznamy musí vyhovovat podmínce uvedené v klausuli WHERE uvedeného dotazu. Odstranění pohledu: DROP VIEW název_pohledu; Databázové systémy 1 - př. 8

Databázové systémy 1 - př. 8 Pohledy – příklady 1 A_OBCHOD SCHÉMA tabulka PRACOVNICI CREATE VIEW Pracovnici_pobocky AS SELECT Jmeno, Funkce, Pobocka FROM Pracovnici WITH READ ONLY; Použití: SELECT * FROM Pracovnici_pobocky; SELECT Jmeno, Pobocka FROM Pracovnici_pobocky WHERE Pobocka='3'; Databázové systémy 1 - př. 8

Databázové systémy 1 - př. 8 Pohledy – příklady 2 A_OBCHOD SCHÉMA CREATE VIEW Prumer_mzda AS SELECT Funkce, AVG(Mzda) AS Prumer FROM Pracovnici GROUP BY Funkce; SELECT Prumer FROM Prumer_mzda WHERE Funkce LIKE 'obchodník'; SELECT Jmeno, Pracovnici.Funkce, Mzda - Prumer_mzda.prumer AS Rozdil FROM Pracovnici JOIN Prumer_mzda ON Pracovnici.Funkce = Prumer_mzda.Funkce; Databázové systémy 1 - př. 8

Databázové systémy 1 - př. 8 Pohledy – příklady 3 A_OBCHOD SCHÉMA CREATE VIEW Pohled_Max_mzda AS SELECT Max(Mzda) AS Max_mzda FROM Pracovnici WHERE Funkce NOT LIKE 'ředitel'; SELECT Max_mzda FROM Pohled_Max_mzda; Databázové systémy 1 - př. 8

Databázové systémy 1 - př. 8 Pohledy – příklady 4 CREATE VIEW Pracovnici_pobocky AS SELECT Jmeno, Funkce, Pobocka FROM Pracovnici; INSERT INTO Pracovnici_pobocky (Jmeno, Funkce, Pobocka) VALUES ('Daniel Kohout', 'vrátný', 'C'); UPDATE Pracovnici_pobocky SET Pobocka='9' WHERE Pobocka='C'; DELETE FROM Pracovnici_pobocky WHERE Pobocka='9'; Databázové systémy 1 - př. 8

Databázové systémy 1 - př. 8 Pohledy – příklady CREATE VIEW Pracovnici_centraly AS SELECT Jmeno, Funkce, Pobocka FROM Pracovnici WHERE Pobocka='C' WITH CHECK OPTION; INSERT INTO Pracovnici_centraly(Jmeno, Funkce, Pobocka) VALUES ('Daniel Kohout', 'vrátný', 'C'); VALUES ('Pavel Kohout', 'vrátný', '1'); UPDATE Pracovnici_centraly SET Pobocka='9' WHERE Pobocka='C'; UPDATE Pracovnici_centraly SET Pobocka='C' WHERE Pobocka='9'; DELETE FROM Pracovnici_centraly WHERE Pobocka='9'; DELETE FROM Pracovnici_centraly WHERE Pobocka='C'; Nelze – omezení WITH CHECK OPTION Nemá smysl – ve výsledku pohledu nejsou pracovnici s jinou pobočkou, než 'C'; Databázové systémy 1 - př. 8

Databázové systémy 1 - př. 8 Pohledy - význam Zjednodušení konstrukce náročných dotazů, Opakované využití vytvořeného pohledu na standardní použití (minimalizace chyb, zrychlení práce, případné změny ovlivní například jen pohled), Bezpečnost – mohu definovat odlišná práva pro přístup k tabulce a pohledům (například omezení přístupu k citlivým informacím). Databázové systémy 1 - př. 8

Vnořené dotazy ( z hlediska výsledku) Jednořádkové jednosloupcové vnořené dotazy vrací jen jednu hodnotu Jednořádkové vícesloupcové vnořené dotazy vrací jen jeden řádek, ale více sloupců (například jeden řádek tabulky nebo výsledek souhrnného dotazu) Víceřádkové jednosloupcové vnořené dotazy vrací více řádků, ale jen jediný sloupec (například seznam všech různých hodnot v konkrétním sloupci) Vícesloupcové víceřádkové vnořené dotazy výsledkem je tabulka s více sloupci a více řádky (obecný stav) Databázové systémy 1 - př. 8

Vnořené dotazy (z hlediska umístění v dotazu) Vnořené dotazy musí být zapsány v závorkách: (SELECT ….) Nejdříve se provede vnořený dotaz a teprve nad jeho výsledky se aplikuje hlavní dotaz. Vnořený dotaz může být umístěn do hlavního dotazu například: za klauzuli FROM za klauzuli WHERE za klauzuli HAVING případně v dalších částech (i v části bezprostředně za SELECT) Databázové systémy 1 - př. 8

Vnořené dotazy - příklad A_OBCHOD SCHÉMA Máme vytvořenu tabulku pracovnici CREATE TABLE PRACOVNICI (jmeno varchar2(30), funkce varchar2 (15), Pobocka char(1), Mzda number(5)) S těmito daty Jmeno Funkce Pobocka Mzda Karel Smutný obchodník 1 14000 Kamil Káral 13000 Josef Honec 2 11000 Jana Mokrá 3 15000 František Veselý asistent C 10000 Jan Novák ředitel 20000 Databázové systémy 1 - př. 8

Jednořádkové & jednosloupcové vnořené dotazy Zjistěte jméno zaměstnance, který má nejvyšší mzdu. A_OBCHOD SCHÉMA create table Pracovnici (jmeno vaRCHAR(20), funkce vaRCHAR(20),pobocka varchar(2),mzda INTEGER); INSERT INTO Pracovnici (jmeno,funkce,pobocka,mzda) VALUES ('Karel Smutný','obchodník','1',14000); INSERT INTO Pracovnici (jmeno,funkce,pobocka,mzda) VALUES ('Kamil Káral','obchodník','1',13000); INSERT INTO Pracovnici (jmeno,funkce,pobocka,mzda) VALUES ('Josef Honec','obchodník','2',11000); INSERT INTO Pracovnici (jmeno,funkce,pobocka,mzda) VALUES ('Jana Mokrá','obchodník','3',15000); INSERT INTO Pracovnici (jmeno,funkce,pobocka,mzda) VALUES ('František Veselý','asistent','C',10000); INSERT INTO Pracovnici (jmeno,funkce,pobocka,mzda) VALUES ('Jan Novák','ředitel','C',20000); SELECT Jmeno FROM Pracovnici WHERE mzda = (SELECT max(Mzda) FROM Pracovnici) Databázové systémy 1 - př. 8

Databázové systémy 1 - př. 8 Víceřádkové & jednosloupcové vs. jednořádkové & jednosloupcové vnořené dotazy A_OBCHOD SCHÉMA Zjistěte jméno a funkci zaměstnance, který má mzdu vyšší než Jana Mokrá. SELECT Jmeno, Funkce FROM Pracovnici WHERE mzda > ANY (SELECT Mzda FROM Pracovnici WHERE Jmeno LIKE 'Jana Mokrá') SELECT Jmeno, Funkce FROM Pracovnici WHERE mzda > (SELECT MIN(Mzda) FROM Pracovnici WHERE Jmeno LIKE 'Jana Mokrá') create table Pracovnici (jmeno vaRCHAR(20), funkce vaRCHAR(20),pobocka varchar(2),mzda INTEGER); INSERT INTO Pracovnici (jmeno,funkce,pobocka,mzda) VALUES ('Karel Smutný','obchodník','1',14000); INSERT INTO Pracovnici (jmeno,funkce,pobocka,mzda) VALUES ('Kamil Káral','obchodník','1',13000); INSERT INTO Pracovnici (jmeno,funkce,pobocka,mzda) VALUES ('Josef Honec','obchodník','2',11000); INSERT INTO Pracovnici (jmeno,funkce,pobocka,mzda) VALUES ('Jana Mokrá','obchodník','3',15000); INSERT INTO Pracovnici (jmeno,funkce,pobocka,mzda) VALUES ('František Veselý','asistent','C',10000); INSERT INTO Pracovnici (jmeno,funkce,pobocka,mzda) VALUES ('Jan Novák','ředitel','C',20000); Pozor: sloupec jméno není primární klíč tabulky Pracovníci(osob s daným jménem může být více), proto je nezbytná opatrnost při návrhu dotazu. Databázové systémy 1 - př. 8

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ř. 8

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ř. 8

Databázové systémy 1 - př. 8 In-line pohledy A_OBCHOD SCHÉMA In-line pohled je vnořený dotaz, který má alias. Využití in-line pohledů se nabízí pro zjednodušení komplexních dotazů odstraněním spojení tabulek (operací JOIN). Umožňuje také spojení několika samostatných dotazů do jednoho. V příkazu SELECT se s in-line pohledem pracuje stejně, jako s běžnou tabulkou. Syntaxe in-line pohledu je: SELECT * FROM (SELECT * FROM tabulka) nazev_pohledu; SELECT Funkce, Pr_mzda FROM (SELECT Funkce, AVG(Mzda) Pr_mzda FROM Pracovnici GROUP BY Funkce) Pr_funkce WHERE Pr_mzda>12000; Databázové systémy 1 - př. 8

Vícesloupcové & víceřádkové vnořené dotazy A_OBCHOD SCHÉMA Zjistěte jméno zaměstnance, jeho funkci a o kolik má rozdílnou mzdu, než je průměrná mzda zaměstnanců se stejnou funkcí. SELECT Jmeno, Pracovnici.Funkce, Mzda - Pr_funkce.Pr_mzda AS Rozdil FROM Pracovnici JOIN (SELECT Funkce, AVG(Mzda) Pr_mzda FROM Pracovnici GROUP BY Funkce) Pr_funkce ON Pracovnici.Funkce = Pr_funkce.Funkce; Poznámka: vnořený skupinový dotaz se provede pouze jednou, následně se s ním pracuje obdobně jako s tabulkou či pohledem s označením Pr_funkce Opět jde o využití tzv. in-line pohledu. Databázové systémy 1 - př. 8

Jednořádkové & jednosloupcové vnořené dotazy (korelované) A_OBCHOD SCHÉMA Zjistěte jméno zaměstnance, jeho funkci a o kolik má rozdílnou mzdu, než je průměrná mzda zaměstnanců se stejnou funkcí. SELECT P1.Jmeno, P1.Funkce, P1.Mzda - (SELECT AVG(P2.Mzda) FROM Pracovnici P2 WHERE P2.Funkce = P1.Funkce) FROM Pracovnici P1 create table Pracovnici (jmeno vaRCHAR(20), funkce vaRCHAR(20),pobocka varchar(2),mzda INTEGER); INSERT INTO Pracovnici (jmeno,funkce,pobocka,mzda) VALUES ('Karel Smutný','obchodník','1',14000); INSERT INTO Pracovnici (jmeno,funkce,pobocka,mzda) VALUES ('Kamil Káral','obchodník','1',13000); INSERT INTO Pracovnici (jmeno,funkce,pobocka,mzda) VALUES ('Josef Honec','obchodník','2',11000); INSERT INTO Pracovnici (jmeno,funkce,pobocka,mzda) VALUES ('Jana Mokrá','obchodník','3',15000); INSERT INTO Pracovnici (jmeno,funkce,pobocka,mzda) VALUES ('František Veselý','asistent','C',10000); INSERT INTO Pracovnici (jmeno,funkce,pobocka,mzda) VALUES ('Jan Novák','ředitel','C',20000); Poznámka: pro každý řádek z tabulky Pracovnici bude opakovaně prováděn vnořený dotaz – NEVHODNÉ ŘEŠENÍ !!! Korelované neboli souvztažné vnořené dotazy jsou takové, které obsahují reference na nadřazený dotaz. Korelovaný vnořený dotaz je spouštěn pro každý řádek nadřazeného dotazu. Databázové systémy 1 - př. 8

Jednosloupcové & víceřádkové vnořené dotazy A_OBCHOD SCHÉMA Zjistěte jméno zaměstnance, který má (kteří mají) nejvyšší mzdu. SELECT Jmeno FROM Pracovnici WHERE mzda >= ALL (SELECT Mzda FROM Pracovnici) Databázové systémy 1 - př. 8

Jednosloupcové & víceřádkové vnořené dotazy A_OBCHOD SCHÉMA Zjistěte zaměstnance, který má (kteří mají) vyšší nebo rovnou mzdu než je nejvyšší průměrná mzda obchodníků na jednotlivých pobočkách. SELECT Jmeno, Funkce FROM Pracovnici WHERE mzda >= ALL (SELECT AVG(Mzda) FROM Pracovnici WHERE Funkce LIKE 'obchodník‚ GROUP BY Pobocka) Databázové systémy 1 - př. 8

Databázové systémy 1 - př. 8 Množinové operátory Množinové operátory se používají ke spojování výsledků 2 dotazů. Výsledkem je vždy množina řádků (i prázdná). Obě množiny musí mít stejný formát (stejný počet sloupců stejného datového typu). UNION sjednocení množin (ve výsledky jsou řádky z obou dotazů bez duplicitních řádků) UNION ALL sjednocení množin (ve výsledky jsou řádky z obou dotazů včetně případných duplicit) INTERSECT průnik množin (ve výsledky jsou řádky, které se vyskytly v obou dotazech) MINUS, EXCEPT rozdíl množin (ve výsledky jsou řádky, které se vyskytly ve výsledku prvního dotazu a nejsou ve výsledku druhého dotazu) Databázové systémy 1 - př. 8

Databázové systémy 1 - př. 8 Množinové operátory Existují situace, kdy potřebujeme spojit dohromady výsledky z více jak jednoho dotazu. Pro tuto situaci poskytuje jazyk SQL množinové operátory. Každý výsledek dotazu můžeme chápat jako množinu a na tuto množinu můžeme aplikovat operátory, díky kterým dosáhneme požadovaných výsledků. Množinové operátory nám pomohou řešit následující problémy: Získat řádky z výsledků dvou a více dotazů. Získat takové řádky z dotazu, které se nevyskytují ve výsledku jiného dotazu. Získat řádky, které se vyskytují ve výsledcích všech dotazů. Získat řádky z výsledku dotazu, které se nevyskytují ve výsledku dotazu jiného. K řešení těchto problémů disponuje jazyk SQL těmito množinovými operátory: UNION ALL UNION MINUS INTERSECT Databázové systémy 1 - př. 8

Databázové systémy 1 - př. 8 Množinové operátory A_OBCHOD SCHÉMA Příklad SELECT oznaceni FROM produkty UNION SELECT oznaceni FROM vyrazene_produkty; Databázové systémy 1 - př. 8

Spojení tabulek – příklady A_OBCHOD SCHÉMA Zjistěte, jaké produkty z tabulky produktů nelze zakoupit v oficiálních prodejnách českých zastoupení v Praze. Pozor, při spojování může vzniknout situace, že některý produkt je možné zakoupit ve více než 1 městě. Pozn. pro řešení je použito rozdílu množin, zjistí se produkty, které je možné zakoupit v Praze a tyto se odečtou od množiny všech produktů SELECT Produkty.oznaceni FROM produkty MINUS SELECT DISTINCT Produkty.oznaceni FROM Produkty JOIN Zastoupeni ON produkty.dodavatel_id = zastoupeni.dodavatel_id JOIN Pobocky ON zastoupeni.zastoupeni_id = pobocky.zastoupeni_id WHERE pobocky.mesto = 'Praha'; Databázové systémy 1 - př. 8

Databázové systémy 1 - př. 8 Prostor pro dotazy Děkuji za pozornost http://www.iconfinder.com/icondetails/40094/128/database_storage_icon Databázové systémy 1 - př. 8