n-ticový (řádkový) relační kalkul
DESCRIPTION
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 - PowerPoint PPT PresentationTRANSCRIPT
04/21/23 Databázové systémy UIN010
N-ticový (řádkový) relační kalkulN-ticový (řádkový) relační kalkulN-ticový (řádkový) relační kalkulN-ticový (řádkový) relační kalkulHodnoty proměnných
n-tice relací (řádky)Konstanty
hodnoty atributůUnární funkční symboly
atributová jménaPredikátové symboly
jména relací
Termykonstanty, proměnné, indexované n-tice x[A]
Atomické formuleP(x) – rozsahové formule, dále a b, kde a, b jsou indexované n-tice
Formulejako výše, ale s využitím omezených kvantifikátorů
04/21/23 Databázové systémy UIN010
Tvar zápisu v NRKTvar zápisu v NRKTvar zápisu v NRKTvar zápisu v NRK
{(t1,…tk): P1(r1) & … Pn(rn) & V(r1,…rn)}, kde
• k n 1
• Pi(ri) jsou rozsahové formule pro právě všechny volné proměnné formule V
• V neobsahuje žádné rozsahové formule
• Tj jsou proměnné nebo indexové proměnné pokrývající všechny volné proměnné formule V
04/21/23 Databázové systémy UIN010
Příklady v NRKPříklady v NRKPříklady v NRKPříklady v NRKPří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])}
04/21/23 Databázové systémy UIN010
Příklady v NRKPříklady v NRKPříklady v NRKPříklady v NRKPř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])}
04/21/23 Databázové systémy UIN010
Doménový relační kalkulDoménový relační kalkulDoménový relační kalkulDoménový relační kalkulRozdí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
04/21/23 Databázové systémy UIN010
Příklady v DRKPříklady v DRKPříklady v DRKPříklady v DRKUč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)}
04/21/23 Databázové systémy UIN010
Příklady v DRKPříklady v DRKPříklady v DRKPříklady v DRKPř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): dR(DT:d) R(KU:k,DT:d))}
Kódy učitelů, kteří učí každý den, kdy učí Novák (kód 358)
{(k):dR(KU:358, DT:d) R(KU:k,DT:d))}
04/21/23 Databázové systémy UIN010
PřipomenutíPřipomenutí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
04/21/23 Databázové systémy UIN010
Jazyk SQLJazyk SQLJazyk SQLJazyk 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
04/21/23 Databázové systémy UIN010
Definice dat v SQLDefinice dat v SQLDefinice dat v SQLDefinice dat v SQLDeklarace 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 TABLEALTER TABLE DROP TABLE
04/21/23 Databázové systémy UIN010
Definice dat v SQLDefinice dat v SQLDefinice dat v SQLDefinice dat v SQLCREATE TABLE
- definujeme seznam jmen sloupců a odpovídajících typů dat
CREATE TABLE Filmy
(k_filmu CHAR(4) NOT NULL
název_f CHAR(40) NOT NULL rok_v NUMBER NOT NULL
režisér CHAR(20));
Po vyvolání tohoto příkazu se vytvoří prázdná tabulka Filmy a schéma se zaznamená do tzv. systémového katalogu.
04/21/23 Databázové systémy UIN010
Typy dat v SQL (SQL92)Typy dat v SQL (SQL92)Typy dat v SQL (SQL92)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
04/21/23 Databázové systémy UIN010
Definice dat v SQLDefinice dat v SQLDefinice dat v SQLDefinice dat v SQLALTER TABLE
- příkaz umožňující změnu již vytvořené tabulkyADD, DROP, ALTER
ALTER TABLE Filmy ADD Herec CHAR(40)
DROP TABLE
- příkaz pro odstranění tabulky z databázeCASCADE, 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ů
04/21/23 Databázové systémy UIN010
Indexy v SQLIndexy v SQLIndexy v SQLIndexy 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
04/21/23 Databázové systémy UIN010
PříkladPříkladPříkladPříkladCREATE TABLE Rezervace
(R_nazev_f VARCHAR(20) NOT NULL,
R_rod_c NUMBER NOT NULL,
R_datum_rez DATE NOT 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ázdnostUNIQUE – test na jedinečnostCHECK – test (sloupce či tabulky) na zvolenou podmínkuDEFAULT – defaultní hodnota pro daný sloupecPRIMARY KEY, FOREIGN KEY – definice prim. a ciz. klíčů
04/21/23 Databázové systémy UIN010
Manipulace dat v SQLManipulace dat v SQLManipulace dat v SQLManipulace 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í]
04/21/23 Databázové systémy UIN010
PříkladyPříkladyPříkladyPříkladyNázvy kin
SELECT nazev_kFROM Kina;
Názvy kin bez duplicity
SELECT DISTINCT nazev_kFROM Kina;
Dvojice jaké filmy, které kino promítá?
SELECT DISTINCT k_filmu, k_kina FROM ProgramORDER BY k_filmu ASC;
Všechny informace o promítáních po 5.4.2002
SELECT *FROM ProgramWHERE datum_prom > ‘5.4.2002’;
04/21/23 Databázové systémy UIN010
PříkladyPříkladyPříkladyPříkladyVšechny informace o promítáních od 1.4.2002 do 5.4.2002
SELECT *FROM ProgramWHERE datum BETWEEN ‘1.4.2002’ AND ‘5.4.2002’;
Názvy filmů, které jsou promítány
SELECT DISTINCT nazev_f FROM Filmy, ProgramWHERE 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 YWHERE X.reziser = Y.reziser AND X.k_filmu <> Y.k_filmu;
04/21/23 Databázové systémy UIN010
AritmetikaAritmetikaAritmetikaAritmetika 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
04/21/23 Databázové systémy UIN010
Agregační funkceAgregační funkceAgregační funkceAgregač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.
04/21/23 Databázové systémy UIN010
PříkladyPříkladyPříkladyPříkladyPočet kin
SELECT COUNT (*) AS počet_kinFROM 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ž 200SELECT COUNT (*) AS počet_kin_s_kapacitouFROM KinaWHERE kapacita > 200;
Jaká je průměrná cena za vstupenku na film Apollo 13?SELECT AVG(Cena) AS průměrná_cenaFROM Promítání X, Filmy YWHERE X.k_filmu = Y.k_filmu AND Y.nazev_f = ‘Apollo 13’;
04/21/23 Databázové systémy UIN010
Konstrukt GROUP BYKonstrukt GROUP BYKonstrukt GROUP BYKonstrukt 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]…}|]
04/21/23 Databázové systémy UIN010
PříkladyPříkladyPříkladyPříkladyKolik filmů natočili jednotliví režiséři?
SELECT reziser, COUNT(k_filmu)FROM FilmyGROUP BY reziser;
Kteří režiséři natočili alespoň tři filmy?SELECT reziserFROM FilmyGROUP 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í YWHERE X.k_filmu = Y.k_filmuGROUP BY k_filmu;
04/21/23 Databázové systémy UIN010
Další predikáty SQLDalší predikáty SQLDalší predikáty SQLDalší predikáty SQLPrediká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%’
04/21/23 Databázové systémy UIN010
Další predikáty v SQLDalší predikáty v SQLDalší predikáty v SQLDalší predikáty v SQLPredikát IN
- predikát pro práci s množinami
jméno_sloupce [NOT] IN poddotaznebo
jméno_sloupce [NOT] IN (seznam hodnot)
Adresy kin, ve kterých dávají film s kódem 6524SELECT Adresa FROM KinaWHERE 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ákSELECT nazev_f FROM FilmyWHERE reziser IN (’Hřebejk’,’Zelenka’,’Svěrák’);
04/21/23 Databázové systémy UIN010
Další predikáty v SQLDalší predikáty v SQLDalší predikáty v SQLDalší predikáty v SQLPozn. 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
04/21/23 Databázové systémy UIN010
Další predikáty v SQLDalší predikáty v SQLDalší predikáty v SQLDalší predikáty v SQLKonstrukt > 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
04/21/23 Databázové systémy UIN010
Kvantifikace v SQLKvantifikace v SQLKvantifikace v SQLKvantifikace 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 FWHERE EXISTS (SELECT * FROM Promítání
WHERE k_filmu = F.k_filmu);
Názvy kin, která nic nehrají
SELECT nazev_k FROM Kina KWHERE NOT EXISTS (SELECT * FROM Promítání
WHERE k_kina = K.k_kina);
04/21/23 Databázové systémy UIN010
Množinové operaceMnožinové operaceMnožinové operaceMnožinové operaceUNION, 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’);
04/21/23 Databázové systémy UIN010
Použití prázdných hodnotPoužití prázdných hodnotPoužití prázdných hodnotPoužití prázdných hodnotFilmy, u nichž chybí záznam o režisérovi
SELECT k_filmu FROM FilmyWHERE reziser IS NULL;
Jaký zaměstnanec žijící v Praze má nejvyšší plat? (s pomocí ALL)
SELECT k_zamestnance FROM ZamestnanciWHERE 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 ZamestnanciWHERE plat > (SELECT MAX(Z.Plat) FROM Zamestnanci Z
WHERE Z.Adresa LIKE ‘%Praha%’);
04/21/23 Databázové systémy UIN010
Spojení tabulekSpojení tabulekSpojení tabulekSpojení 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ínkuSELECT * FROM R JOIN S ON A > B;
• spojení přes vyjmenované sloupceSELECT * 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
04/21/23 Databázové systémy UIN010
Aktualizace v SQLAktualizace v SQLAktualizace v SQLAktualizace v SQLINSERT, 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 FilmyGROUP BY reziser;
04/21/23 Databázové systémy UIN010
Referenční integritaReferenční integritaReferenční integritaReferenč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
04/21/23 Databázové systémy UIN010
PohledyPohledyPohledyPohledy= 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;
04/21/23 Databázové systémy UIN010
Systémový katalogSystémový katalogSystémový katalogSysté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 SYSCOLUMNSWHERE tbname = ‘Kina’;
04/21/23 Databázové systémy UIN010
Přístupová právaPřístupová právaPřístupová právaPřístupová právaOchrana dat pro
- výběr dat (SELECT)- modifikaci (INSERT, DELETE, UPDATE)- odkazování (REFERENCES)
GRANT {ALL PRIVILEGES | privilegium1[, privilegium2, …]} ON objektTO {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
04/21/23 Databázové systémy UIN010
PříkladyPříkladyPříkladyPříklady
Odebrání práv
- pomocí REVOKE a zadání požadavků podobně jako u GRANT
REVOKE SELECTON FilmyTO Jana;
GRANT UPDATE (adresa) GRANT SELECT ON Filmy ON Filmy TO Lenka; TO PUBLIC;
GRANT ALL PRIVILEGES ON Prazaci TO Jana;