A3B33OSD (J. Lažanský) verze: Jaro 2013 Relační model dat a jazyk SQL 1 Obsah Téma 10 – Relační model dat a jazyk SQL 1.Relační algebra 2.Operace relační.

Slides:



Advertisements
Podobné prezentace
DOTAZOVACÍ JAZYKY slajdy přednášce DBI006
Advertisements

Aplikační a programové vybavení
J. Pokorný 1 DOTAZOVACÍ JAZYKY slajdy přednášce DBI006 J. Pokorný MFF UK
KIV/ZIS Cvičení 6 SQL - SELECT.
MS ACCESS - DOTAZY DATABÁZOVÉ SYSTÉMY.
J. Pokorný 1 DOTAZOVACÍ JAZYKY slajdy přednášce DBI006 J. Pokorný MFF UK Odpřednášeno
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
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
Téma 3 ODM, analýza prutové soustavy, řešení nosníků
Informatika pro ekonomy II přednáška 11
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
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.
1IT Relační datový model
Databáze Jiří Kalousek.
VY_32_INOVACE_ 14_ sčítání a odčítání do 100 (SADA ČÍSLO 5)
Základní číselné množiny
Dělení se zbytkem 6 MODERNÍ A KONKURENCESCHOPNÁ ŠKOLA
Dělení se zbytkem 5 MODERNÍ A KONKURENCESCHOPNÁ ŠKOLA
Jazyk vývojových diagramů
Fakulta životního prostředí Katedra informatiky a geoinformatiky
Databázové systémy II Přednáška č. 8 – Pohledy (Views)
KONCEPTUÁLNÍ MODELOVÁNÍ
Zásady pozorování a vyjednávání Soustředění – zaznamenat (podívat se) – udržet (zobrazit) v povědomí – představit si – (opakovat, pokud se nezdaří /doma/)
Školení správců II. Petr Pinkas RNDr. Vít Ochozka.
Fakulta elektrotechniky a informatiky
Databázové systémy teorie a návrh relačních databázových systémů část II.
Relační databáze.
1IT D OTAZOVACÍ JAZYKY V RELAČNÍCH DATABÁZÍCH Ing. Jiří Šilhán.
Konceptuální návrh databáze
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.
Informatika pro ekonomy II přednáška 10
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.
Databázové systémy Přednáška č. 3.
Čí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ý.
Konceptuální návrh databáze
Databázové modelování
Databázové systémy Relační model.
Informatika II PAA DOTAZOVACÍ JAZYKY
Aplikační a programové vybavení
Aplikační a programové vybavení
Databázové systémy Informatika pro ekonomy, př. 18.
Množiny.
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.
Úvod do logiky (presentace 2) Naivní teorie množin, relace a funkce
Teorie zpracování dat RELAČNÍ DATOVÝ MODEL.
Úvod do databází zkrácená verze.
Základy RA RA = matematický základ pro relační modul DBS jazyk SQL Relační DBS = Relační algebra + Relační model Doména = množina hodnot stejného typu/významu.
Databáze MS ACCESS 2010.
Úvod do databázových systémů
SQL – příkaz SELECT Ing. Roman Danel, Ph.D.
Databázové systémy a SQL
Informatika pro ekonomy přednáška 8
Predikátová logika.
Databázové jazyky Jaroslav Pokorný FI BVŠP Bratislava
Transkript prezentace:

A3B33OSD (J. Lažanský) verze: Jaro 2013 Relační model dat a jazyk SQL 1 Obsah Téma 10 – Relační model dat a jazyk SQL 1.Relační algebra 2.Operace relační algebry 3.Rozšíření relační algebry 4.Hodnoty null 5.Úpravy relací 6.Stručný úvod do SQL 7.SQL a relace 8.Základní příkazy SQL 9.Hodnoty null a tříhodnotová logika v SQL 10.Příkazy SQL pro modifikaci obsahu databází

A3B33OSD (J. Lažanský) verze: Jaro 2013 Relační model dat a jazyk SQL 2 K čemu relace? Viděli jsme tabulky. Proč potřebujeme něco jiného? Je k tomu řada důvodů: –Potřeba rigorózního matematického modelu –Model umožní formalizaci databázových operací –Přesný model je potřebný k tvorbě deklarativně formulovaných dotazů a k optimalizaci jejich provádění Hlavní myšlenkou je popsat databázi jako souhrn logických predikátů nad konečnou množinou predikátových proměnných a definovat tak omezení na přípustné hodnoty a kombinace hodnot

A3B33OSD (J. Lažanský) verze: Jaro 2013 Relační model dat a jazyk SQL 3 Co to je relace? Matematicky: Jsou dány množiny D 1, D 2, …, D n, pak relací R rozumíme podmnožinu kartézského součinu D 1 x D 2 x … x D n. Relace tedy je množina n-tic (a 1, a 2, …, a n ), kde a i  D i Příklad: –klient_jmeno = {Novák, Mates, Braun, Novotný …} /* množna jmen klientů */ –klient_ulice= {Spálená, Hlavní, Horní, …} /* množina jmen ulic*/ –klient_mesto= {Praha, Brno, Nymburk, …} /* množina jmen měst */ –pak r = { (Novák, Spálená, Praha), (Mates, Horní, Brno), (Braun, Hlavní, Brno), (Novotný, Horní, Nymburk) } je relace, tj. podmnožina klient_jmeno x klient_ulice x klient_mesto Vzhledem k tomu, že jde vždy o konečné množiny, lze je vyjádřit výčtem, tedy tabulkami

A3B33OSD (J. Lažanský) verze: Jaro 2013 Relační model dat a jazyk SQL 4 Relace je podmnožina kartézského součinu V množinách neexistuje duplicita –Velmi důležité pro databázové aplikace Prvky množiny mohou být v jakémkoliv pořadí –neexistuje uspořádání Bush Carter Clinton Jefferson Kenedy Lincoln Obama Roosevelt Washington Abraham Barac Bill Franklin George Jimmy John Theodore Thomas Jména Příjmení Vybraní američtí prezidenti

A3B33OSD (J. Lažanský) verze: Jaro 2013 Relační model dat a jazyk SQL 5 Typy atributů Každý atribut v relaci má své jméno Množina přípustných hodnot atributu je definiční doménou atributu Hodnoty atributu jsou (téměř vždy) atomické, tj. dále nedělitelné –Např. hodnotou atributu „číslo_účtu“ smí být číslo jednoho účtu, nikoliv množina čísel účtů Speciální hodnota null patří do každé domény –prázdná (nezadaná) hodnota –null značně komplikuje definici mnoha množinových operací, a proto zpočátku tuto hodnotu budeme ignorovat důsledky uvedeme později

A3B33OSD (J. Lažanský) verze: Jaro 2013 Relační model dat a jazyk SQL 6 Relační schéma a instance Relační schéma –A 1, A 2, …, A n jsou atributy –R = (A 1, A 2, …, A n ) je relační schéma Příklad: Klient_schema = (klient_jmeno, klient_ulice, klient_mesto) –r(R) značí relaci r nad relačním schématem R Příklad: klient (Klient_schema) Instance relace (relační instance) –Skutečné hodnoty (relační instance) jsou definovány výčtem, tj. tabulkou –Prvek t relace r je n-tice, reprezentovaná řádkem tabulky Novák Novotný Braun Mates klient_jmeno Spálená Horní Hlavní Horní klient_ulice Praha Nymburk Brno klient_mesto klient atributy (tj. sloupce) n-tice (řádky)

A3B33OSD (J. Lažanský) verze: Jaro 2013 Relační model dat a jazyk SQL 7 Klíče (znovu) Nechť K  R. K je superklíč schématu R, když hodnoty K stačí k jednoznačné identifikaci r(R) –Např. {klient_jmeno, klient_mesto} je superklíčem pro schéma Klient_schema. Superklíčem je však i {klient_jmeno} K je kandidát na klíč jestliže K je minimální superklíč –Např. {klient_jmeno} je kandidátem na klíč pro schéma Klient_schema, neboť je to superklíč a žádná „podmnožina“ již superklíčem není Primární klíč je vybrán mezi kandidátními klíči tak, aby se během „života“ příslušné relace neměnil –Např. {klient_jmeno} může sloužit jako primární klíč pro naši instanci relace, avšak když přijde další Novák, všechno bude špatně ová adresa může být primárním klíčem, avšak lidé svůj občas mění (což je jiný typ komplikace)

A3B33OSD (J. Lažanský) verze: Jaro 2013 Relační model dat a jazyk SQL 8 Cizí klíče Relační schéma může obsahovat atribut, který koresponduje s primárním klíčem v jiné relaci. Takový atribut se nazývá cizí klíč –Např. atributy customer_name a account_number relačního schématu depositor jsou cizí klíče do customer a account –Hodnotami cizího klíče v referencující (odkazující) relaci smí být jen ty hodnoty, které se vyskytují jako primární klíč v relaci referencované (odkazované) Důležitý typ omezení – referenční integrita branch_city assets branch_name branch branch_name balance account_number account customer_street customer_city customer_name customer branch_name amount loan_number loan customer_name loan_number borrower customer_name account_number depositor

A3B33OSD (J. Lažanský) verze: Jaro 2013 Relační model dat a jazyk SQL 9 Relační algebra Relační algebra je vlastně procedurální jazyk Šest základních operátorů –Selekce (restrikce)  Výběr jen některých prvků relace –Projekce:  Výběr jen určitých atributů –Sjednocení:  Spojení několika relací v jednu (spojované relace musí mít stejné schéma) –Rozdíl (množin): – Výběr těch prvků první relace, které nejsou obsaženy v druhé relaci –Kartézský součin: x Klasická množinová operace –Přejmenování:  Změna jména jednoho či více atributů Všechny tyto operátory pracují s jednou nebo dvěma relacemi a vytváří relaci novou

A3B33OSD (J. Lažanský) verze: Jaro 2013 Relační model dat a jazyk SQL 10 Selekce Zápis  p (r) –p je selekční predikát Definice  p (r) = {t | t  r  p(t)} Selekční predikát p je výroková formule složená z termů propojených logickými operátory:  ( and ),  ( or ),  ( not ) Každý term má tvar:  atribut  op  atribut  nebo  konstanta , kde op je jeden z =, , >, , <,  Příklad selekce:  klient_mesto=“Praha” (klient) ABCD    A=B  D > 5 (r) ABCD   r

A3B33OSD (J. Lažanský) verze: Jaro 2013 Relační model dat a jazyk SQL 11 Projekce Zápis: kde A 1, A 2 jsou jména atributů a r je jméno relace Výsledek je definován jako relace s k atributy („sloupci“) vytvořená z relace r výběrem pouze vyjmenovaných atributů –Tedy vynecháním zbývajících (neuvedených) atributů –Duplicitní „řádky“ jsou odstraněny – relace jsou množiny! Příklad: V relaci klient nás nezajímá atribut klient_ulice  klient_jmeno, klient_mesto (klient) ABC  r AC  AC   A,C (r) =

A3B33OSD (J. Lažanský) verze: Jaro 2013 Relační model dat a jazyk SQL 12 Sjednocení Zápis: r  s Definice: r  s = {t | t  r  t  s} Relace r a s musí být kompatibilní, tj 1. r a s musí mít stejnou aritu (počet atributů) 2. Domény atributů musí být po řadě shodné Např. druhý atribut relace r a druhý atribut relace s musí mít shodný datový typ Příklad: –najít všechny zákazníky banky, kteří mají vklad nebo půjčku  customer_name (depositor)   customer_name (borrower) AB  r AB  2323 s Relace r, s: r  s:r  s: AB 

A3B33OSD (J. Lažanský) verze: Jaro 2013 Relační model dat a jazyk SQL 13 Rozdíl Zápis: r – s Definice: r – s = {t | t  r  t  s} Relace vstupující do množinového rozdílu musí opět být vzájemně kompatibilní AB  r AB  2323 s Relace r, s: AB  1111 r – s:

A3B33OSD (J. Lažanský) verze: Jaro 2013 Relační model dat a jazyk SQL 14 Kartézský součin Zápis: r x s Definice: r x s = {t q | t  r  q  s} Předpokládejme, že atributy r(R) a s(S) jsou disjunktní tj., R  S = . –Lze použít i na více než dvě relace –Nejsou-li atributy disjunktní, tzn. některé atributy r(R) mají stejné jméno jako jména atributů v s(S), musí se použít operace přejmenování POZOR: Mohou vznikat tabulky gigantické velikosti ABCDE   aabbaabbaabbaabb r x s: Relace r, s: AB  1212 r CD  E aabbaabb s

A3B33OSD (J. Lažanský) verze: Jaro 2013 Relační model dat a jazyk SQL 15 Operace přejmenování Pomocná operace –Fakticky nejde o pravou operaci relační algebry, zavádí se z pragmatických důvodů –Umožňuje nově pojmenovat (a tím i referencovat) výsledek jiné relační operace –Umožňuje též pojmenovat relaci více jmény Příklad: vrátí výsledek výrazu E pod jménem X –Jestliže relační výraz E má aritu n, pak vrátí výsledek výrazu E pod jménem X s atributy přejmenovanými na A 1, A 2, …., A n.

A3B33OSD (J. Lažanský) verze: Jaro 2013 Relační model dat a jazyk SQL 16 Skládání operací Skutečně užitečné relační operace vzniknou skládáním operací základních ABCDE   aabaab  A=C (r x s): AB  CD  E aabbaabbaabbaabb r x s:

A3B33OSD (J. Lažanský) verze: Jaro 2013 Relační model dat a jazyk SQL 17 Příklad bankovní databáze Relace –branch(branch_name, branch_city, assets) –customer(customer_name, customer_street, customer_city) –account(account_number, branch_name, balance) –loan(loan_number, branch_name, amount) –depositor(customer_name, account_number) –borrower(customer_name, loan_number) Příklady dotazů –Najdi všechny půjčky (loan) přes 1200 –Najdi čísla půjček vyšších než 1200 –Najdi jména zákazníků majících vkladový účet v pobočce Nymburk

A3B33OSD (J. Lažanský) verze: Jaro 2013 Relační model dat a jazyk SQL 18 Příklad bankovní databáze (2) Další příklady dotazů –Najdi jména zákazníků majících půjčku v pobočce ‘Nymburk’ a při tom nemají vkladový účet v žádné pobočce –Najdi jména zákazníků, kteří mají půjčku vedenou v pobočce Nymburk 1. možnost 2. možnost

A3B33OSD (J. Lažanský) verze: Jaro 2013 Relační model dat a jazyk SQL 19 Příklad bankovní databáze (3) Příklady dotazu (použití operace přejmenování) –Najdi největší zůstatek vkladového účtu –Strategie: Najdi zůstatky, které nejsou největší K tomu účelu přejmenuj relaci account na temp, abychom mohli porovnávat jednotlivé zůstatky se všemi ostatními Použij množinový rozdíl k nalezení těch zůstatků, které nejsou mezi těmi, které jsme určili v předchozím kroku –Dotaz pak vypadá takto: П balance (account) – П account.balance (σ account.balance < temp.balance (account x ρ temp (account) ) )

A3B33OSD (J. Lažanský) verze: Jaro 2013 Relační model dat a jazyk SQL 20 Doplňkové operace, průnik Z praktických důvodů se definují další operátory, které umožňují zjednodušení častých dotazů do databáze –Průnik –Přirozené spojení (spojení přes rovnost) –Dělení –Přiřazení Průnik –Zápis: r  s –Definice: r  s = { t | t  r  t  s } –Předpoklad: Relace r a s jsou vzájemně kompatibilní –Poznámka: r  s = r – (r – s) A B  r  2323 s Relace r, s: A B  2 r  s:r  s:

A3B33OSD (J. Lažanský) verze: Jaro 2013 Relační model dat a jazyk SQL 21 Přirozené spojení Zápis: r ⋈ s Nechť r a s jsou relace podle schémat R a S. r ⋈ s je pak relace podle schématu R  S vytvořená jako: –Uvažme všechny páry n-tic t r z r a t s z s –Jestliže t r a t s mají stejné hodnoty všech atributů z R  S, pak n-tice t se objeví ve výsledku, přičemž t má stejné hodnoty atributů jako t r na r a t má stejné hodnoty atributů jako t s na s Výsledek přirozeného spojení je tedy množina všech kombinací „řádků“ z R a S, které mají shodné hodnoty stejnojmenných atributů Příklad: R = (A, B, C, D) S = (E, B, D) –Výsledné schéma = (A, B, C, D, E) –r ⋈ s pak je:

A3B33OSD (J. Lažanský) verze: Jaro 2013 Relační model dat a jazyk SQL 22 Relace r, s: r ⋈ s: Praktický příklad Přirozené spojení – příklad AB  CD  aaaabaaaab E  AB  CD  aababaabab r B D aaabbaaabb E  s

A3B33OSD (J. Lažanský) verze: Jaro 2013 Relační model dat a jazyk SQL 23 Operace dělení Zápis: r  s Určeno pro dotazy obsahující frázi „pro všechny“ –Nechť r a s jsou relace podle schémat R a S, kde R = (A 1, …, A m, B 1, …, B n ) a S = (B 1, …, B n ) –Výsledkem r  s je relace dle schématu R – S = (A 1, …, A m ) r  s = { t | t   R-S (r)   u  s (tu  r) }, kde tu značí zřetězení „řádků“ t a u chápané jako jediná n-tice Vlastnost –Nechť q = r  s, pak q je největší relace splňující q x s  r Definice pomocí základních operací relační algebry –Nechť r(R) a s(S) jsou relace a nechť S  R r  s =  R-S (r) –  R-S ((  R-S (r) x s) –  R-S,S (r))  R-S,S (r) přeuspořádá atributy r  R-S (  R-S (r) x s ) –  R-S,S (r)) dá ty n-tice t z  R-S (r), pro které platí, že některá n-tice u  s je taková, že tu  r

A3B33OSD (J. Lažanský) verze: Jaro 2013 Relační model dat a jazyk SQL 24 Relace r, s: r  s: Praktický příklad Operace dělení – příklad A  AB εεεε r B 1212 s

A3B33OSD (J. Lažanský) verze: Jaro 2013 Relační model dat a jazyk SQL 25 Přiřazovací operace Přiřazovací operace (  ) umožňuje pohodlný zápis složitých výrazů –Dovoluje zapisovat „dotazy“ ve formě sekvence programových příkazů tvaru série přiřazení následovaných snáze čitelnými výrazy –Přiřazuje se vždy vhodné pracovní „proměnné typu relace“ –Pracovní proměnné jsou pak dostupné v dalších výrazech Příklad:Operaci dělení r  s lze zapsat jako temp1   R-S (r) temp2   R-S ((temp1 x s) –  R-S,S (r)) vysledek = temp1 – temp2

A3B33OSD (J. Lažanský) verze: Jaro 2013 Relační model dat a jazyk SQL 26 Příklad bankovní databáze – další dotazy Najdi jména všech zákazníků, kteří mají současně vkladový účet a půjčku  customer_name (borrower)   customer_name (depositor) Najdi jména zákazníků, kteří mají půjčku, a výši této půjčky  customer_name, loan_number, amount (borrower ⋈ loan) Najdi jména všech zákazníků, kteří mají vkladový účet v pobočce Nymburk nebo Benešov –Možnost 1  customer_name (  branch_name = “Nymburk” (depositor ⋈ account))   customer_name (  branch_name = “Benešov” (depositor ⋈ account)) –Možnost 2  customer_name, branch_name (depositor ⋈ account)   temp(branch_name) ( {(“Nymburk”), (“Benešov”)} ) Všimněme si, že Možnost 2 používá „konstantní relaci“ temp ve funkci dělitele při dělení – ptáme se totiž „pro všechny uvedené pobočky“

A3B33OSD (J. Lažanský) verze: Jaro 2013 Relační model dat a jazyk SQL 27 Pragmatická rozšíření relačních operátorů Pro často kladené dotazy se zavádějí rozšířené operace –Zobecněná projekce –Agregátní funkce –Vnější spojení (Outer Join) Zobecněná projekce zavádí aritmetické funkce do seznamu možných výstupních atributů –E je relační výraz a F 1, F 2, …, F n jsou aritmetické výrazy zahrnující atributy ze schématu výrazu E a konstanty –Takto se získají odvozené (počítané) atributy Příklad: –Relace credit_info(customer_name, limit, credit_balance), –Urči, kolik může každá osoba ještě utratit:  customer_name, limit – credit_balance (credit_info)

A3B33OSD (J. Lažanský) verze: Jaro 2013 Relační model dat a jazyk SQL 28 Agregátní funkce a operace Agregátní funkce pracují s kolekcí hodnot a vrací jedinou výslednou hodnotu avg: průměrná hodnota min: minimum max: maximum sum: součet hodnot count: počet hodnot Agregátní operace relační algebry vytvářejí relaci se „syntetickými“ atributy a případným seskupováním prvků –E je relační výraz –G 1, G 2, …, G m je seznam atributů, podle nich se má seskupovat (může být i prázdný) –F i jsou agregátní funkce –A i jsou jména atributů ze schématu, podle něhož je tvořen E

A3B33OSD (J. Lažanský) verze: Jaro 2013 Relační model dat a jazyk SQL 29 Příklad agregátních operací a funkcí Relace r: sum(C) (r): Relace account seskupená podle branch_name: branch_name sum(balance) (account): AB   C sum(C) 27 branch_nameaccount_numberbalance Nymburk Praha 1 Benešov A-102 A-201 A-217 A-215 A branch_namesum(balance) Nymburk Praha 1 Benešov

A3B33OSD (J. Lažanský) verze: Jaro 2013 Relační model dat a jazyk SQL 30 Vnější spojení Vnější spojení je operace, která rozšiřuje přirozené spojení a zamezuje „ztrátě informace“ –Určí se přirozené spojení a pak se přidají prvky z jedné ze spojovaných relací, které nesplňují požadavky na rovnost stejnojmenných atributů –Podle toho, ze které relace se přidávají prvky, rozlišuje se levé vnější spojení a pravé vnější spojení –Lze též přidat prvky z obou spojovaných relací a pak jde o plné vnější spojení –Při doplňování mohou vznikat prvky s neznámými nebo nedefinovanými hodnotami, jejichž reprezentaci se zavádí hodnota null

A3B33OSD (J. Lažanský) verze: Jaro 2013 Relační model dat a jazyk SQL 31 Typy a příklady vnějšího spojení přirozené spojení ⋈ levé vnější spojení pravé vnější spojení plné vnější spojení

A3B33OSD (J. Lažanský) verze: Jaro 2013 Relační model dat a jazyk SQL 32 Hodnoty Null null se užívá pro neznámou hodnotu nebo pro označení situace, že hodnota neexistuje –Aritmetický výraz obsahující null dává výsledek null –Agregátní funkce ignorují hodnoty null –Pro eliminaci duplikátů a seskupování se null uvažuje jako jakákoliv jiná hodnota; dvě null hodnoty se považují za identické Predikáty zahrnující null vyžadují tříúrovňovou logiku s doplňkovou hodnotou unknown –Logika s pravdivostní hodnotou unknown: OR: (unknown or true)= true, (unknown or false)= unknown (unknown or unknown)= unknown AND:(true and unknown)= unknown, (false and unknown)= false, (unknown and unknown)= unknown NOT:(not unknown) = unknown –Selekční predikát vyhodnocený jako unknown se považuje za false

A3B33OSD (J. Lažanský) verze: Jaro 2013 Relační model dat a jazyk SQL 33 Modifikace relací v databázi K modifikaci obsahu databáze potřebujeme operace –Deletion (výmaz = odstranění prvku z relace) –Insertion (vložení prvku do relace) –Updating (aktualizace – změna prvku v relaci) Vše se realizuje operátorem přiřazení Výmaz (deletion) r  r – E kde r je relace a E je relační výraz určující mazané prvky –Příklady Vymaž všechny záznamy v pobočce Benešov account  account –  branch_name = “Benešov” (account ) Vymaž všechny záznamy o půjčkách se zůstatkem 0 až 50 loan  loan –  amount  0  and amount  50 (loan)

A3B33OSD (J. Lažanský) verze: Jaro 2013 Relační model dat a jazyk SQL 34 Vložení Vložení v relační algebře je opět přiřazení r  r  E kde r je relace, do níž vkládáme a E je relační výraz –Vložení jediného prvku se realizuje tak, že E bude konstantní výraz popisující prvek –Vložit lze najednou i více prvků, pokud E bude relační výraz kompatibilní s r Příklad –Vlož do databáze informaci, že zákazník Kovář má účet A-973 se zůstatkem 1200 v pobočce Benešov account  account  {(“A-973”, “Benešov”, 1200)} depositor  depositor  {(“Kovář”, “A-973”)}

A3B33OSD (J. Lažanský) verze: Jaro 2013 Relační model dat a jazyk SQL 35 Aktualizace Mechanismus pro změnu hodnoty zvolených atributů, aniž by se měnily hodnoty všech atributů –Použije se zobecněná projekce –F i je buď i-tý atribut r, pokud i-tý atribut nemá být změněn, nebo F i je výraz sestavěný z konstant a atributů r, který dává novou hodnotu atributu Příklady –Připočti úrok 5% account   account_number, branch_name, balance * 1.05 (account) –Přičti úrok 6% k účtům se zůstatkem přes a 5% ke všem ostatním account   account_number, branch_name, balance * 1.06 (  balance  (account ))   account_number, branch_name, balance * 1.05 (  balance  (account))

A3B33OSD (J. Lažanský) verze: Jaro 2013 Relační model dat a jazyk SQL 36 Strukturovaný dotazovací jazyk SQL Structured Query Language (SQL) –jazyk pro kladení dotazů do databáze –obsahuje jak příkazy DML (manipulace s daty), tak i pro definici dat (DDL) Svojí syntaxí připomíná přirozenou angličtinu SQL se opírá o výrazy relační algebry Existuje mnoho dialektů SQL –liší se různými rozšířeními či speciálními agregátními funkcemi –skladba vestavěných predikátů se rovněž může lišit Probereme jen základní konstrukty jazyka –konkrétní varianty vždy závisí na příslušném dialektu použitého databázového systému Poznámka k syntaxi –SQL identifikátory a jména atributů NEROZLIŠUJÍ malá a velká písmena (tj. Branch_Name ≡ BRANCH_NAME ≡ branch_name

A3B33OSD (J. Lažanský) verze: Jaro 2013 Relační model dat a jazyk SQL 37 Konstrukce create table Relace v SQL je definována příkazem create table r (A 1 D 1, A 2 D 2,..., A n D n, (integritní-omezení 1 ),..., (integritní-omezení k )) –r je jméno vytvářené relace –A i jsou jména atributů schématu relace r –D i jsou příslušné datové typy hodnot domén atributů A i Integritní omezení jsou standardně tvaru –not null –primary key (A 1,..., A L ) Příklad create table branch (branch_namechar(15) not null, branch_citychar(30), assets integer, primary key (branch_name) )

A3B33OSD (J. Lažanský) verze: Jaro 2013 Relační model dat a jazyk SQL 38 Základní struktura SQL dotazu Typický SQL dotaz má tvar: select A 1, A 2,..., A n from R 1, R 2,..., R m where p – A i jsou atributy, R i jsou relace a p je predikát Tento dotaz je ekvivalentní relačnímu výrazu –Výsledek dotazu je relace Důležité poznatky –SQL je deklarativní (dotazovací) jazyk, zatímco relační algebra je procedurální –Zobrazení SQL dotazů na relační výrazy převádí deklarativní dotazy na procedury –Provedení („výpočet výsledku“) dotazu bude implementovat procedury operací relační algebry

A3B33OSD (J. Lažanský) verze: Jaro 2013 Relační model dat a jazyk SQL 39 Klauzule select Klauzule select uvádí atributy výsledné relace dotazu –odpovídá relační operaci projekce Příklady: –Získej jména poboček z relace (tabulky) loan: select branch_name from loan –V relační algebře  branch_name (loan) Na rozdíl od relací SQL připouští duplikáty v relacích i ve výsledcích dotazů –To narušuje relační model, avšak může výrazně zrychlit zpracování Eliminaci duplikátů lze vynutit použitím klíčového slova distinct ¨za select. –Získej jména poboček z relace (tabulky) loan a odstraň duplikáty select distinct branch_name from loan –Naopak klíčové slovo all explictině říká, aby se duplikáty ponechaly select all branch_name from loan

A3B33OSD (J. Lažanský) verze: Jaro 2013 Relační model dat a jazyk SQL 40 Klauzule select (pokr.) Hvězdička v klauzuli select značí “všechny atributy” select  from loan Klauzule select může obsahovat aritmetické výrazy obsahující operace +, –, , / a konstanty nebo atributy Dotaz select loan_number, branch_name, amount  100 from loan vrátí relaci shodnou s loan až na to, hodnota atributu amount bude vynásobena 100 –Jde vlastně o zobecněnou projekci  loan_number, branch_name, amount  100 (loan)

A3B33OSD (J. Lažanský) verze: Jaro 2013 Relační model dat a jazyk SQL 41 Klauzule where Klauzule where určuje podmínky, které musí splňovat výsledek –Odpovídá selekčnímu predikátu relační algebry Příklad –Najdi čísla půjček z pobočky Benešov vyšší než 1200 select loan_number from loan where branch_name="Benešov" and amount>1200 Porovnání –Výsledky mohou být kombinovány logickými spojkami and, or a not –Porovnání lze aplikovat i na výsledky aritmetických výrazů –SQL zahrnuje i porovnávací operátor between Např.: Najdi čísla půjček se zůstatky mezi a (tj.  a  ) select loan_number from loan where amount between and což odpovídá relačnímu výrazu  loan_number(  (amount ≥ 90000)  (amount ≤ )(loan))

A3B33OSD (J. Lažanský) verze: Jaro 2013 Relační model dat a jazyk SQL 42 Klauzule from Klauzule from uvádí seznam relací, kterých se dotaz týká –Odpovídá kartézskému součinu relací –Příkaz select  from borrower, loan vrátí kartézský součin relací borrower x loan –Najdi jména, čísla půjček a výši dluhů všech zákazníků majících půjčku v pobočce Nymburk select customer_name, borrower.loan_number, amount from borrower, loan where borrower.loan_number = loan.loan_number and branch_name = "Nymburk" odpovídá relačnímu výrazu  customer_name, borrower.loan_number, amount (  borrower.loan_number = loan.loan_number  branch_name="Nymburk" (borrower x loan))

A3B33OSD (J. Lažanský) verze: Jaro 2013 Relační model dat a jazyk SQL 43 Operace přejmenování SQL umožňuje relace a atributy pomocí klauzule as old-name as new-name –Najdi jména, čísla půjček a dlužné částky všech zákazníků a pojmenuj sloupec loan_number jako loan_id select customer_name, borrower.loan_number as loan_id, amount from borrower, loan where borrower.loan_number = loan.loan_number Domácí úkol: –Přepište tento dotaz do formy relačního výrazu

A3B33OSD (J. Lažanský) verze: Jaro 2013 Relační model dat a jazyk SQL 44 n-tice jako proměnné Proměnné ve tvaru n-tic se definují jako proměnné v klauzuli from s použitím klauzule as Příklad –Najdi jména zákazníků, čísla jejich půjček a výši dluhů přes všechny pobočky select customer_name, T.loan_number, S.amount from borrower as T, loan as S where T.loan_number = S.loan_number –Najdi jména poboček, které mají součet vkladů (assets) větší některá z poboček v Praze 1 select distinct T.branch_name from branch as T, branch as S where T.assets > S.assets and S.branch_city = "Praha 1"

A3B33OSD (J. Lažanský) verze: Jaro 2013 Relační model dat a jazyk SQL 45 SQL připouští duplikáty Pro zajištění dobré analogie SQL a množinového modelu potřebujeme tzv. multisety –Multiset je množina s opakujícími se prvky Potřebujeme multisetové verze relačních operátorů mezi relacemi r 1 a r 2 –   (r 1 ): Je-li c 1 kopií n-tice t 1 v r 1, a t 1 splňuje selekční predikát ,, pak bude c 1 kopií t 1 v   (r 1 ). –  A (r ): Pro každou kopii t 1 v r 1 bude kopie  A (t 1 ) i v  A (r 1 ) – r 1 x r 2 : Je-li c 1 kopií t 1 v r 1 a c 2 kopií t 2 v r 2, pak bude c 1  c 2 kopií n-tice t 1  t 2 v r 1 x r 2 Příklad: –Multisetové relace r 1 (A, B) a r 2 (C) jsou r 1 = {(1, a) (2,a)} r 2 = {(2), (3), (3)} –Pak  B (r 1 ) bude {(a), (a)}, a  B (r 1 ) x r 2 dá {(a,2), (a,2), (a,3), (a,3), (a,3), (a,3)} SQL sémantika příkazu select A 1,, A 2,..., A n from r 1, r 2,..., r m where P je ekvivalentní multisetové verzi výrazu

A3B33OSD (J. Lažanský) verze: Jaro 2013 Relační model dat a jazyk SQL 46 Množinové operace v SQL Množinové operátory union, intersect a except jsou SQL ekvivalentem relačních (množinových) operací  a  –Najdi zákazníky mající vkladový účet nebo půjčku (nebo oboje) ( select customer_name from depositor) union ( select customer_name from borrower) –Najdi zákazníky mající jak vkladový účet tak půjčku ( select customer_name from depositor) intersect ( select customer_name from borrower) –Najdi zákazníky mající vkladový účet a nemající půjčku ( select customer_name from depositor) except ( select customer_name from borrower) SQL má dále operátor in, který testuje příslušnost či členství v množině –ekvivalent ∈

A3B33OSD (J. Lažanský) verze: Jaro 2013 Relační model dat a jazyk SQL 47 Agregátní funkce v SQL Tyto funkce pracují s multisety hodnot a vrací hodnotu jedinou –jinak jsou shodné s dříve uvedenými agregátními funkcemi avg, min, max, sum a count Najdi průměrný vklad v pobočce Benešov select avg (balance) from account where branch_name = "Benešov" Urči počet vkladatelů select count ( distinct customer_name) from depositor

A3B33OSD (J. Lažanský) verze: Jaro 2013 Relační model dat a jazyk SQL 48 Hodnoty null v SQL Predikát is null slouží k testu null hodnot –Např.: V relaci loan vyhledej čísla půjček s null hodnotou atributu amount select loan_number from loan where amount is null Aritmetické operace zahrnující null dávají null –Např.: 5 + null vrací null Agregátní funkce null hodnoty ignorují Je zavedena tříhodnotová logika s unknown –Např.: 5 null nebo null = null se vždy vyhodnotí jako unknown Konstrukt p is unknown se vyhodnotí jako pravdivý, pokud predikát p má hodnotu unknown

A3B33OSD (J. Lažanský) verze: Jaro 2013 Relační model dat a jazyk SQL 49 Vnořený dotaz Vnořené dotazy SQL má mechanismus pro vnořování dotazů (subquery) –někdy zvané pod-dotazy Vnořený dotaz má obvyklý tvar select - from - where, je však zanořen do jiného dotazu –Nejčastěji se používá k realizaci testu členství v relaci, porovnávání množin a určování kardinality relací Příklad: –Najdi zákazníky mající jak vkladový účet tak i půjčku select distict customer_name from borrower where customer_name in ( select customer_name from depositor)

A3B33OSD (J. Lažanský) verze: Jaro 2013 Relační model dat a jazyk SQL 50 Pohledy Často je nevhodné poskytovat uživateli všechna data –tedy celý logický model databáze a všechny uložené relace –Bankovní úředník na jisté pozici potřebuje znát jméno zákazníka a pobočku, kde má půjčku, ne však výši půjčky. ( select customer_name, branch_name from borrower, loan where borrower.loan_number = loan.loan_number ) Mechanismus pohledů (view) umožňuje skrýt určitá data –Lze tak vytvořit jakoukoliv relaci, která není součástí konceptuálního modelu a zpřístupnit ji uživateli jako "virtuální relaci". Taková "virtuální relace" se nazývá pohled. Zavede se příkazem create view ve tvaru create view v as kde v je jméno pohledu –Jakmile je pohled definován, jeho jméno lze používat jako zkratku celého definičního dotazu

A3B33OSD (J. Lažanský) verze: Jaro 2013 Relační model dat a jazyk SQL 51 SQL příkazy pro modifikaci databáze Výmaz (deletion) –Příkaz má strukturu delete - from - where s argumenty analogickými konstruktu select-from-where –Vymaž všechny vkladové účty v pobočce Nymburk delete from account where branch_name = ‘ Nymburk ‘ Vložení (insertion) –insert into relace values –Přidej záznam do tabulky account insert into account (branch_name, balance, account_number) values ('Beroun', 1200, 'A-9732') Aktualizace (update) –update relace set atribut = výraz where podmínka –Přidej 6% prémie ke vkladovým účtům přes 1000 update account set balance = balance  1.06 where balance > 1000

A3B33OSD (J. Lažanský) verze: Jaro 2013 Relační model dat a jazyk SQL 52 Spojení relací v SQL Základní syntaxe je r 1 join r 2 on using (A 1,...) –Úplná SQL syntaxe je popsána v příslušných dialektech a standardizace je jen částečná –Typicky se používá jako součást pod-dotazu v klauzuli from. Typ spojení – "přívlastek" klíčového slova join –Jde o úplnou ekvivalenci se spojeními z relační algebry –Typy: inner join, left outer join, right outer join, full outer join Spojovací podmínka –určuje, na základě čeho má dojít ke spojení a které atributy budou ve výsledném spojení Příklad –Najdi všechny zákazníky, kteří mají buď půjčku nebo vkladový účet, ale ne oboje select customer_name from (depositor full outer join borrower ) where account_number is null or loan_number is null

A3B33OSD (J. Lažanský) verze: Jaro 2013 Relační model dat a jazyk SQL 53 Dotazy