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.

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
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.
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.
1 BUMI Úvod do medicínské informatiky Počítačové cvičení č. 3 Ing. Vratislav Čmiel.
Temporální databáze a TSQL
SQL Lukáš Masopust Historie  Předchůdcem databází byly papírové kartotéky  děrný štítek  1959 konference  1960 – vytvořen jazyk COBOL.
Temporální Databáze Jaroslav Dražan. Čím se budeme zabývat Proč je čas v DB důležitý Práce s časem pomocí klasického SQL Reprezentace časové domény Spojování.
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)
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.
Cvičení 04 SQL Exists, Any, All Ing. Pavel Bednář
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.
Databázové systémy teorie a návrh relačních databázových systémů část II.
Vypracoval: Ondřej Dvorský Třída: VIII.A
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ý.
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.
Obchodní akademie, Ostrava-Poruba, příspěvková organizace Vzdělávací materiál/DUM VY_32_INOVACE_01B16 Autor Ing. Jiří Kalousek Období vytvoření březen.
Databázové systémy I Cvičení č. 10 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
Databázové systémy 2 Zkouška – 8:00. Příklad I – Procedura – 5 bodů Vytvořte proceduru P_ZK2(p_table_name VARCHAR2, p_min_nuls NUMBER, p_drop.
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.
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
Databázové systémy 1 Cvičení č. 5 Fakulta elektrotechniky a informatiky Univerzita Pardubice.
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
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
Databázové systémy a SQL
Databázové systémy a SQL
[ START WITH podmínka ] CONNECT BY podmínka
Optimalizace SQL dotazů
Přednáška 9 Triggery.
Databázové jazyky Jaroslav Pokorný FI BVŠP Bratislava
Databázové systémy a SQL
Transkript prezentace:

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 nejprve zjistit nějakou informaci a v závislosti na ní pak informace další. Mohou se vyskytovat v klauzulích WHERE a HAVING vnějšího příkazu SELECT - také v příkazech INSERT,UPDATE,DELETE. Platí: Vnořený dotaz je vždy uzavřen mezi závorkami. Vnořený dotaz je ve výrazu vždy na pravé straně. Vnořený dotaz musí vracet vždy pouze jeden sloupec (výraz). V případě, že používáme srovnávací operátory, musí vnořený dotaz vracet právě jeden řádek. Výjimkou jsou množinové operátory. Vnořené dotazy

Příklad: Vypište seznam všech studentů, kteří mají nejlepší studijní průměr. Pomocí jednoduchých SQL dotazů, tento výsledek obdržíme ve dvou krocích. Nejprve si zjistíme, jaký je nejlepší studijní průměr (použijeme agregační funkci MIN): SELECT MIN(st_prumer) FROM student; Tento dotaz nám vrátí např. číslo Toto číslo si zapamatujeme a použijeme jej v konstrukci následujícího dotazu: SELECT jmeno, prijmeni,st_prumer FROM student WHERE st_prumer = 1.05; Vnořené dotazy

Za jednoduchý vnořený dotaz budeme považovat vnořený příkaz SELECT vracející nám jednu hodnotu. SELECT jmeno, prijmeni,st_prumer FROM student WHERE st_prumer= (SELECT MIN(st_prumer) FROM student); Vnořeným SELECT-em se nám vyhodnotí Vypočtená_hodnota na jednu hodnotu a máme tedy podmínku zapsanou v pořádku. Vnořený SELECT se vyhodnotí pouze jednou, hodnotu si SQL server "zapamatuje" a s ní pak porovnává všechny ostatní hodnoty v tabulce. V jednoduchých vnořených dotazech – poddotazech, budou obdobným způsobem fungovat i další agregační funkce. Jednoduché vnořené dotazy

Operátory - IN, ANY (SOME), ALL Vnořování dotazů nám rozšiřuje klasickou množinu relačních operátorů o operátory další, které se aplikují z levé strany na sloupec a z pravé strany na vnořený dotaz vracející více hodnot. IN - slouží pro jednoduché porovnání, zdali se hodnota sloupce vlevo vyskytuje mezi hodnotami vrácenými vnořeným dotazem. Kdybychom např. chtěli jména a příjmení studentů, kteří nastoupili do školy v letech 2000 až 2003, mohli bychom takový dotaz pomocí operátoru IN zapsat takto: SELECT jmeno,prijmeni,datum_zapisu FROM student WHERE YEAR(datum_zapisu) IN (2000,2001,2002,2003); Poddotazy vracející více hodnot

ANY (nebo SOME) - určují, že relace se vztahuje na alespoň jednu z hodnot, kterou vrátí vnořený dotaz. Chceme-li seznam předmětů, které vyučuje libovolný učitel z Ústavu informatiky: SELECT nazev_pr,id_uc FROM predmet WHERE id_uc = ANY (SELECT id_uc FROM ucitel WHERE ustav ="UI") Je to možné zapsat taky: SELECT nazev_pr,id_uc FROM predmet WHERE id_uc IN(SELECT id_uc FROM ucitel WHERE ustav ="UI") To znamená, že je totožné použití IN a = ANY. Poddotazy vracející více hodnot

ALL - aplikuje relaci na všechny hodnoty vrácené poddotazem. Chceme-li seznam předmětů, které vyučuje libovolný učitel, který není z Ústavu informatiky: SELECT nazev,id_uc FROM predmet WHERE id_uc <>ALL (SELECT id_uc FROM ucitel WHERE ustav ="UI") nebo SELECT nazev,id_uc FROM predmet WHERE id_uc NOT IN (SELECT id_uc FROM ucitel WHERE ustav ="UI") V tomto případě platí, že je totožné NOT IN a <> ALL. Poddotazy vracející více hodnot

Tento operátor vrací pravdivostní hodnotu TRUE nebo FALSE na základě toho, zda vnořený SQL dotaz vrací nějakou hodnotu. EXISTS ( vnořený SQL dotaz ); Jestli vnořený SQL dotaz vrátí alespoň jeden řádek, operátor EXISTS nám vrátí TRUE. Poznámka: Vnořený SQL dotaz v argumentu operátoru EXISTS se vyhodnocuje zvlášť pro každý řádek. Chceme zkontrolovat, zdali u každého studenta jsou zadané předměty, na které se zapsal. Chceme tedy seznam studentů, u kterých nemáme v systému zadaný žádný předmět: SELECT jmeno,prijmeni FROM student WHERE NOT EXISTS (SELECT id_st FROM zapis WHERE student.id_st = zapis.id_st); Operátor EXISTS

Pro sjednocení výsledků dotazů slouží klíčové slovo UNION, za kterým následuje další příkaz SELECT. Chceme seznam všech předmětů, které navštěvuje Anna Antalová, nebo Bruno Babel. a) bez použití skládání dotazů: SELECT distinct p.nazev FROM student s, zapis z, predmet p WHERE s.id_st = z.id_st AND z.id_pr = p.id_pr AND ( (jmeno = 'Anna' AND prijmeni = 'Antalova') OR (jmeno = 'Bruno' AND prijmeni = 'Babel')); Skládání dotazů - Sjednocení dotazů

b) s pomocí sjednocení : SELECT p.nazev FROM student s, zapis z, predmet p WHERE s.id_st = z.id_st AND z.id_pr = p.id_pr AND jmeno = 'Anna' AND prijmeni = 'Antalova' UNION SELECT p.nazev FROM student s, zapis z, predmet p WHERE s.id_st = z.id_st AND z.id_pr = p.id_pr AND jmeno = 'Bruno' AND prijmeni = 'Babel'; Skládání dotazů - Sjednocení dotazů

Pro průnik se používá klíčové slovo INTERSECT. Chceme názvy všech předmětů, které navštěvuje Anna Antalová a zároveň Bruno Babel (a možná někdo další, ale to už nás nezajímá). a) bez použití průniku dotazů: SELECT distinct p.nazev FROM student s, zapis z, predmet p WHERE s.id_st = z.id_st AND z.id_pr = p.id_pr AND ( (jmeno = 'Anna' AND prijmeni = 'Antalova') AND (jmeno = 'Bruno' AND prijmeni = 'Babel')); Takový dotaz je samozřejmě chybný. V žádném řádku pseudotabulky, která vznikne spojením uvedených tří tabulek, nemůže nastat situace, že by jméno bylo Anna a zároveň Bruno. Skládání dotazů - Průnik dotazů

b) s použitím průniku dotazů : SELECT p.nazev FROM student s, zapis z, predmet p WHERE s.id_st = z.id_st AND z.id_pr = p.id_pr AND jmeno = 'Anna' AND prijmeni = 'Antalova' INTERSECT SELECT p.nazev FROM student s, zapis z, predmet p WHERE s.id_st = z.id_st AND z.id_pr = p.id_pr AND jmeno = 'Bruno' AND prijmeni = 'Babel'; Skládání dotazů - Průnik dotazů

Pohledy Z bázových tabulek odvozené virtuální tabulky. CREATE VIEW jm_pohledu [(jm_sloupce, …)] AS tab_výraz [WITH CHECK OPTION] Vytvoření pohledu - uloží definici pohledu do systémového katalogu Sloupce musí mít jednoznačná jména. Př) Pohled pro studenty přihlášené na Matematiku. CREATE VIEW Matematici AS SELECT S.* FROM Student S, Zapis Z, Predmet P WHERE S.id_st=Z.id_st AND Z.id_pr=P.id_pr AND P.nazev_pr=´Matematika´ WITH CHECK OPTION WITH CHECK OPTION - kontrola, že při změně nedochází k porušení def. pohledu.

DROP VIEW jm_pohledu [RESTRICT|CASCADE]; Odstranění pohledu - Zruší informaci o pohledu ze systémového katalogu Př) Vypište studenty přihlášené na Matematiku, kteří nejsou z prvého ročníku SELECT * FROM Matematici WHERE rocnik>1; b SELECT S.* FROM Student S, Zapis Z, Predmet P WHERE S.id_st=Z.id_st AND Z.id_pr=P.id_pr AND P.nazev_pr=´Matematika´AND S.rocnik>1; Manipulace na pohledech SŘBD musí být schopen jednoznačně transformovat operace řádku pohledu na operace nad zdrojovými bázovými tabulkami pohledu.

CREATE VIEW pocet_studentu (predmet,pocet) AS SELECT id_pr,COUNT(*) FROM Zapis GROUP BY id_pr; Pohledy s klauzulemi DISTINCT, GROUP BY, HAVING, s agregačními funkcemi a spojující několik tabulek umožňují jen čtení. Selektivní pohled CREATE VIEW Informatici AS SELECT * FROM Student WHERE obor=´Informatika´; Agregační pohled CREATE VIEW pocet_predmetu (student,pocet) AS SELECT id_st,COUNT(*) FROM Zapis GROUP BY id_st;

Zadání cv.8: Z databáze STUDIJNI_AGENDA 1. Vypište abecedně seřazené studenty, dle příjmení a jména a k nim přiřazeny názvy předmětů, které navštěvují. 2. Vypište seznam všech studentů, kteří nejsou zapsaní na žádný předmět. 3. Vypište jména a příjmení všech studentů, kteří mají nejhorší studijní průměr. 4. Vypište počet učeben v jednotlivých blocích (A,B…) 5. Vypište počet předmětů, které se vyučují na libovolné učebně v bloku A. 6. Vypište seznam všech studentů, kteří jsou zapsáni v maximálním počtu předmětů. 7. Vypište seznam všech předmětů, do kterých se přihlásilo alespoň 5 studentů a setřiďte je sestupně podle počtu přihlášených studentů. 8. Vypište seznam všech učitelů, pro které je počet předmětů, na které se někdo zapsal, menší než Vypište přehled počtu učitelů podle jejich titulů na jednotlivých ústavech.