Stáhnout prezentaci
Prezentace se nahrává, počkejte prosím
ZveřejnilDiana Burešová
1
13.4.2015Databá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í symboly atributová jména Predikátové symboly jména relací Termy konstanty, proměnné, indexované n-tice x[A] Atomické formule P(x) – rozsahové formule, dále a b, kde a, b jsou indexované n-tice Formule jako výše, ale s využitím omezených kvantifikátorů
2
13.4.2015Databázové systémy UIN010 Tvar zápisu v NRK {(t 1,…t k ): P 1 (r 1 ) & … P n (r n ) & V(r 1,…r n )}, kde k n 1 P i (r i ) jsou rozsahové formule pro právě všechny volné proměnné formule V V neobsahuje žádné rozsahové formule T j jsou proměnné nebo indexové proměnné pokrývající všechny volné proměnné formule V
3
13.4.2015Databázové systémy UIN010 Příklady v NRK Příjmení všech učitelů {(t[PŘ]): U(t)} Učitelé katedry algebry {(t[KU], t[PŘ], t[KA]): U(t) & t[KA] = “Algebra”} Příjmení učitelů katedry algebry {(t[PŘ]): U(t) & t[KA] = “Algebra”} Názvy vyučovaných předmětů {(t[NP]): P(t) & R(u)(t[KP] = u[KP])} Učitelé, kteří nic neučí {(t[KU],t[PŘ],t[KA]) : U(t) R(u)(t[KU]=u[KU])}
4
13.4.2015Databázové systémy UIN010 Příklady v NRK Předměty vyučované KSI i KSVI {(t[KP]) : R(t) & R(u)(t[KP]=u[KP]) & U(x)(t[KU]=x[KU] & x[KA]='KSI') & U(y)(u[KU]=y[KU] & y[KA]='KSVI')} Kódy učitelů, kteří učí každý den rozvrhu {(t[KU]) : R(t) & R(u) R(v) (v[DT]=u[DT] & t[KU]=v[KU])} Kódy učitelů, kteří učí každý den, kdy učí Novák (kód 358) {(t[KU]) : R(t) & R(u) R(v) (u[KU]=358 v[DT]=u[DT] & t[KU]=v[KU])} Zaměstnanci s platem vyšším než plat jejich vedoucího {(t[ČZ]) : ZAM(t) & ZAM(u)(t[ČV]=u[ČZ] & t[Plat]>u[Plat])}
5
13.4.2015Databázové systémy UIN010 Doménový relační kalkul Rozdíly oproti NRK: proměnné nemají za hodnoty n-tice, ale jednotlivé prvky z domén, tj. jednoduché hodnoty atributů nepoužívají se rozsahové formule, ale tzv. modelové predikáty, kde predikátový symbol odpovídá vždy nějaké relaci/tabulce a umístěním proměnné v příslušné pozici „deklarujeme“ její typ
6
13.4.2015Databázové systémy UIN010 Příklady v DRK Učitelé katedry algebry {(r,s): t U(KU:r, PŘ:s, KA:t) & t='Algebra'} Příjmení učitelů katedry algebry {(s): U(PŘ:s, KA:'Algebra') } Názvy vyučovaných předmětů {(n): k(P(KP:k, NP:n) & R(KP:k))} Zaměstnanci s platem vyšším než plat jejich vedoucího {(z): p č (ZAM(ČZ:z,Plat:p,ČV:č) & q ZAM(ČZ:č, Plat:q) & p>q))} Učitelé, kteří nic neučí {(r,s,t) : U(KU:r,PŘ:s,KA:t)& R(KU:r)}
7
13.4.2015Databázové systémy UIN010 Příklady v DRK Předměty vyučované KSI i KSVI {(k): u(R(KP:k,KU:u) & U(KU:u,KA:'KSI')) & v(R(KP:k,KU:v) & U(KU:v,KA:'KSVI')) } Kódy učitelů, kteří učí každý den rozvrhu {(k): d R(DT:d) R(KU:k,DT:d))} Kódy učitelů, kteří učí každý den, kdy učí Novák (kód 358) {(k): d R(KU:358, DT:d) R(KU:k,DT:d))}
8
13.4.2015Databázové systémy UIN010 PřipomenutíPřipomenutí Systém řízení bází dat (SŘBD) - umožňuje definovat a udržovat data v databázi jazyk pro definici dat (JDD) –běžné typy dat (viz. programovací jazyku) + možnost vytváření složitějších struktur –využívá typy dat vycházející z databázového modelu jazyk pro manipulaci dat (JMD) –konstrukty pro vkládání, odstraňování a modifikaci dat –prostředky pro tvorbu dotazů (obvykle označovány jako dotazovací jazyky) DBS = databáze + SŘBD
9
13.4.2015Databázové systémy UIN010 Jazyk SQL neprocedurální jazyk (popisuje co požadujeme a nikoli jak to získat) je něčím více než pouhým dotazovacím jazykem Bude nás zajímat: -definice dat v SQL -manipulace dat v SQL -integritní omezení v SQL -pohledy -systémový katalog -přístupová práva -relační úplnost SQL
10
13.4.2015Databázové systémy UIN010 Definice dat v SQL Deklarace relačního datového typu odpovídá vlastně popisu dvourozměrné tabulky s označenými sloupci. Definice schématu CREATE SCHEMA Příkazy pro práci se schématy CREATE TABLE ALTER TABLE DROP TABLE
11
13.4.2015Databázové systémy UIN010 Definice dat v SQL CREATE TABLE -definujeme seznam jmen sloupců a odpovídajících typů dat CREATE TABLE Filmy (k_filmuCHAR(4)NOT NULL název_f CHAR(40)NOT NULL rok_vNUMBERNOT NULL režisérCHAR(20)); Po vyvolání tohoto příkazu se vytvoří prázdná tabulka Filmy a schéma se zaznamená do tzv. systémového katalogu.
12
13.4.2015Databázové systémy UIN010 Typy dat v SQL (SQL92) datové typy numerické, znakové řetězce, bitové řetězce, temporální data a časové intervaly Numerické typy INTEGER, SMALLINT, NUMERIC, DECIMAL FLOAT, REAL, DOUBLE PRECISION Znakové řetězce CHARACTER (CHAR), CHARACTER VARYING (VARCHAR) Temporální data DATE (rrrr-mm-dd) Integritní omezení NOT NULL, DEFAULT, UNIQUE, PRIMARY KEY, FOREIGN KEY, CHECK
13
13.4.2015Databázové systémy UIN010 Definice dat v SQL ALTER TABLE -příkaz umožňující změnu již vytvořené tabulky ADD, DROP, ALTER ALTER TABLE Filmy ADD Herec CHAR(40) DROP TABLE -příkaz pro odstranění tabulky z databáze CASCADE, RESTRICT DROP TABLE Filmy CASCADE CREATE SCHEMA -pro definici databázového schématu -je obvykle následován definicí tabulek, IO, práv přístupu atd. CREATE SCHEMA Půjčovna_filmů
14
13.4.2015Databázové systémy UIN010 Indexy v SQL = struktury umožňující rychlejší přístup k řádkům tabulek při zpracování uživatelského požadavku -index lze definovat pro jeden či kombinaci sloupců -pro schéma jedné tabulky lze definovat libovolné množství indexů -pouze jeden je definován jako CLUSTER, podle něj jsou data uspořádána (i fyzicky na disku) CREATE [UNIQUE] INDEX jméno_indexu ON jméno_tabulky (jméno_atr1 [uspořádání][, jméno_atr2 [uspořádání]] …) [CLUSTER] CREATE INDEX Prvni ON Filmy (k_filmu) DESC CLUSTER DROP INDEX Prvni
15
13.4.2015Databázové systémy UIN010 PříkladPříklad CREATE TABLE Rezervace (R_nazev_fVARCHAR(20)NOT NULL, R_rod_cNUMBERNOT NULL, R_datum_rezDATENOT NULL, PRIMARY KEY (R_nazev_f, R_rod_c), FOREIGN KEY (R_nazev_f) REFERENCES Filmy, FOREIGN KEY (R_rod_c) REFERENCES Zakaznici); Integritní omezení NOT NULL – test na neprázdnost UNIQUE – test na jedinečnost CHECK – test (sloupce či tabulky) na zvolenou podmínku DEFAULT – defaultní hodnota pro daný sloupec PRIMARY KEY, FOREIGN KEY – definice prim. a ciz. klíčů
16
13.4.2015Databázové systémy UIN010 Manipulace dat v SQL příkazy pro výběr dat (SELECT) příkazy aktualizační (INSERT, DELETE, UPDATE) další speciální příkazy Příkaz SELECT -základním konstruktem pro výběr dat je SELECT-FROM-WHERE blok klauzule SELECT –obsahuje seznam sloupců vytvářejících schéma tabulky klauzule FROM –obsahuje seznam tabulek, nad kterými je dotaz definován klauzule WHERE –obsahuje podmínku, kterou musí splňovat vyhledávaná data -neeliminuje z výsledku duplicitní hodnoty! (ALL, DISTINCT) SELECT [{DISTINCT|ALL}][{*|jméno_atr1[,jméno_atr2]…}|] FROM jméno_rel1[, jméno_rel2] … [WHERE podmínka] [ORDER BY specifikace_řazení]
17
13.4.2015Databázové systémy UIN010 PříkladyPříklady Názvy kin SELECT nazev_k FROM Kina; Názvy kin bez duplicity SELECT DISTINCT nazev_k FROM Kina; Dvojice jaké filmy, které kino promítá? SELECT DISTINCT k_filmu, k_kina FROM Program ORDER BY k_filmu ASC; Všechny informace o promítáních po 5.4.2002 SELECT * FROM Program WHERE datum_prom > ‘5.4.2002’;
18
13.4.2015Databázové systémy UIN010 PříkladyPříklady Všechny informace o promítáních od 1.4.2002 do 5.4.2002 SELECT * FROM Program WHERE datum BETWEEN ‘1.4.2002’ AND ‘5.4.2002’; Názvy filmů, které jsou promítány SELECT DISTINCT nazev_f FROM Filmy, Program WHERE Filmy.k_filmu = Program.k_filmu; Dvojice filmů se stejným režisérem? SELECT X.k_filmu AS První, Y.k_filmu AS Druhý FROM Filmy X, Filmy Y WHERE X.reziser = Y.reziser AND X.k_filmu <> Y.k_filmu;
19
13.4.2015Databázové systémy UIN010 AritmetikaAritmetika jednoduché výpočty na hodnotách vstupujících do výsledné tabulky Jaké budou ceny promítání při navýšení o 20%? SELECT k_kina, k_filmu, cena*1.2 FROM Promítání; Pro kino Blaník kódy filmů, které promítá a cenu promítání v eurech. SELECT k_filmu, cena/31.2 FROM Promítání X, Kina Y WHERE X.k_kina = Y.k_kina AND X.nazev_k = ‘Blaník’; Pozn.je-li jeden z operandů NULL, je výsledkem operace opět NULL
20
13.4.2015Databázové systémy UIN010 Agregační funkce funkce, které množině specifických prvků přiřadí reálné číslo (např. funkce COUNT umožňující získat počet prvků množiny) argumentem agregační funkce je obecně relace, ve skutečnosti se však jedná pouze o množinu hodnot, tedy unární relaci COUNT, SUM, MAX, MIN, AVG Syntaxe aplikace agregační funkce na sloupec: agregační_funkce([{ALL|DISTINCT}] jméno_sloupce) Pozn. SUM( ) = NULL AVG( ) = NULL COUNT( ) = NULL Pozor! Použití agregační funkce za SELECT vylučuje použití dalšího sloupce.
21
13.4.2015Databázové systémy UIN010 PříkladyPříklady Počet kin SELECT COUNT (*) AS počet_kin FROM Kina; Kolik je promítáno filmů? SELECT COUNT (DISTINCT k_filmu) AS počet_promítaných_filmů FROM Promítání; Počet kin s kapacitou větší než 200 SELECT COUNT (*) AS počet_kin_s_kapacitou FROM Kina WHERE kapacita > 200; Jaká je průměrná cena za vstupenku na film Apollo 13? SELECT AVG(Cena) AS průměrná_cena FROM Promítání X, Filmy Y WHERE X.k_filmu = Y.k_filmu AND Y.nazev_f = ‘Apollo 13’;
22
13.4.2015Databázové systémy UIN010 Konstrukt GROUP BY použití agregačních funkcí lze rozšířit na možnost aplikace na podmnožiny tabulky zkonstruované dle výběrového kritéria tabulka se konceptuálně rozdělí na skupiny, pro které je hodnota zvoleného sloupce konstantní řádky obsahující v tomto sloupci hodnotu NULL se seskupí do jedné skupiny získáváme tzv. seskupenou tabulku každá skupina přispívá do výsledné tabulky jedním řádkem jména sloupců, podle nichž se seskupení provádí jsou dána za vyhrazeným slovem GROUP BY SELECT … FROM … WHERE … GROUP BY jméno_atr1[{,[jméno_atr2]…}|]
23
13.4.2015Databázové systémy UIN010 PříkladyPříklady Kolik filmů natočili jednotliví režiséři? SELECT reziser, COUNT(k_filmu) FROM Filmy GROUP BY reziser; Kteří režiséři natočili alespoň tři filmy? SELECT reziser FROM Filmy GROUP BY reziser HAVING COUNT(k_filmu) > 2; Jaká je průměrná cena vstupenek u jednotlivých filmů? SELECT X.k_filmu, nazev_f, AVG(Cena) FROM Filmy X, Promítání Y WHERE X.k_filmu = Y.k_filmu GROUP BY k_filmu;
24
13.4.2015Databázové systémy UIN010 Další predikáty SQL Predikát LIKE -umožňuje pracovat s podřetězci hodnot sloupců typu CHAR a VARCHAR jméno_sloupce LIKE znaková_konstanta Hodnoty sloupce nazev_f libovolné délky začínající na PS nazev_f LIKE ‘PS%’ Dvoupísmenové názvy kin začínající písmenem A nazev_k LIKE ‘K_’ Minimálně třípísmenové názvy filmů s písmenem ‘a‘ na druhém místě nazev_f LIKE ‘_a_%’ Adresy kin obsahující slovo Praha adresa LIKE ‘%Praha%’
25
13.4.2015Databázové systémy UIN010 Další predikáty v SQL Predikát IN -predikát pro práci s množinami jméno_sloupce [NOT] IN poddotaz nebo jméno_sloupce [NOT] IN (seznam hodnot) Adresy kin, ve kterých dávají film s kódem 6524 SELECT Adresa FROM Kina WHERE k_kina IN (SELECT k_kina FROM Promítání WHERE k_filmu = ‘6524’); Názvy filmů, které natočili Hřebejk, Zelenka nebo Svěrák SELECT nazev_f FROM Filmy WHERE reziser IN (’Hřebejk’,’Zelenka’,’Svěrák’);
26
13.4.2015Databázové systémy UIN010 Další predikáty v SQL Pozn. Poddotaz můžeme užít i s porovnávacími operátory, máme-li zaručeno, že výsledkem poddotazu je právě jedna hodnota. Adresy kin, ve kterých dávají film Gladiátor natočený roku 2000 SELECT Adresa FROM Kina WHERE k_kina IN (SELECT k_kina FROM Promítání P WHERE P.k_filmu = (SELECT F.k_filmu FROM Filmy F WHERE F.nazev_f = „Gladiátor“ AND rok_v = 2000)); Pozn. jméno_atributu IN ( ) vrací false jméno_atributu IN (tabulka obsahující prázdné řádky) vrací unknown
27
13.4.2015Databázové systémy UIN010 Další predikáty v SQL Konstrukt > ALL ~ „větší něž všechny prvky ze specifikované množiny“ -k dispozici jsou i další porovnávací predikáty před ALL Jaké je nejdražší promítání dne 2.4.2002? SELECT * FROM Promítání WHERE Cena > All (SELECT Cena FROM Promítání WHERE datum = ‘2.4.2002’); Pozn.jméno_atributu ALL ( ) vrací TRUE jméno_atributu ALL (tabulka obsahující prázdné řádky) vrací unknown
28
13.4.2015Databázové systémy UIN010 Kvantifikace v SQL SQL nemá univerzální kvantifikátor, obsahuje však konstrukt EXISTS, který simuluje existenční kvantifikátor! EXISTS je test na neprázdnost množiny specifikované za EXISTS. [NOT] EXISTS poddotaz Jména filmů, kteří se v některém kině promítají SELECT nazev_f FROM Filmy F WHERE EXISTS (SELECT * FROM Promítání WHERE k_filmu = F.k_filmu); Názvy kin, která nic nehrají SELECT nazev_k FROM Kina K WHERE NOT EXISTS (SELECT * FROM Promítání WHERE k_kina = K.k_kina);
29
13.4.2015Databázové systémy UIN010 Množinové operace UNION, INTERSECT, EXCEPT -tabulky musí být kompatibilní (stejný počet sloupců, stejný typy dat odpovídajících si sloupců) Výraz_dotazu UNION [ALL] výraz_dotazu [ORDER BY specifikace_třídění] - UNION eliminuje duplikáty z výsledku bez zadání DISTINCT Filmy, které natočil režisér Hřebejk nebo jsou promítány 2.4.2002 (SELECT k_filmu FROM Filmy WHERE reziser = ‘Hřebejk’) UNION (SELECT k_filmu FROM Promítání WHERE datum = ‘2.4.2002’);
30
13.4.2015Databázové systémy UIN010 Použití prázdných hodnot Filmy, u nichž chybí záznam o režisérovi SELECT k_filmu FROM Filmy WHERE reziser IS NULL; Jaký zaměstnanec žijící v Praze má nejvyšší plat? (s pomocí ALL) SELECT k_zamestnance FROM Zamestnanci WHERE plat > ALL (SELECT Z.Plat FROM Zamestnanci Z WHERE Z.Adresa LIKE ‘%Praha%’); Jaký zaměstnanec žijící v Praze má nejvyšší plat? (s pomocí MAX) SELECT k_zamestnance FROM Zamestnanci WHERE plat > (SELECT MAX(Z.Plat) FROM Zamestnanci Z WHERE Z.Adresa LIKE ‘%Praha%’);
31
13.4.2015Databázové systémy UIN010 Spojení tabulek přirozené spojení SELECT * FROM R NATURAL JOIN S; spojení křížem (kartézský součin) SELECT * FROM R CROSS JOIN S; spojení přes podmínku SELECT * FROM R JOIN S ON A > B; spojení přes vyjmenované sloupce SELECT * FROM R JOIN S USING (A, B); vnitřní vs. vnější spojení SELECT * FROM R INNER(LEFT, RIGHT) JOIN S USING (A, B); –vnější spojení slouží k přidání některých řádků, které se s ničím nespojily, do výsledku
32
13.4.2015Databázové systémy UIN010 Aktualizace v SQL INSERT, DELETE, UPDATE DELETE FROM Filmy WHERE reziser = ‘Hřebejk’; UPDATE Filmy SET reziser ‘Zelenka’ WHERE k_filmu = ‘B12’; INSERT INTO Filmy (k_filmu, nazev_f) VALUES (‘B04’,’Jáchyme, hoď ho do stroje’); CREATE TABLE Pocet_filmu (reziser CHAR(20) počet INT); INSERT INTO TABLE Počet_filmu SELECT reziser, COUNT(k_filmu) FROM Filmy GROUP BY reziser;
33
13.4.2015Databázové systémy UIN010 Referenční integrita = logické vztahy mezi dvěma tabulkami – hlavní a vedlejší -sloupec ve vedlejší tabulce = cizí klíč – sloupec odkazující do hlavní tabulky INSERT -omezené vložení řádku do vedlejší tabulky DELETE, UPDATE -kaskádové odstranění řádků (ON DELETE CASCADE) -nahrazení cizího klíče prázdnou hodnotou (SET NULL) -nahrazení cizího klíče implicitní hodnotou (SET DEFAULT) -odstranění řádku z hlavní tabulky s upozorněním (NO ACTION) FOREIGN KEY (k_filmu) REFERENCES Filmy ON UPDATE CASCADE
34
13.4.2015Databázové systémy UIN010 PohledyPohledy = virtuální tabulky -slouží především pro dotazování – umožňuje značné zjednodušení zápisu dotazů (obdobně jako rozčlenění programu do procedur) CREATE VIEW Prazaci AS SELECT k_zamestnance, jmeno_z FROM Zamestnanci WHERE Adresa LIKE ‘%Praha%’; SELECT k_zamestnance FROM Prazaci WHERE Plat > 10000; DROP VIEW Prazaci;
35
13.4.2015Databázové systémy UIN010 Systémový katalog slouží k uchovávání informací o relačním schématu databáze, o indexech, o pohledech apod. opět přístupný s pomocí SQL SYSTABLES(name, creator, colcount, …) SYSCOLUMNS(name, tbname, coltype, …) SYSINDEXES(name, tbanem, creator, …) Které tabulky obsahujíc sloupec k_filmu? SELECT tbname FROM SYSCOLUMNS WHERE name = ‘k_filmu’; Jaké sloupce má tabulka Kina? SELECT name FROM SYSCOLUMNS WHERE tbname = ‘Kina’;
36
13.4.2015Databázové systémy UIN010 Přístupová práva Ochrana dat pro -výběr dat (SELECT) -modifikaci (INSERT, DELETE, UPDATE) -odkazování (REFERENCES) GRANT {ALL PRIVILEGES | privilegium1[, privilegium2, …]} ON objekt TO {PUBLIC identifikátor1[,identifikátor2, …]} [WITH GRANT OPTION] Privilegia SELECT | DELETE | INSERT | UPDATE |REFEREBCES [(jméno_atr1 [, jméno_atr2]…)] -klauzule WITH GRANT OPTION umožňuje udílet privilegia uživatelům od těch, kteří jsou uvedeni za TO -při definici práv je možné využívat také pohledy – přidělovat práva až na úrovni prvků tabulky
37
13.4.2015Databázové systémy UIN010 PříkladyPříklady Odebrání práv -pomocí REVOKE a zadání požadavků podobně jako u GRANT REVOKE SELECT ON Filmy TO Jana; GRANT UPDATE (adresa) GRANT SELECT ON Filmy TO Lenka; TO PUBLIC; GRANT ALL PRIVILEGES ON Prazaci TO Jana;
Podobné prezentace
© 2024 SlidePlayer.cz Inc.
All rights reserved.