J. Macur, FAST VUT, 2011 (kombinované studium BU04)

Slides:



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

KIV/ZIS Cvičení 6 SQL - SELECT.
MS ACCESS - DOTAZY DATABÁZOVÉ SYSTÉMY.
SQL Další dotazy a pohledy
Cvičení 05 Joins, isNull, case when Ing. Pavel Bednář
Cvičení 06 Ing. Pavel Bednář
Základy jazyka SQL Jan Tichava
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
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
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 II Přednáška č. 6 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.
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.
A4B33DS & X33MIS Zdeněk Kouba
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)
KONCEPTUÁLNÍ MODELOVÁNÍ
Školení správců II. Petr Pinkas RNDr. Vít Ochozka.
Fakulta elektrotechniky a informatiky
© Doc. Miniberger, BIVŠ Datové modelování II Atributy Převod DM do schématu SŘBD Dotazovací jazyk SQL Multidimenzionální modelování Principy.
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ý.
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ý.
Architektury a techniky DS Cvičení č. 9 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky
Databázové systémy Tomáš Skopal
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
ACCESS – Primární klíče, relace 15. září 2013VY_32_INOVACE_080305_ACCESS_Primarni_klice_relace_DUM Autorem materiálu a všech jeho částí, není-li uvedeno.
Aplikační a programové vybavení
Databázové systémy Informatika pro ekonomy, př. 18.
Databázové systémy SQL Výběr dat.
Databázové Aplikace Slidy ke cvičení DBI026, část 3 KSI MFF UK Verze
CUBE - Operátor relační agregace
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
Úvod do databází zkrácená verze.
Databázové systémy a SQL
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
Relační databázová technologie
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
Optimalizace SQL dotazů
Relační model databáze
Dotazovací jazyk SQL - II
Přednáška 7 SQL – JOIN.
Přednáška 6 SQL – spojení tabulek.
Databázové systémy a SQL
Transkript prezentace:

J. Macur, FAST VUT, 2011 (kombinované studium BU04)

ČísloJménoDruhVýběhPlochaŽereKolikOšetřovatelMzda 23SkippyKlokanU vchodu500Seno10Novák Jan BrumlaMedvědNa skalách300Maliny50Lom Karel KulíkVombatU vchodu500Tráva5Novák Jan JanaMedvědNa skalách300Maliny50Lom Karel Při provozu zjistíme, že potřebujeme ještě: vybavenost každého výběhu datum narození a odměny ošetřovatelů seznam nemocí, kterými zvířata trpí... U každého exempláře druhu Medvěd bude stejná hodnota atributu stravování, stejné hodnoty plochy výběhu u zvířat žijících společně, stejná mzda u zvířat, které ošetřuje Novák – datová redundance + riziko nekonzistence Řešení: normalizace databáze (vytvoření více tabulek spojených klíči)

Master tabulka Zvíře idjmenodruh_idvybeh_idOsetrovatel_id 23Skippy Brumla Kulík Jana iddruhzerekolikchoroby 15KlokanSeno10Zánět kapsy 8MedvědMaliny50Upadnutí ucha 45VombatTráva5Lenost... Druh (slave tabulka) idjmenoprijmenimzdaodmena 18JanNovák KarelLom Osetrovatel Vybeh idnazevplochavybaveni 32U vchodu500Domeček 14Na skalách300Bazén... Primární klíč (Primary Key) Cizí klíč (Foreign Key) The key, the whole key, and nothing but the key, so help me Codd

ZvířeVýběh Druh Ošetřovatel Kardinalita vztahu Kardinalita M : N (síťový model) 1 : N (hierarchický model) 1 : 1 (relační model)

ZvířeOšetřovatel ZvířeOšetřovatelZvíře_Ošetř M : N O každé zvíře se může starat více ošetřovatelů Dva cizí klíčeJen primární klíč

ZvířeVýběh Druh Kardinalita vztahu Ošetřovatel Zvíře_Ošetř

SELECT jmeno FROM zvire WHERE vybeh_id = 34 SELECT jmeno, prijmeni, mzda FROM osetrovatel WHERE mzda>10000 ORDER BY prijmeni Výstupem příkazu je relace (výstupní množina) – možnost řetězení za klauzulí FROM

Potřebné informace se v jedné tabulce nevyskytují Používaná syntaxe SELECT zvire.jmeno FROM zvire INNER JOIN zvire_osetrovatel ON zvire_osetrovatel.zvire_id = zvire.id INNER JOIN osetrovatel ON zvire_osetrovatel.osetrovatel_id = osetrovatel.id WHERE osetrovatel.prijmeni = ‘Novotný‘

Klasická syntaxe SELECT zvire.jmeno FROM zvire, zvire_osetrovatel, osetrovatel WHERE osetrovatel.prijmeni = ‘Novotný‘ AND osetrovatel.id = zvire_osetrovatel.osetrovatel _id AND zvire.id = zvire_osetrovatel.zvire_id

Seznam zvířat s názvem druhu pro konkrétní výběh SELECT zvire.jmeno, druh.nazev AS druh FROM zvire INNER JOIN druh ON zvire.druh_id = druh.id WHERE zvire.vybeh_id = 3 Pokud však definujeme výběh podmínkou (nepřímo), potřebujeme další tabulku: SELECT zvire.jmeno, druh.nazev AS druh FROM zvire INNER JOIN druh ON zvire.druh_id = druh.id INNER JOIN vybeh ON zvire.vybeh_id = vybeh.id WHERE vybeh.plocha > 1000

Častá technika – použijeme tutéž tabulku s jiným názvem. Dále pracujeme jako v případě dvou tabulek. Které páry zvířat druhu 5 žijí pohromadě (ve stejném výběhu)? SELECT zvire.jmeno, zvire1.jmeno, zvire.vybeh_id FROM zvire INNER JOIN zvire AS zvire1 ON zvire.vybeh_id = zvire1.vybeh_id WHERE druh_id = 5 AND zvire.id > zvire1.id Poslední část podmínky eliminuje obsahově stejné záznamy s alternovaným pořadím zvířat a logický fakt, že každé zvíře žije samo se sebou.

 Hodnota NULL (neznámá, nedefinovaná) je další možný výsledek logického výrazu  V relačních výrazech je v takovém případě výsledek vždy NULL (a=4, b=NULL, a>b vrací NULL)  podmínka (hodnota=NULL) vrací NULL i v případě, že hodnota obsahuje NULL, musíme použít oeprátory IS NULL a IS NOT NULL  V logických spojeních OR, AND, XOR s hodnotou NULL je výsledek vždy NULL

Používáme v případech potřeby zahrnutí záznamů ve spojených tabulkách, kdy ve druhé tabulce neexistuje partnerský záznam. Vyhledáme zvířata, která jsou ve výběhu sama: SELECT zvire.jmeno, zvire.vybeh_id FROM zvire LEFT OUTER JOIN zvire AS zvire1 ON zvire.vybeh_id = zvire1.vybeh_id AND zvire.id<zvire1.id WHERE zvire1.id IS NULL Alternativní řešení (viz dále) SELECT zvire.jmeno, zvire.vybeh_id FROM zvire WHERE zvire.vybeh_id IN (SELECT vybeh_id FROM zvire GROUP BY vybeh_id HAVING count(*)=1)

SELECT zvire.jmeno, vybeh.nazev FROM zvire LEFT OUTER JOIN vybeh ON vybeh.id = zvire.vybeh_id INNER JOIN druh ON zvire.druh_id = druh.id WHERE druh.nazev = ‘Ježura’ V případě vnitřního spojení bychom nedostali záznamy o zvířatech, která žijí volně (nemají výběh)

SELECT id,COUNT(*) AS pocet FROM zvire INNER JOIN vybeh ON zvire.vybeh_id=vybeh.id WHERE vybeh.plocha>100 SELECT SUM(mzda) AS naklady FROM osetrovatel WHERE gender=1 SELECT AVG(plocha) AS prum_plocha FROM vybeh

 Pomocí klauzule GROUP BY  Relace je setříděna podle atributu a rozdělena na skupiny, v kterých má atribut odlišnou hodnotu  Na záznamy ve skupině je obvykle aplikován agregační výraz  Vzniklá relace může obsahovat pouze atributy:  Agregáty pro skupinu  Identifikační atribut skupiny uvedený v GROUP BY  Tvorbu skupin lze provádět i pomocí více atributů než jednoho (skupina prvního atributu rozdělena na více podskupin podle hodnot druhého atributu)

SELECT vybeh_id, COUNT(*) AS pocet FROM zvire INNER JOIN vybeh ON zvire.vybeh_id=vybeh.id WHERE zvire.druh_id=5 GROUP BY vybeh_id ORDER BY pocet  Smysl má pouze výsledné uspořádání.  Před seskupením lze aplikovat standardní restrikci.  Výstupní restrikce po seskupení pomocí klauzule HAVING

Příkaz Select vrací relaci (tabulku), která může vstoupit do dalšího spojení. Seznam zvířat s uvedením počtu jedinců ve výběhu pro případ, že počet jedinců je více než 5. SELECT jmeno, pocet FROM zvire INNER JOIN SELECT vybeh_id, count(*) as pocet FROM zvire AS zvire1 GROUP BY vybeh_id ON zvire.vybeh_id=zvire1.vybeh WHERE pocet > 5

Jednoprvková množina příkazu Select může stát na místě atributu. Příkaz uvede ke každému zvířeti měrnou plochu ve výběhu (celkovou plochu dělenou počtem jedinů) SELECT jmeno, (SELECT plocha FROM vybeh WHERE vybeh.id=zvire.vybeh_id)/(SELECT count(*) from zvire AS zvire1 WHERE zvire1.vybeh_id=zvire.vybeh_id) AS mernaPlocha FROM zvire ORDER BY mernaPlocha

Jiné použití jednoprvkového výstupu příkazu Select. Seznam zvířat s nadprůměrnou cenou: SELECT zvire.jmeno,druh.nazev FROM zvire INNER JOIN druh ON druh.id=zvire.druh_id WHERE cena > (SELECT AVG(cena) FROM zvire) ORDER BY cena DESC