SQL - SELECT. Ing. Michal Valenta PhD. Databázové systémy BI-DBS ZS 2010/11, P edn. 7

Podobné dokumenty
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

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,...

SQL - úvod. Ing. Michal Valenta PhD. Databázové systémy BI-DBS ZS 2010/11, P edn. 6

Databázové systémy BIK-DBS

Jazyk SQL 1. Michal Valenta. Katedra softwarového inženýrství FIT České vysoké učení technické v Praze c Michal Valenta, 2012 BI-DBS, ZS 2011/12

Jazyk SQL slajdy k přednášce NDBI001

Jazyk SQL. Jaroslav Pokorný MFF UK, Praha J. Pokorný 1

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

Konceptuální modelování

Transformace ER SQL. Ing. Michal Valenta PhD. Databázové systémy BI-DBS ZS 2010/11, P edn. 9

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

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

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

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

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

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

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

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

Seminá e. Ing. Michal Valenta PhD. Databázové systémy BI-DBS ZS 2010/11, sem. 1-13

Databáze SQL SELECT. David Hoksza

Databázové systémy I

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

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

Kapitola 4: SQL. Základní struktura

Normalizace rela ního schématu

Jazyk SQL 3 - DML, DDL, TCL, DCL

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

Databázové modely. Ing. Michal Valenta PhD. Databázové systémy BI-DBS ZS 2010/11, P edn. 2

PG 9.5 novinky ve vývoji aplikací

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

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

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

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

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

Úvod, terminologie. Ing. Michal Valenta PhD. Databázové systémy BI-DBS ZS 2010/11, P edn. 1

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

Operátory ROLLUP a CUBE

P íklady k prvnímu testu - Pravd podobnost

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

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

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

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

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

Transak ní zpracování I

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

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

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

Materializované pohledy

Databázové systémy. * relační kalkuly. Tomáš Skopal. - relační model

5. blok Souhrnné a skupinové dotazy

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

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

DBS relační DB model, relační algebra

Databázové systémy a SQL

Transformace konceptuálního modelu na relační

DB1 cvičení 4 spojení tabulek a složitější dotazy

Relační model dat (Codd 1970)

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

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

KIV/ZIS - SELECT, opakování

Skalární sou in. Úvod. Denice skalárního sou inu

U koly na procvic ení jazyka T-SQL

- sloupcové integritní omezení

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

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

Ř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)

1. Relační databázový model

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

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

MS Access Dotazy SQL

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

Obsah. SQL konstrukce select join Rekurze (rekurzivní with) Analytické funkce, group by Pivoting

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

Databázové systémy Tomáš Skopal

RELAČNÍ DATABÁZOVÉ SYSTÉMY

Michal Valenta DBS Databázové modely 2. prosince / 35

Jevy, nezávislost, Bayesova v ta

Formální sémantika SQL dotazování

Marian Kamenický. Syntea software group a.s. marian.kamenicky. MFFUK Praha 2012/13

Dotazovací jazyk pro řazená data

Státnice - Rekurzivní a rekurzivn spo etné mnoºiny

Soft Computing (SFC) 2014/2015 Demonstrace u ení sít RCE, Java aplikace

DATA CUBE. Mgr. Jiří Helmich

MS Access Dotazy SQL

PARADIGMATA PROGRAMOVÁNÍ 2A MAKRA III

Pravd podobnost a statistika - cvi ení. Simona Domesová místnost: RA310 (budova CPIT) web:

OQL. (Object Query Language) Michal Bartoš Filip Bureš

Binární operace. Úvod. Pomocný text

Databázové systémy BIK-DBS

Národního registru u ivatel léka sky indikovaných substitu ních látek (papírové hlá enky)

kolní ád Mate ské koly, sou ásti Základní koly Bílá 1, Praha 6 (dále jen mate ská kola )

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

Databázové systémy a SQL

P íklad 1 (Náhodná veli ina)

Databázové systémy I. 4. přednáška

Materiál ke cvičením - SQL

Modelování v elektrotechnice

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

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

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

Transkript:

SQL - SELECT Ing. Michal Valenta PhD. Katedra softwarového inºenýrství Fakulta informa ních technologií ƒeské vysoké u ení technické v Praze c Michal Valenta, 2010 Databázové systémy BI-DBS ZS 2010/11, P edn. 7 Evropský sociální fond. Praha & EU: Investujeme do va²í budoucnosti Michal Valenta (FIT ƒvut) SQL - SELECT BI-DBS, 2010, P edn. 7 1 / 33

Agrega ní funkce Agrega ní funkce D9. Kolik je lm nato ených v letech 1938-1940? SELECT COUNT(*) AS pocet_lmu_38_40 FROM Filmy WHERE rok BETWEEN 1938 AND 1940; D10. Kolik r zných lm je rezervovaných? SELECT COUNT (DISTINCT jméno_f) FROM Rezervace; D11. Jaká je pr m rná cena výp j ky? SELECT AVG(cena) FROM Vypujcky; nezahrnuje výp j ky bez ceny (s cenou NULL) SELECT AVG(COALESCE (cena,0)) FROM Vypujcky; výp j ky s cenou NULL se p eloºí jako 0 a zapo tou se do výsledku Michal Valenta (FIT ƒvut) SQL - SELECT BI-DBS, 2010, P edn. 7 2 / 33

Agrega ní funkce Agrega ní funkce Syntaxe: agrega ní_funkce ({ALL DISTINCT} sloupec výraz) Výjimka COUNT, SUM, MAX,MIN, AVG a mnoho dal²ích Výpo et nap í skupinou zdrojových ádk. Co s NULL hodnotami ve sloupci? Co s duplicitními hodnotami ve sloupci? COUNT( ) = 0 COUNT(A)... ignoruje NULL COUNT(*)... zapo te NULL Michal Valenta (FIT ƒvut) SQL - SELECT BI-DBS, 2010, P edn. 7 3 / 33

Agrega ní funkce Agrega ní funkce D12. Najdi po et výp j ek s cenou výp j ky do 899 K. SELECT COUNT(*) FROM Vypujcky WHERE cena < 899.00; D13. Zjisti pro zahrani ní zam stnance celkový objem jejich plat p epo tený na EUR. SELECT SUM (plat)/24.65 AS euro_plat FROM Zamestnanci WHERE rod_c IS NULL; nebo: SELECT SUM(plat/24.65) AS euro_plat FROM Zamestnanci WHERE rod_c IS NULL; První varianta je z ejm efektivn j²í. Michal Valenta (FIT ƒvut) SQL - SELECT BI-DBS, 2010, P edn. 7 4 / 33

Seskupování ádk GROUP BY a HAVING GROUP BY motivace D14. Zjisti nejvy²²í cenu výp j ky a zjisti, které výp j ky se za tuto cenu uskute nily. První nápad: SELECT c_kopie, MAX (cena) FROM Výpujcky; ERROR: column "vypujcky.c_kopie"must appear in the GROUP BY clause or be used in an aggregate function Správné e²ení uvedeme dále. Michal Valenta (FIT ƒvut) SQL - SELECT BI-DBS, 2010, P edn. 7 5 / 33

Seskupování ádk GROUP BY a HAVING GROUP BY D15. Najdi pro kaºdý lm po et herc, kte í v n m hrají. SELECT jmeno_f, COUNT (rod_c_herce) AS pocet_hercu FROM Obsazeni GROUP BY jméno_f; ZDROJ: JMENO_F HEREC Batalion Vítová H....... Kristián Mandlová A Kristián Nový O. Lízino ²t stí Sulanová Z Madla zpívá Sulanová Z. M ste ko na... Bohá L. M ste ko na... Marvan J. M ste ko na... Plachta J....... Rozina sebranec Glázrová M. Rozina sebranec t pánek P....... VYSLEDEK: JMENO_F POCET_HERCU Batalion 1...... Kristián 2 Lízino ²t stí 1 Madla zpívá 1 M ste ko na... 3...... Rozina sebranec 2...... Michal Valenta (FIT ƒvut) SQL - SELECT BI-DBS, 2010, P edn. 7 6 / 33

Seskupování ádk GROUP BY a HAVING Seskupování ádk D16. Najdi pro kaºdý lm z tabulky OBSAZENI po et herc, kte í v n m hrají. Ve výsledku ponech pouze lmy, kde hrají dva a více herc. SELECT jmeno_f, COUNT (herec) AS pocet_hercu FROM Obsazeni GROUP BY jméno_f HAVING COUNT(herec)>1; Výsledek bývá implicitn se azen podle seskupovacího sloupce. Michal Valenta (FIT ƒvut) SQL - SELECT BI-DBS, 2010, P edn. 7 7 / 33

Seskupování ádk GROUP BY a HAVING SELECT se v²emi klauzulemi D17. Najdi pro kaºdý lm z roku 1945 po et herc, kte í v n m hrají. Ve výsledku ponech lmy, kde hrají dva herci a více. Se a výsledek podle po tu herc. SELECT Filmy.jmeno_f, COUNT (herec) AS pocet_hercu FROM Obsazení JOIN Filmy USING (jmeno_f) WHERE Filmy.rok = 1945 GROUP BY Filmy.jméno_f HAVING COUNT (herec) >= 2 ORDER BY pocet_hercu; Po adí vyhodnocení: 1 zdroj klauzule FROM 2 selekce klauzule WHERE 3 seskupení klauzule GROUP BY 4 agrega ní funkce podle výsledk GROUP BY klazule SELECT 5 selekce na výsledky agrega ní funkce klauzule HAVING 6 azení výsledku klauzule ORDER BY Michal Valenta (FIT ƒvut) SQL - SELECT BI-DBS, 2010, P edn. 7 8 / 33

Vno ené dotazy Nevztaºený poddotaz D18. Vyber lmy, které mají stejného reºiséra jako má lm vadlenka. SELECT F1.jmeno_f FROM Filmy F1 WHERE F1.reziser = (SELECT reziser FROM Filmy F2 WHERE F2.jmeno_f=' vadlenka'); Co kdyº bude v databázi více lm jménem vadlenka? 1 Atribut jméno_f je klí em, dotaz je tedy v tomto p ípad bezpe ný. 2 Pokud nemáme jistotu unikátní hodnoty, nelze pouºít =. 3 = o ekává jako druhý operand jednu hodnotu, nikoliv mnoºinu! Michal Valenta (FIT ƒvut) SQL - SELECT BI-DBS, 2010, P edn. 7 9 / 33

Vno ené dotazy Nevztaºený poddotaz D19. Zjisti nejvy²²í cenu výp j ky a zjisti, které výp j ky se za tuto cenu uskute nily. SELECT * FROM Vypujcky WHERE cena = (SELECT MAX (cena) FROM vypujcky); Vno ený dotaz zde vrátí práv jednu hodnotu. Michal Valenta (FIT ƒvut) SQL - SELECT BI-DBS, 2010, P edn. 7 10 / 33

Vno ené dotazy Poddotaz v klauzuli WHERE Vztaºené poddotazy D20. Vyber kina a jejich adresy, kde mají na programu více neº 8 lm. SELECT K.název_k, K.adresa FROM Kina K WHERE (SELECT COUNT (jméno_f) FROM P edstavení P WHERE P.název_k=K.název_k)>8; Vztaºené poddotazy se odvolávají na nad azený dotaz. Jejich vyhodnocení je obvykle náro n j²í (draº²í) neº u dotaz nevztaºených. Michal Valenta (FIT ƒvut) SQL - SELECT BI-DBS, 2010, P edn. 7 11 / 33

Vno ené dotazy Poddotaz v klauzuli WHERE Vztaºené poddotazy D21. Vyber jména a adresy kin, která hrají alespo tolik lm jako kino Mír. SELECT DISTINCT K.nazev_k FROM Kina K WHERE K.nazev_k <> `Mír' AND (SELECT COUNT(jméno_f) FROM Predstaveni P1 WHERE P1.nazev_k= K.nazev_k) >= (SELECT COUNT(jmeno_f) FROM Predstaveni P2 WHERE P2.nazev_k='Mír'); Michal Valenta (FIT ƒvut) SQL - SELECT BI-DBS, 2010, P edn. 7 12 / 33

Vno ené dotazy Poddotaz v klauzuli SELECT Poddotaz v klauzuli SELECT D22. Vypi² seznam v²ech lm a u kaºdého uve po et jeho kopií. SELECT jmeno_f, COUNT (c_kopie) as pocet_kopii FROM Kopie K GROUP BY jmeno_f; V odpov di chybí lmy bez kopií. SELECT F.*,(SELECT COUNT (c_kopie) FROM Kopie K WHERE K.jmeno_f=F.jmeno_f) as pocet_kopii FROM Filmy F; Zde jsou ve výsledku i lmy bez kopií, tedy mající 0 kopií. Michal Valenta (FIT ƒvut) SQL - SELECT BI-DBS, 2010, P edn. 7 13 / 33

Vno ené dotazy Poddotaz v klauzuli FROM Poddotaz v klauzuli FROM D23. Najdi pr m rnou cenu z minimálních cen kopií pro kaºdého zákazníka. SELECT AVG(T.minim_c) FROM (SELECT MIN(cena) FROM Vypujcky GROUP BY rod_c) AS T(minim_c); nebo: SELECT AVG(T.minim_c) FROM (SELECT MIN(cena) AS minim_c FROM Vypujcky GROUP BY rod_c) T; Michal Valenta (FIT ƒvut) SQL - SELECT BI-DBS, 2010, P edn. 7 14 / 33

Vn j²í spojení Vn j²í spojení D24. (znovu) Vypi² seznam v²ech lm a u kaºdého uve po et jeho kopií, v etn lm bez kopií. varianta 1: (p edchozí slide): SELECT F.*,(SELECT COUNT (c_kopie) FROM Kopie K WHERE K.jmeno_f=F.jmeno_f) as pocet_kopii FROM Filmy F; varianta 2: (pomocí vn j²ího spojeni): SELECT jmeno_f, COUNT (c_kopie) as pocet_kopii FROM Kopie K RIGHT OUTER JOIN Filmy USING(jméno_f) GROUP BY jmeno_f; Michal Valenta (FIT ƒvut) SQL - SELECT BI-DBS, 2010, P edn. 7 15 / 33

Vn j²í spojení Vliv prázdné mnoºiny na agregaci Vliv prázdné mnoºiny na agregaci D25. Najdi vedoucí kin, kte í mají zaregistrované výp j ky kopií za mén neº 2000 korun. SELECT DISTINCT jmeno_v FROM Kina K JOIN Zakaznici Z on (K.jmeno_v = Z.jmeno) WHERE (SELECT SUM (V.cena) FROM Vypujcky V WHERE V.rod_c = Z.rod_c) < 2000; Nezahrnuje vedoucí, kte í si nep j ili nic! ( SUM( )=NULL )... v etn t ch, kte í si nic nep j ili. SELECT DISTINCT jmeno_v FROM Kina K JOIN Zakaznici Z on (K.jmeno_v = Z.jmeno) WHERE COALESCE ((SELECT SUM (V.cena) FROM Vypujcky V WHERE V.rod_c = Z.rod_c),0) < 2000; Michal Valenta (FIT ƒvut) SQL - SELECT BI-DBS, 2010, P edn. 7 16 / 33

Hodnotové výrazy CASE Hodnotové výrazy výraz CASE CASE CASE <p epína > WHEN <hodnota1> THEN <výraz1> WHEN <hodnota2> THEN <výraz2>... ELSE <výraz3> END D26. Hraje se n kde lm Fale²ná ko i ka? SELECT 'Film Fale²ná ko i ka se' (CASE COUNT(*)) WHEN 0 THEN 'ne' ELSE ' ' END) 'hraje.' FROM Predstaveni WHERE jmeno_f = 'Fale²ná ko i ka' ; Michal Valenta (FIT ƒvut) SQL - SELECT BI-DBS, 2010, P edn. 7 17 / 33

Hodnotové výrazy CASE Hodnotové výrazy výraz CASE CASE CASE <p epína > WHEN <hodnota1> THEN <výraz1> WHEN <hodnota2> THEN <výraz2>... ELSE <výraz3> END D27. Dopl te seznam výp j ek o p íznak levná/drahá. SELECT v.*,(case WHEN cena <10 THEN 'levná' WHEN cena >100 Then 'drahá' END) FROM Výp j ka V; Michal Valenta (FIT ƒvut) SQL - SELECT BI-DBS, 2010, P edn. 7 18 / 33

Hodnotové výrazy Funkce COALESCE Hodnotové výrazy COALESCE Funkce COALESCE (V1,V2,..Vn) je ekvivalentní výrazu: CASE WHEN V1 IS NOT NULL THEN V1 WHEN V2 IS NOT NULL THEN V2... WHEN Vn IS NOT NULL THEN Vn D28. N kte í zam stnanci nemají plat. Vypi² seznam a místo NULL zobraz 0. SELECT osobni_c, jmeno, COALESCE(PLAT,0) AS Mesicni_prijem FROM Zamestnanci; Michal Valenta (FIT ƒvut) SQL - SELECT BI-DBS, 2010, P edn. 7 19 / 33

Hodnotové výrazy Predikát LIKE Predikát LIKE D29. Najdi platy zam stnanc, kte í jsou z Kolína. SELECT Z.plat FROM Zam stnanci Z WHERE Z.adresa LIKE '%Kol_n%'; Zástupné symboly % skupina znak (i prázdná) _ práv jeden znak Michal Valenta (FIT ƒvut) SQL - SELECT BI-DBS, 2010, P edn. 7 20 / 33

Hodnotové výrazy Predikát LIKE ádkové výrazy Výrazy Výraz: (R.cena, R.datum) = (S.cena, S.datum) lze pouºít namísto: R.cena = S.cena AND (R.datum=S.datum) Výraz: (R.cena, R.datum) > (S.cena, S.datum) lze pouºít namísto: R.cena > S.cena OR (R.cena = S.cena AND R.datum > S.datum) Michal Valenta (FIT ƒvut) SQL - SELECT BI-DBS, 2010, P edn. 7 21 / 33

Hodnotové výrazy Predikáty IS NULL... Predikáty IS NULL IS [NOT] NULL IS [NOT] TRUE IS [NOT] FALSE D30. Vypi² ísla zakázek od výp j ek, které jsou p j eny neomezen (chybí hodnota data vrácení). SELECT c_zak FROM Vypujcky WHERE datum_v IS NULL; Michal Valenta (FIT ƒvut) SQL - SELECT BI-DBS, 2010, P edn. 7 22 / 33

Hodnotové výrazy Mnoºinový predikát IN Mnoºinový predikát IN predikát IN pouºití <výraz>[not] IN (<vý et_mnoºiny_hodnot>) <výraz>[not] IN (<poddotaz>) D31. Najdi lmy s danými reºiséry. SELECT jméno_f FROM Filmy WHERE Reziser IN ('Menzel', 'Chytilová', 'Kachy a'); D32. Najdi adresy kin, ve kterých dávají lm Kolja. SELECT adresa FROM Kina WHERE nazev_k IN (SELECT nazev_k FROM Predstaveni WHERE jmeno_f='kolja'); Michal Valenta (FIT ƒvut) SQL - SELECT BI-DBS, 2010, P edn. 7 23 / 33

Hodnotové výrazy Mnoºinový predikát IN Mnoºinový predikát IN D33. Najdi jména zákazník s rezervací lmu od reºiséra Menzela. SELECT jmeno FROM Zákazníci WHERE rod_c IN (SELECT rod_c FROM Rezervace R WHERE R.jmeno_f IN (SELECT F.jmeno_f FROM Filmy F WHERE F.reziser = `Menzel')); výraz IN( ) vrací FALSE výraz IN(ℵ) vrací UNKNOWN Poznámka: ℵ reprezentuje n-tici ( ádek) tvo enou pouze NULL hodnotami. Michal Valenta (FIT ƒvut) SQL - SELECT BI-DBS, 2010, P edn. 7 24 / 33

Hodnotové výrazy Mnoºinové predikáty ANY, ALL, SOME Mnoºinové predikáty ANY, ALL, SOME > SOME < SOME <> SOME = SOME > ALL < ALL <>ALL =ALL synonyma: ANY SOME = SOME IN <> ALL NOT IN D34. Najdi zam stnance, kte í mají plat vy²²í neº v²ichni zam stnanci z Prahy. SELECT osobni_c, jmeno FROM Zamestnanci WHERE plat > ALL (SELECT Z.plat FROM Zamestnanci Z WHERE Z.adresa LIKE '%Praha%'); nebo: SELECT osobni_c, jmeno FROM Zamestnanci WHERE plat > (SELECT max(z.plat) FROM Zamestnanci Z WHERE Z.adresa LIKE '%Praha%'); Michal Valenta (FIT ƒvut) SQL - SELECT BI-DBS, 2010, P edn. 7 25 / 33

Hodnotové výrazy Mnoºinový predikát UNIQUE Mnoºinový predikát UNIQUE D35. Vypi² jména a adresy zákazník, kte í mají nejvý²e jednu výp j ku. SELECT Z.jmeno, Z.adresa FROM Zakaznici Z WHERE UNIQUE (SELECT * FROM Vypujcka V WHERE V.rod_c = Z.rod_c); výraz UNIQUE( ) vrací TRUE výraz UNIQUE(ℵ) vrací TRUE výraz EXISTS( ) vrací FALSE výraz EXISTS(ℵ) vrací FALSE Poznámka: ℵ reprezentuje n-tici ( ádek) tvo enou pouze NULL hodnotami. Michal Valenta (FIT ƒvut) SQL - SELECT BI-DBS, 2010, P edn. 7 26 / 33

Kvantikace v SQL Kvantikace v SQL Existen ní kvantikátor x.p (x) v SQL: [NOT] EXISTS prakticky testuje prázdnost/neprázdnost v mnoºin výsledk Univerzální kvantikátor x.p (x) není v SQL p ímo implementován, implementovat pomocí : x.p (x) x.( P (x)) Kaºdý lm má reºiséra Neexistuje lm bez reºiséra. nebo: Neexistuje lm, pro který není pravda, ºe má reºiséra. Michal Valenta (FIT ƒvut) SQL - SELECT BI-DBS, 2010, P edn. 7 27 / 33

Kvantikace v SQL Kvantikace v SQL D36. Najdi jména zákazník, kte í mají rezervovaný n jaký lm. D36'. Najdi jména zákazník takových, ºe pro n existuje záznam o rezervaci n kterého lmu. SELECT jmeno FROM zakazník Z WHERE EXISTS (SELECT 1 FROM Rezervace WHERE rod_c=z.rod_c); Nezáleºí na tom, co se vybere v klauzuli SELECT vno eného dotazu. Vyhodnocuje se prázdnost/neprázdnost mnoºiny denované vno eným dotazem. Michal Valenta (FIT ƒvut) SQL - SELECT BI-DBS, 2010, P edn. 7 28 / 33

Kvantikace v SQL Kvantikace v SQL D37. Najdi kina, která nic nehrají. D37'. Najdi taková kina, pro n º neexistuje p edstavení. SELECT nazev_k FROM Kina K WHERE NOT EXISTS (SELECT 'X' FROM P edstavení WHERE K.nazev_k=P.nazev_k); Nezáleºí na tom, co se vybere v klauzuli SELECT vno eného dotazu. Vyhodnocuje se prázdnost/neprázdnost mnoºiny denované vno eným dotazem. Michal Valenta (FIT ƒvut) SQL - SELECT BI-DBS, 2010, P edn. 7 29 / 33

Kvantikace v SQL Kvantikace v SQL D38. Najdi kino, které hraje v²echna p edstavení. D38'. Najdi takové kino, pro n º neexistuje p edstavení, které není na programu tohoto kina. SELECT nazev_k FROM Kina K WHERE NOT EXISTS (SELECT 1 FROM Predstaveni P WHERE K.nazev_k <> P.nazev_k); Pouºita dvojitá negace ve spojení s existen ním kvantikátorem pro opis univerzálního kvantikátoru. Michal Valenta (FIT ƒvut) SQL - SELECT BI-DBS, 2010, P edn. 7 30 / 33

Mnoºinové operace Mnoºinové operace UNION INTERSECT EXCEPT ; v Oracle se pouºívá MINUS UNION ALL ; ne e²í duplicity, je výrazn rychlej²í neº UNION, net ídí výsledek D39. Najdi kina, která nic nehrají. (SELECT nazev_k FROM Kina) EXCEPT (SELECT nazev_k FROM Predstaveni); Poznánka: Je nezbytné, aby relace (mnoºiny), které vstupují do mnoºinových operací byly vzájemn kompatibilní. Tedy relace musí mít shodný po et atribut a odpovídající si atributy musí být stejného typu (nemusí se jmenovat stejn ). Michal Valenta (FIT ƒvut) SQL - SELECT BI-DBS, 2010, P edn. 7 31 / 33

Mnoºinové operace Mnoºinové operace D40. Najdi lmy, které jsou rezervované nebo p j ené. (SELECT Jmeno_f FROM Rezervace) UNION (SELECT Jmeno_f FROM Vypujcky JOIN Filmy USING (c_kopie)); D41. Najdi lmy, které jsou rezervované a p j ené. (SELECT Jmeno_f FROM Rezervace) INTERSECT (SELECT Jmeno_f FROM Vypujcky JOIN Filmy USING (c_kopie)); D42. Najdi lmy, které jsou rezervované a nejsou p j ené. (SELECT Jmeno_f FROM Rezervace) EXCEPT (SELECT Jmeno_f FROM Vypujcky JOIN Filmy USING (c_kopie)); V d sledku eliminace duplicit bývá výsledek implicitn set íd n vzestupn. Michal Valenta (FIT ƒvut) SQL - SELECT BI-DBS, 2010, P edn. 7 32 / 33

Mnoºinové operace Mnoºinové operace D43. Vypi² adresy zákazník a zam stnanc. (SELECT Jmeno,Adresa From Zakaznici) UNION (SELECT Jmeno,Adresa FROM Zamestnanci); Nesmíme zapomenout na kompatibilitu mnoºin.... moºno zajistit téº pomocí CORRESPONDING (SELECT * From Zakaznici) UNION CORRESPONDING (SELECT * FROM Zamestnanci); Michal Valenta (FIT ƒvut) SQL - SELECT BI-DBS, 2010, P edn. 7 33 / 33