Databázové systémy I

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

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

5. blok Souhrnné a skupinové dotazy

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Databáze SQL SELECT. David Hoksza

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

Operátory ROLLUP a CUBE

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

Kapitola 4: SQL. Základní struktura

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

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

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

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

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

Vzorové příklady SQL. Tabulka: Kniha CREATE TABLE kniha (id INTEGER, název VARCHAR(50), PRIMARY KEY (id))

KIV/ZIS - SELECT, opakování

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

KIV/ZIS - SQL dotazy. stáhnout soubor ZIS- 04_TestovaciDatabaze accdb. SQL dotazy. budeme probírat pouze SELECT

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

Informační systémy 2008/2009. Radim Farana. Obsah. Jazyk SQL

1. Relační databázový model

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

Materiál ke cvičením - SQL

- sloupcové integritní omezení

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

SQL. strukturovaný dotazovací jazyk. Structured Query Language (SQL)

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

Databázové systémy a SQL

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

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

PG 9.5 novinky ve vývoji aplikací

Jazyk SQL slajdy k přednášce NDBI001

MS Access Dotazy SQL

Obchodní akademie a Jazyková škola s právem státní jazykové zkoušky Jihlava

Databázové systémy a SQL

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

Stručný obsah. část III Aktualizace dat Kapitola 10: Aktualizace databáze 257 Kapitola 11: Integrita dat 275 Kapitola 12: Zpracování transakcí 307

6. SQL složitější dotazy, QBE

SQL v14. 4D Developer konference. 4D Developer conference 2015 Prague, CZ Celebrating 30 years

Dotazy v SQL. Výraz relační algebry R1( )[A1,A2,...,Aj] lze zapsat takto: SELECT A1,A2,...,Aj FROM R1 WHERE. Výraz (R1, R2... Rk)( )[A1,A2,...

RELAČNÍ DATABÁZOVÉ SYSTÉMY

Databáze 2011/2012 SQL SELECT II. RNDr.David Hoksza, Ph.D.

Architektury databázových

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

Databázové systémy. Dotazovací jazyk SQL - II

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

7. Integrita a bezpečnost dat v DBS

7. Integrita a bezpečnost dat v DBS

MS Access Dotazy SQL

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

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

Materializované pohledy

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

Jazyk S Q L základy, příkazy pro práci s daty

Inovace a zkvalitnění výuky prostřednictvím ICT Databázové systémy MySQL základní pojmy, motivace Ing. Kotásek Jaroslav

Řešené příklady STUDENT(RČ, JMÉNO, SPECIALIZACE) PŘEDMĚT(KÓD, NÁZEV, SYLLABUS, GARANT) ZÁPIS(RČ, KÓD, SEMESTR, ZNÁMKA)

Databázové systémy 1

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

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

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

PL/SQL. Jazyk SQL je jazykem deklarativním, který neobsahuje procedurální příkazy jako jsou cykly, podmínky, procedury, funkce, atd.

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

InnoDB transakce, cizí klíče, neumí fulltext (a nebo už ano?) CSV v textovém souboru ve formátu hodnot oddělených čárkou

Distanční opora předmětu: Databázové systémy Tématický blok č. 1: Dotazovací jazyk SQL Autor: RNDr. Jan Lánský, Ph.D.

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

Základy informatiky. 08 Databázové systémy. Daniela Szturcová

Databáze 2011/2012 SQL DDL (CREATE/ALTER/DROP TABLE), DML (INSERT/UPDATE/DELETE) RNDr.David Hoksza, Ph.D.

Databázové systémy a SQL

Jazyk SQL databáze SQLite. připravil ing. petr polách

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

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

Západočeská univerzita v Plzni Katedra informatiky a výpočetní techniky. 9. června krovacek@students.zcu.cz

Vkládání poddotazů do dotazů

Temporální databáze. Jan Kolárik Miroslav Macík

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

SQL - trigger, Databázové modelování

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

Zápisování dat do databáze

Obsah. Kapitola 1. Kapitola 2. Kapitola 3. Kapitola 4. Úvod 11. Stručný úvod do relačních databází 13. Platforma 10g 23

Použití databází na Webu

SII - Informatika. 1. Atribut relace, jehož hodnota jednoznačně určuje prvek v jiné relaci, se nazývá:

Kapitola 6: Omezení integrity. Omezení domény

Semestrální práce z DAS2 a WWW

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

Sada 1 - PHP. 14. Úvod do jazyka SQL

Základy informatiky. 06 Databázové systémy. Kačmařík/Szturcová/Děrgel/Rapant

Transkript:

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é 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 opakování

Souhrnné dotazy 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!!!

Agregační funkce s DISTINCT 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í.

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>;

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;

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

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. a) 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) b) 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

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;

Pohledy příklady 1 CREATE VIEW Pracovnici_pobocky AS SELECT Jmeno, Funkce, Pobocka FROM Pracovnici WITH READ ONLY; tabulka PRACOVNICI Použití: SELECT * FROM Pracovnici_pobocky; SELECT Jmeno, Pobocka FROM Pracovnici_pobocky WHERE Pobocka='3';

Pohledy příklady 2 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;

Pohledy příklady 3 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;

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';

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'); INSERT INTO Pracovnici_centraly(Jmeno, Funkce, Pobocka) 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';

Pohledy - význam 1) Zjednodušení konstrukce náročných dotazů, 2) 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), 3) 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).

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)

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)

Vnořené dotazy - příklad 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 obchodník 1 13000 Josef Honec obchodník 2 11000 Jana Mokrá obchodník 3 15000 František Veselý asistent C 10000 Jan Novák ředitel C 20000

Jednořádkové & jednosloupcové vnořené dotazy Zjistěte jméno zaměstnance, který má nejvyšší mzdu. SELECT Jmeno FROM Pracovnici WHERE mzda = (SELECT max(mzda) FROM Pracovnici)

Víceřádkové & jednosloupcové vs. jednořádkové & jednosloupcové vnořené dotazy 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á') 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.

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 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ý alespoň pro JEDNU položku seznamu. 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.

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

In-line pohledy 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;

Vícesloupcové & víceřádkové vnořené dotazy 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.

Jednořádkové & jednosloupcové vnořené dotazy (korelované) 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 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.

Jednosloupcové & víceřádkové vnořené dotazy Zjistěte jméno zaměstnance, který má (kteří mají) nejvyšší mzdu. SELECT Jmeno FROM Pracovnici WHERE mzda >= ALL (SELECT Mzda FROM Pracovnici)

Jednosloupcové & víceřádkové vnořené dotazy 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)

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)

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

Množinové operátory Příklad SELECT oznaceni FROM produkty UNION SELECT oznaceni FROM vyrazene_produkty;

Spojení tabulek příklady 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ě. 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'; 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ů

Prostor pro dotazy DĚKUJI ZA POZORNOST