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



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

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

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

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

Databáze SQL SELECT. David Hoksza

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

Jazyk SQL 3 - DML, DDL, TCL, DCL

RELAČNÍ DATABÁZOVÉ SYSTÉMY

Jazyk SQL slajdy k přednášce NDBI001

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

Databázové systémy. - SQL * definice dat * aktualizace * pohledy. Tomáš Skopal

1. Relační databázový model

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

Kapitola 4: SQL. Základní struktura

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

Databázové systémy trocha teorie

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

- sloupcové integritní omezení

PL/SQL. Jazyk SQL je jazykem deklarativním, který neobsahuje procedurální příkazy jako jsou cykly, podmínky, procedury, funkce, atd.

4IT218 Databáze. 4IT218 Databáze

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

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

7. Integrita a bezpečnost dat v DBS

7. Integrita a bezpečnost dat v DBS

Materiál ke cvičením - SQL

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

Jazyk SQL databáze SQLite. připravil ing. petr polách

Databázové a informační systémy

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

Obchodní akademie a Jazyková škola s právem státní jazykové zkoušky Jihlava

Konceptuální modelování a SQL

Databáze 2011/2012 SQL DDL (CREATE/ALTER/DROP TABLE), DML (INSERT/UPDATE/DELETE) RNDr.David Hoksza, Ph.D.

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

Databázové systémy. Doc.Ing.Miloš Koch,CSc.

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

Databázové systémy I

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

Databázové systémy. Datová integrita + základy relační algebry. 4.přednáška

Optimalizace dotazů a databázové transakce v Oracle

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

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

Databáze I. 5. přednáška. Helena Palovská

Dotazovací jazyk SQL I

SQL v14. 4D Developer konference. 4D Developer conference 2015 Prague, CZ Celebrating 30 years

Structured Query Language SQL

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

Databázové systémy II. KIV/DB2 LS 2007/2008. Zadání semestrální práce

Stručný obsah. část III Aktualizace dat Kapitola 10: Aktualizace databáze 257 Kapitola 11: Integrita dat 275 Kapitola 12: Zpracování transakcí 307

SPŠS Č.Budějovice Obor Geodézie a Katastr nemovitostí 3.ročník ATRIBUTY ZÁKLADN POJMY VÝBĚR PRVKŮ DLE ATRIBUTŮ

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

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

Západočeská univerzita v Plzni Katedra informatiky a výpočetní techniky. 9. června krovacek@students.zcu.cz

3. Jazyky relačních databázových systémů

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

Databáze I. 1. přednáška. Helena Palovská

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

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

Databázové systémy Tomáš Skopal

PG 9.5 novinky ve vývoji aplikací

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

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

Relační databázový model. Vladimíra Zádová, KIN, EF, TUL- DBS

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

2. přednáška. Databázový přístup k datům (SŘBD) Možnost počítání v dekadické aritmetice - potřeba přesných výpočtů, např.

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

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

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

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

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

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

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

FAKULTA STAVEBNÍ STUDIJNÍ PROGRAM: GEODÉZIE A KARTOGRAFIE TYP PROGRAMU: MAGISTERSKÝ STUDIJNÍ OBOR: GEOMATIKA ÚVOD DO ZPRACOVÁNÍ PROSTOROVÝCH DAT

Vkládání, aktualizace, mazání

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

UNIVERZITA PALACKÉHO V OLOMOUCI

Materializované pohledy

Kapitola 6: Omezení integrity. Omezení domény

Databázové systémy I

Jazyk PL/SQL Úvod, blok

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

Fakulta elektrotechniky a informatiky Databázové systémy 2. Leden 2010 souhrn. Červené dobře (nejspíš), modré možná

MySQL manuál. Copyright: Adam Jun Stránky manuálu:

3. Jazyky relačních databázových systémů

Databázové systémy. Integritní omezení. Vilém Vychodil. V. Vychodil (KMI/DATA1, Přednáška 9) Integritní omezení Databázové systémy 1 / 33

Databázové systémy a SQL

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

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

2. blok část A Jazyk SQL, datové typy

Obsah. Kapitola 1. Kapitola 2. Kapitola 3. Kapitola 4. Úvod 11. Stručný úvod do relačních databází 13. Platforma 10g 23

Maturitní témata z předmětu PROGRAMOVÉ VYBAVENÍ pro šk. rok 2012/2013

8.2 Používání a tvorba databází

Databázové systémy úvod

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

Práva a role. Martin Polák. NDBI013 Administrace Oracle

Databáze II. 1. přednáška. Helena Palovská

OBJECT DEFINITION LANGUAGE. Jonáš Klimeš NDBI001 Dotazovací Jazyky I 2013

Temporální databáze. Jan Kolárik Miroslav Macík

Tabulka fotbalové ligy

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

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

Transkript:

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

SQL - historie 1974-75 - IBM - 1.prototyp - SEQUEL od 1979 - do praxe - ORACLE (1979) IBM - SQL/DS (1981), DB/2 (1983) postupně přijímán jako standard pro přístup k datům v relačních databázích Pozn. - QBE = QUERY BY EXAMPLE

SQL - normy SQL 86 - DDL, DML, DCL 1986 - schválena ANSI norma SQL, základem dialekt DB2, 1987 - přijato mezinárodní standardizační organizací ISO SQL 89 - revize - 1989 rozšíření o specifikaci IO SQL2 - r. 1992 revize, SQL3 - nyní snaha po standardizaci - možnost kompatibility,přenositelnost - SAG konsorcium

Standardizace SQL Od r. 86.. 3 hlavní edice standardů - SQL 86, SQL92, SQL99 Menší edice SQL89 Pozn. :» po přijetí standardu SQL 92 se mluvilo o SQL jako o SQL3 od roku 1999 mají být standardy označovány : SQL: rrrr - (SQL:1999) SQL3 - přestává se používat, nyní SQL4» SQL4 chápána jako kontejner, kde všechny budoucí standardy standard 92 je implementován pouze částečně

SQL je neprocedurální jazyk specifikuje CO požadujeme nikoli jak toho dosáhneme. DATA DEFINITION LANGUAGE - DDL DATA MANIPULATION LANGUAGE - DML DATA CONTROL LANGUAGE - DCL

DATA DEFINITION LANGUAGE - DDL vytváření databáze a relační struktury vytváření, rušení a aktualizace relací (tabulek) vytváření a rušení indexů vytváření a rušení pohledů - (ne alter) Integritní omezení a DDL (create domain, check, Primary key ) Datové typy podporované SQL-92

DATA MANIPULATION LANGUAGE - DML příkazy k provádění základní manipulace s daty : vkládání, modifikace, rušení dat z relací INSERT UPDATE DELETE k výběru dat z databáze - jednoduché i složité dotazy: SELECT

DATA CONTROL LANGUAGE - DCL příkazy GRANT, REVOKE Přikazy pro tvorbu aplikací pro spolupráci SQL s hostitelským jazykem -- příkazy DECLARE CURSOR OPEN CURSOR - před 1. z množiny FETCH CURSOR - přesun o 1 CLOSE CURSOR příkazy pro uživatelskou transakci - ROLLBACK, COMMIT

SQL příkazy z rezervovaných (klíčových) slov a uživatelem definovaných slov. Rezervovaná slova jsou nedílnou součástí příkazů SQL uživatelem definovaná slova jsou slova používaná pro pojmenování databázových relací, sloupců, pohledů 14

Psaní SQL příkazů Klíčová slova příkazu - velkými písmeny Uživatelem definovaná slova - malými písmeny Každá klauzule příkazu začíná na novém řádku [text] - volitelnáčást příkazu [,...] - možné opak. předchozíčásti uzavřené v { } [text text] možný výběr některé z variant {text text} nutný výběr některé z variant ( ) součást příkazu 15

DATA MANIPULATION LANGUAGE

INSERT - vstup dat INSERT INTO název relace [(výčet atributů)] {VALUES( výčet hodnot atributů) SELECT-příkaz} kde: VALUES -pro vstup právě jednohořádku relace - pokud všech atributů, pak nemusí být uveden výčet atributů specifikovaných ve výčtu SELECT - pro vstup více řádků najednou ( z 1 či více relací) struktura řádků vrácených vnořeným příkazem SELECT musí být kompatibilní se strukturou naplňované relace. 128

výčet atributů- nepovinné - pokud jsou vkládány hodnoty atributů v tom pořadí, v jakém byly definovány a zároveň budu vkládat hodnoty všech atributů výčet hodnot atributů - je oddělen čárkou, pořadí hodnot atributů a datový typ souhlasí s definicí relace, resp. s pořadím uvedeným ve výčtu atributů; u atributu typu CHAR je hodnota v pro neznámou hodnotu - použití NULL

Není-li do atributu relace vložena hodnota při INSERTu - pak bude obsahovat : DEFAULT -hodnotu- pokud je určena při definici atributu NULL - není-li určena DEFAULT hodnota signalizace chyby : pokud u atributu určeno NOT NULL, zároveň není určena DEFAULT hodnota a nebyla-li vložena hodnota byla-li vložena hodnota, která porušuje definovanou jedinečnost hodnoty atributu.

INSERT Př. INSERT INTO sql-sport.zakaznik (adresa, discount, mesto, czak) VALUES(" Horní ulice 777", 9, "Brno", 1). INSERT INTO sql-sport.zakaznik (adresa,discount, mesto, czak) SELECT Address, Discount, City,Cust-Num FROM sport19.customer.

UPDATE - aktualizace dat UPDATE název relace SET jméno atributu= {NULL výraz} [, jméno atributu = {NULL výraz}]... [WHERE podmínky] Jedním příkazem lze měnit hodnotu jednoho či více atributů v rámci jedné relace

SET - přiřazuje atributu / ům novou hodnotu ( konstanta, NULL, název atributu či proměnné, aritmetický výraz) WHERE -nepovinné, aktualizuje všechny řádky, které vyhovují podmínce pokud není uvedeno WHERE -aktualizuje dané atributy ve všech řádcích Systém m odmítne aktualizaci, pokud nová hodnota nebude respektovat některn která z def. omezení atributu

UPDATE Př. UPDATE zakaznik SET zeme = zeme + "/EU UPDATE radek-obj SET qty = gty + qty/12, cena = cena * 2 WHERE c-pol = 125.

DELETE - rušení dat DELETE FROM název relace [WHERE podmínky] Jedním příkazem lze zrušit jeden či více řádků jedné relace WHERE - vymaže z relace všechny řádky, které vyhovují podmínce Pokud nebude uvedena podmínka, zruší se všechny řádky relace - ale nezruší se definice relace

příkaz SELECT - použití pro výběr dat z jedné relace pro výběr dat z více relací vnější spojení, vnitřní spojení, samospojení provádění operací (UNION, INTERSECT, EXCEPT). Hnízdění ( nesting) dotazů - do příkazu SELECT, INSERT, UPDATE, DELETE strukturované dotazy jednoduché a souvztažné 3

SELECT příkaz SELECT klauzule FROM klauzule [WHERE klauzule ] [GROUP BY klauzule] [HAVING klauzule ] [ORDER BY klauzule] 17

SELECT příkaz SELECT- povinné, specifikuje sloupce výstupu - atributy, konstanty, aritmetické výrazy, agregační funkce FROM - povinné, uvádí relace, z nichž data vybírána WHERE - nepovinné, uvádí podmínky výběru GROUP BY - nepovinné, vytváří skupiny řádků, z jejichž hodnot jsou odvozeny souhrnné hodnoty - s agr.funkcemi HAVING - nepovinné, uvádí výběrové podmínky, vztahuje se ke GROUP BY ORDER BY - nepovinné, k uspořádánířádků výstupní tabulky ( je ve většině implementací, není ve výchozí normě)

SELECT příkaz Pořadí klauzulí nemůže být měněno. Postup při vyhodnocování : FROM WHERE GROUP BY HAVING ORDER BY 19

SELECT příkaz SELECT - FROM SELECT [ALL DISTINCT] {* jméno atributu výraz}[,...] FROM { jméno relace1 [alias].. alias (correlation-name)-pokud se budu chtít na danou relaci v příkazu SELECT odvolávat jiným jménem než je jméno tabulky (důvod- např.dlouhé jméno tabulky), nebo při self-join (samospojení)

SELECT klauzule SELECT ALL DISTINCT ALL znamená všechny - i opakující se řádky, je to defaultní zadání * DISTINCT» pokud nechci opakovánířádků se stejnými hodnotami ( = duplicitních řádků)» potlačuje duplicitnířádky -až při zobrazení výsledné relace pokud chci zobrazit všechny atributy z relace/relací

SELECT příkaz SELECT jméno atributu - jednoznačný název - v rámci databáze : jméno relace.jméno atributu Výraz - konstanty, numerické, znakové, datumové, logické, funkce aritmetické výrazy +, -, *, /, ( ) Pozn.: mezi operátory minimálně 1 mezera, ve výrazech kombinace atributů, konstant

SELECT příkaz SELECT.. {jméno atributu výraz } FORMAT " " AS ", atribut1... od SQL2 lze přejmenovat názvy sloupců ( u atributů), či u výrazů pojmenovat - jméno atributu výraz AS název sloupce FORMAT - pokud chci jiný než definovaný v DDL

SELECT příkaz WHERE ke spojení více relací ( implicitní ) ( porovnání atributů, podle kterých se mají spojit pro podmíněný výběr prvků pozn: z hlediska relační algebry SELEKCE je-li více podmínek výběru spojení AND, OR

SELECT příkaz WHERE podmínky výběru: klasicky - pomocí NOT, AND, OR, >, <, <=, >=,<> výraz1 relační_operátor výraz2 výrazem může být : konstanta, atribut, funkce, aritmetický výraz

SELECT -WHERE BETWEEN /NOT BETWEEN pro spojitý interval, výraz1 -dolní, výraz2 - horní hranice intervalu, - za výrazx lze uvést konstantu, atribut, aritmetický výraz...- WHERE výraz [ NOT] BETWEEN výraz1 AND výraz2 Př.: czak BETWEEN 1 AND 5.... C-zak >= 1 AND c-zak <= 5 name BETWEEN "a" AND "dz" odmena NOT BETWEEN plat AND plat +1400

SELECT -WHERE IN /NOT IN pro nespojité hodnoty zjednodušuje zápis výběrových podmínek (OR) výběr ze seznamu hodnot, výčet hodnot -nelze uvádět jména atributů, výrazy WHERE výraz [ NOT] IN (výčet hodnot) Př.: c-zak IN (1,2,3,4,5)...c-zak = 1 OR c-zak = 2 OR...

SELECT - WHERE NULL / NOT NULL pouze pro atribut relace WHERE jméno atributu IS [ NOT] NULL Př.: všechny, které nemají uveden údaj - dat-odesl IS NULL Pozn.: není pravda, že NULL hodnota je rovna jiné NULL hodnotě (t.j. neurčené nemohou být rovny navzájem ale při potlačení hodnotě), NULL hodnoty si výstupníchřádků s duplicitními hodnotami jsou NULL hodnoty v rámci atributu považovány výjimečně za duplicitní

SELECT -WHERE LIKE /NOT LIKE porovnává se vzorovou hodnotou lze jím testovat jen atributy pro řešení dotazů, které nelze řešit přímým srovnáváním WHERE jméno atributu [ NOT] LIKE "vzor" [ ESCAPE "oddělovač"] kde: % - více znaků _ - jeden znak Př.: atribut LIKE " % OV" atribut LIKE " 13 / %" ESCAPE "/" vyhledá hodnoty atributu 13%

SELECT * FROM zakaznik WHERE mesto LIKE '%dec%';

SELECT ORDER BY klauzule implicitně : výstup podle PK tabulky uvedené první za FROM, hodnoty jsou uvedeny vzestupně. ORDER BY slouží ke změně implicitních podmínek: ORDER BY {{ jméno atributu n } ASC DESC} [,..] n -číslo pořadí sloupce za SELECT klauzulí - výhoda pro odvozené hodnoty ASC - vzestupně - standardně DESC - sestupně

ORDER BY Kriteria oddělena čárkou, prvně uvedený je nadřazený následujícím Některé implementace jazyka vyžadují, aby atribut použitý jako kriterium třídění byl obsažen v klauzuli SELECT.

BOOLEOVSKÉ OPERÁTORY AND, OR - užití při více výběrových podmínkách AND - musí být pravdivé všechny uvedené podmínky OR - alespoň jedna z podmínek pravdivá Relační operátory : <, >, <=, >=, <> Pořadí vyhodnocování závorky násobení, dělení odčítání, sčítání NOT AND OR

SQL SELECT DML - agregační funkce klauzule GROUP BY, HAVING spojení vnitřní spojení vnější spojení Samospojení strukturované příkazy jednoduché souvztažné operace UNION, INTERSECT, EXCEPT dynamické a statické relace

SELECT příkaz a agregace SELECT klauzule FROM klauzule [WHERE klauzule ] [GROUP BY klauzule] [HAVING klauzule ] [ORDER BY klauzule] 17

SELECT příkaz AGREGAČNÍ FUNKCE = aggregate functions, column functions SUM AVG MIN MAX COUNT použití v klauzuli SELECT umožní z hodnot atributů v databázi odvodit souhrnné, agregované údaje

SELECT příkaz AGREGAČNÍ FUNKCE Rozdíl agregačních funkcí a aritmetických výrazů aritmetické výrazy za klauzulí SELECT vypočítávají nové údaje z hodnot v rámci jednotlivých řádků agregační funkce - souhrnná hodnota je odvozena z hodnot určitého atributu relace: - ze všech řádků relace - z konkrétních řádků určených podmínkami za WHERE - ze skupin řádků definovaných klauzulí GROUP BY

SELECT příkaz AGREGAČNÍ FUNKCE agregace bez klíče (agregačního) ze všech řádků původní relace či z řádků vyhovujících podmínkám za WHERE se vytvoří jeden agregát. Výsledkem je jeden řádek. agregace s klíčem častěji, vyplývá z požadavku zjištění hodnot agregovaných funkcí za menší shluky (seskupení). Výsledkem je více řádků - a to tolik řádků, kolik různých hodnot bude obsaženo ve sloupci (sloupcích) podle kterých chceme agregovat.

SELECT příkaz AGREGAČNÍ FUNKCE Specifikace agregačního klíče v klauzuli GROUP BY jednoduchý klíč ( 1 atribut), složený klíč (více atributový)

SELECT příkaz AGREGAČNÍ FUNKCE DISTINCT u agregační funkce potlačuje duplicitní hodnoty argumentu funkce při výběru dat z databáze před vlastním provedením výpočtu ( při použití v klauzuli SELECT potlačuje duplicitní řádky až při zobrazení výsledné relace). NULL - neznámé, nedefinované hodnoty se nezapočítávají do počtu, součtu, průměru, max, min Výjimka COUNT( * ) - zjistí počet řádků bez ohledu na nedefinovanost obsahu.

SELECT příkaz AGREGAČNÍ FUNKCE - SUM SUM ( [ DISTINCT ] argument) - vrací součet hodnot argumentu - argument: - numerický atribut - aritmetický výraz vracející numerickou hodnotu

SELECT příkaz AGREGAČNÍ FUNKCE - AVG AVG ( [ DISTINCT ] argument) Vrací průměrnou hodnotu z určených ( NOT NULL) hodnot argumentu argument: - numerický atribut - aritmetický výraz vracející numerickou hodnotu

SELECT příkaz AGREGAČNÍ FUNKCE - MAX, MIN MIN ( [ DISTINCT ] argument) MAX ( [ DISTINCT ] argument) vrací minimální, resp. maximální hodnotu argumentu argument: atribut aritmetický výraz neobsahující znakovou konstantu

SELECT příkaz AGREGAČNÍ FUNKCE - COUNT COUNT ( * ) Vrací počet hodnot v rámci atributů relace, tedy početřádků relační tabulky. COUNT ( [ DISTINCT ] atribut) Funkce COUNT s argumentem je v různých systémech implementována odlišně. Standardně vrací počet určených hodnot daného atributu- t.j. počet hodnot atributu různých od NULL ( = NOT NULL). Některé implementace připouští pouze syntaxi s povinným užitím DISTINCT: COUNT ( DISTINCT atribut).

SELECT příkaz AGREGAČNÍ FUNKCE - COUNT Rozdíl COUNT ( * ) a COUNT ( DISTINCT atribut) je-li atribut povinný a neobsahuje duplicitní údaje» výsledky obou jsou totožné. Je-li atribut povinný a obsahuje duplicitní údaje» pak odlišný výsledek není-li atribut povinný - budou -li nedefinované (NULL) hodnoty atributu v některých prvcích relace» pak nejsou shodné.

SELECT příkaz AGREGAČNÍ FUNKCE - COUNT PŘ. SELECT COUNT(*),COUNT(DISTINCTc-obj), COUNT( DISTINCT c-zak), COUNT(DISTINCT d- exp) FROM objednavky výsledek: 214, 214, 71, 53 Jak byste interpretovali tento výsledek, co z toho vyplývá

SELECT příkaz- AGREGAČNÍ FUNKCE - určení atributů a funkcí za SELECT Není možné za SELECT uvádět atributy / výrazy, jejichž hodnoty jsou vztaženy k prvkům relace a uvádět agregační funkce, které jsou vztaženy buď k celé relaci, či pouze k některým řádkům dané relace. Při agregaci není nutné se omezit jen na jednotlivé atributy, lze je použít na jakýkoli výraz, v němž se budeme odkazovat na více atributů původní relace příkaz GROUP BY slouží k vytváření dílčích shluků, neuvedu-li GROUP BY pak se jedná o agregaci bez klíče výběru, potom je nutné se zamyslet nad poli uvedenými za select - např. budu chtít objem zboží celkem, ale uvedu ještě atr. objednávka, či zákazník. Toto je nepřípustn pustné.

SELECT příkaz GROUP BY, HAVING HAVING - pouze užití s klauzulí GROUP BY omezuje výstup agregovaných skupin obdoba WHERE, ale WHERE filtruje řádky jména atributů za HAVING musí být obsaženy v GROUP BY nebo musí být obsaženy v agregované funkci. Použití [NOT]BETWEEN, [NOT]IN,... viz WHERE 61

Druhy spojení

SPOJENÍ (join ) je-li třeba pracovat s daty z více relací - zřetězenířádků relací dle určité podmínky. Mluvíme o všeobecném joinu Nejčastější spojení dle shody hodnot atributů tzv. ekvivalentní join explicitně spojení v SQL neexistuje, vyjadřuje se pomocí SELECT příkazu: ve FROM - uvedením spojovaných relací za WHERE uvedením podmínky spojení ale jen vnitřní spojení (atributy relací musí být kompatibilní)

SPOJENÍ (join ) od standardu SQL2 kromě operátorů <, >, >=, <= lze použít pro spojení join operátory: pro vnější spojení - outer join LEFT JOIN, RIGHT JOIN, FULL JOIN (ve většině současných relací zatím není) spojení přes rovnost (ekvivalentní join ), přirozený join (pojení max množiny shodných atributů)

SPOJENÍ (join ) druhy join : vnitřní inner join zobrazí jen ty řádky dvou či více relací, které splňují podmínky spojení vnitřní spojení lze specifikovat 2 způsoby:» implicitně : pomocí klauzule FROM (uvedení tabulek) a WHERE (uvedení podmínek spojení)» explicitně: specifikací v klauzuli FROM ( uvedením tabulek včetně typu a podmínek spojení) :

SPOJENÍ (join ) inner join - explicitně jméno relace1[inner] JOIN jméno relace2 ON podmínky spojení [[INNER] JOIN jméno relace3 ON podmínky spojení...] ON klauzule může specifikovat více podmínek -pak spojení logickými operátory AND, OR, NOT lze kombinovat LEFT JOIN a INNER JOIN je-li spojeno více tabulek- vyhodnocování spojení se provádí zleva doprava pokud za FROM bude uvedeno více tabulek bez podmínek spojení - pak výstup odpovídá kartézskému součinu

SPOJENÍ (join ) SELECT zakaznik.c-zak, zakaznik.jmeno, objednavka.c-obj, objednavka.d-obj FROM zakaznik, objednavka WHERE zakaznik.c-zak = objednavka.c-zak. SELECT zakaznik.c-zak, zakaznik.jmeno, objednavka.c-obj, objednavka.d-obj FROM zakaznik INNER JOIN objednavka ON zakaznik.c-zak = objednavka.c-zak

SPOJENÍ (join ) vnější outer join u vnějšího spojení je důležité, zda se jedná o levéči pravé vnější spojení - není symetrické levé vnější spojení lze uvést pomocí LEFT, event. LEFT OUTER JOIN SELECT zakaznik.c-zak,zakaznik.jmeno, objednavka.c-obj, objednavka.d-obj FROM zakaznik LEFT JOIN objednavka ON zakaznik.c-zak = objednavka.c-zak.

SPOJENÍ (join ) levé vnější spojení: jméno relace1[alias ] [INNER LEFT[OUTER]] JOIN jméno relace2 [alias] ON podmínky spojení [INNER LEFT[OUTER]] JOIN jméno relace3 [alias] ON podmínky spojení... pravé vnější spojení: jméno relace1[alias ] RIGHT[OUTER] JOIN jméno relace2 [alias] ON podmínky spojení

SPOJENÍ (join ) SELECT klauzule FROM { jméno relace [correlation-name] implicit-join explicit-join } [WHERE klauzule] [GROUP BY atribut [,atribut2]...] [HAVING klauzule] [ORDER BY klauzule]

Vyjádření různých spojení SQL92 - rozšíření o spojení křížem» FROM r CROSS JOIN s ( totéž jako FROM a,b) přirozené spojení» FROM r NATURAL JOIN s spojení přes rovnost hodnot zadaných stejnojmenných sloupců»...from r JOIN s USING (a,b) spojení přes obecnou spojovací podmínku» FROM r JOIN s ON a<=b» Tendence = oddělit SELEKCI a SPOJENÍ LZE POUŽÍT PRO VNITŘNÍ I VNĚJŠÍ SPOJENÍ ( INNER, OUTER - LEFT, RIGHT, FULL)

SPOJENÍ (join ) - vlastní self join užití, pokud budu potřebovat vícekrát do téže relace je možné uvést tuto relaci (za FROM ) vícekrát - avšak s použitím alias

Strukturované dotazy

STRUKTUROVANÉ DOTAZY Jazyk SQL je označován jako strukturovaný právě proto, že je možné vnořovat SELECT příkazy Vnořování se užívá pro složitější dotazy, vyhodnocování probíhá postupně po jednotlivých subdotazech

STRUKTUROVANÉ DOTAZY Subdotaz ( = vnitřní dotaz, vnitřní příkaz ) je příkaz SELECT vnořený do výběrové podmínky WHERE SQL příkazu, může být i za HAVING Vnitřní příkaz dodává hodnoty pro vyhodnocení podmínky Vnější příkaz je příkaz, do kterého je příkaz SELECT vnořen. vnější příkaz - je zejména SELECT, užívá se pro INSERT, UPDATE, DELETE

STRUKTUROVANÉ DOTAZY vzájemné vztahy vnějších a vnitřních dotazů jednoduché souvztažné» vyhodnocování dotazů zevnitř ven: vnitřní příkaz je vyhodnocen jako první, nezávisle na vnějším příkazu vnější příkaz následně využívá výsledků vnořeného dotazu» vyhodnocování dotazů složitější: vnitřní příkaz pracuje na základě hodnot dodaných vnějším příkazem vnitřní dotaz využívá a tedy závisí na hodnotách dodávaných do subdotazu vnějším dotazem

STRUKTUROVANÉ DOTAZY - vnitřní dotaz Podle typů výsledků, které vrací lze rozlišit subdotazy: vracející množinu hodnot - vždy jim předchází IN nebo relační operátor s ALL, ANY nebo SOME vracející maximálně jednu hodnotu - uvozené relačním operátorem bez modifikace subdotazy fungující jako test existence - uvozené klíčovým slovem EXISTS

STRUKTUROVANÉ DOTAZY - syntaxe příkazu: SELECT {název atributu výraz * } [,...] FROM název relace [,...] WHERE výraz { [ NOT ] IN relační operátor [ ALL ANY SOME ] [ NOT] EXISTS } ( SELECT {název atributu výraz * } [,...] FROM název relace [,...] WHERE výběrové podmínky] )

STRUKTUROVANÉ DOTAZY omezení pro subdotazy vnořený SELECT je uzavřený v ( ) v klauzuli WHERE vnějšího příkazu musí platit kompatibilita mezi hodnotou výrazu a hodnotou vrácenou subdotazem klauzule SELECT vnořeného subdotazu, které předchází IN, nebo pouze relační operátor může obsahovat maximálně jeden atribut nebo výraz subdotaz, kterému předchází ALL, ANY, SOME může obsahovat klauzule GROUP BY a HAVING v subdotazu obsahujícím klauzuli GROUP BY nelze použít klíčového slova DISTINCT subdotaz nemůže obsahovat klauzuli ORDER BY

STRUKTUROVANÉ DOTAZY subdotazy uvozené [ NOT ] IN WHERE výraz [ NOT ] IN ( SELECT příkaz) výsledkem subdotazu může být množina hodnot ve vnějším dotazu tato množina hodnot nahrazuje výčet hodnot v seznamu, se kterým pracuje IN. Vyhodnocení podmínky vnějšího dotazu: použití IN - pravdivá, je-li zjištěna shoda hodnoty výrazu z WHERE klauzule alespoň s jednou hodnotou z množiny hodnot vrácených subdotazem použit ití NOT IN - pravdivá, pokud nebude rovna žádné z vrácené množiny hodnot

STRUKTUROVANÉ DOTAZY uvozené operátory : <, >, =, < >, < =, > = WHERE výraz relační operátor [ ALL ANY SOME ] ( SELECT příkaz) bez ALL, ANY, SOME smí vrátit maximálně jednu hodnotu použit ití v dotazech, kdy s jistotou víme, že dotaz nemůže vrátit více hodnot. ( v případě vrácení více hodnot - chyba) s ALL, ANY, SOME smí vrátit více jak jednu hodnotu ALL, ANY, SOME přesněji specifikují způsob porovnání vrácené množiny hodnot s hodnotou výrazu v klauzuli WHERE

STRUKTUROVANÉ DOTAZY uvozené operátory : <, >, =, < >, < =, > = ALL výběrová podmínka vnějšího příkazu bude pravdivá, pokud je výsledek srovnání pravdivý pro všechny hodnoty vrácené vnořeným subdotazem. 4 > ALL (1, 2,3 )...pravda 2 > ALL (1,2,3 )...nepravda

STRUKTUROVANÉ DOTAZY uvozené operátory : <, >, =, < >, < =, > = ANY, SOME SOME je pouze ekvivalentem ANY (zavedení SOME vychází ze standardu ANSI / ISO SQL) výběrová podmínka vnějšího příkazu bude pravdivá, pokud je výsledek srovnání pravdivý pro alespoň pro jednu z hodnot vrácených vnořeným subdotazem 4 > ANY (1, 2, 3 )...pravda 2 > ANY (1,2,3 )...pravda

STRUKTUROVANÉ DOTAZY subdotazy uvozené [ NOT ] EXISTS WHERE [ NOT ] EXISTS ( SELECT příkaz) výsledkem subdotazu existence či neexistence hodnot u EXISTS podmínka pravdivá - je-li výsledkem subdotazu alespoň 1 řádek př.: SELECT jmeno-zak, kontakt FROM zakaznik WHERE EXISTS(SELECT * FROM objednavky WHERE objednavky.c-zak = zakaznik.c-zak )

SQL - strukturovaný dotazovací jazyk DML - operace INTERSECTION UNION EXCEPT DML - dynamické a statické relace DCL ochrana před neautorizovaným přístupem (GRANT, REVOKE) SQL a tvorba aplikací

Union, Intersect, and Difference (Except) 114

SQL - DML ke zpracování dotazů z více relací operace spojení JOIN strukturované příkazy množinové operace - od verze SQL2» sjednocení ( UNION)» průnik ( INTERSECT)» rozdíl ( EXCEPT )» tyto operace nejsou součástí všech implementací» použití spolu s příkazem SELECT» Za oběma klauzulemi SELECT musí být navzájem kompatibilní atributy

SQL -DML operace UNION SELECT. UNION SELECT.. př. SELECT c-pol, nazev, cena-j FROM katalog UNION SELECT c-pol, nazev, cena-j FROM novy-katalog

SQL -DML operace INTERSECT SELECT. INTERSECT SELECT.. př. SELECT c-pol, nazev, cena-j FROM katalog INTERSECT SELECT c-pol, nazev, cena-j FROM novy-katalog

SQL -DML operace INTERSECT pokud není operátor INTERSECT řešení pomocí struktur. dotazu: př. SELECT c-pol, nazev, cena-j FROM katalog WHERE EXISTS ( SELECT * FROM novy-katalog WHERE katalog.c-pol = novy-katalog.c-pol ) SELECT k.c-pol, k.nazev, k.cena-j FROM katalog k, novy-katalog n WHERE k.c-pol = n.c-pol

SQL -DML operace EXCEPT SELECT. EXCEPT SELECT.. př. SELECT c-pol, nazev, cena-j FROM katalog EXCEPT SELECT c-pol, nazev, cena-j FROM novy-katalog

SQL -DML operace EXCEPT pokud není operátor EXCEPT řešení pomocí struktur. dotazu: př. SELECT c-pol, nazev, cena-j FROM katalog WHERE NOT EXISTS ( SELECT * FROM novy-katalog WHERE katalog.c-pol = novy-katalog.c-pol )

SQL A RELACE relace definované CREATE TABLE jsou považovány za základní, fyzické relace( base tables). odvozené relace dynamické odvozené relace = view statické odvozené relace = snap-shots

DATA DEFINITION LANGUAGE

DATA DEFINITION LANGUAGE - DDL vytváření databáze a relační struktury vytváření, rušení a aktualizace relací (tabulek) vytváření a rušení indexů vytváření a rušení pohledů - (ne alter) Integritní omezení a DDL (create domain, check, Primary key ) Datové typy podporované SQL-92.

DDL vytvoření struktury databaze CREATE DATABASE či CREATE SCHEMA, DROP DATABASE vytvoření struktury databáze CREATE TABLE, CREATE VIEW předefinování a rušení databáze ALTER TABLE, DROP TABLE, DROP VIEW indexace - od SQL89 CREATE INDEX, DROP INDEX

DDL - CREATE CREATE TABLE jmeno-relace ({ nazev-atributu datovy-typ [NOT NULL [UNIQUE]] [ DEFAULT hodnota ] [ [NOT] CASE-SENSITIVE] [ FORMAT řetězec ] [ LABEL řetězec ] [ COLUMN-LABEL řetězec ]} [,...] [, { UNIQUE ( {nazev-atributu } [,...] }] )

CREATE TABLE CREATE TABLE název ( jméno atr. datový typ [CONSTRAINT název] {[NULL NOT NULL] [PRIMARY KEY UNIQUE} [FOREIGN KEY] REFERENCES jm tab. (jméno sloupce) ON DELETE CASCADE. [, ] [,[CONSTRAINT název] PRIMARY KEY (výčet jmen atributů odděl. čárkou)..,] [,[CONSTRAINT název] FOREIGN KEY.] [, [CONSTRAINT název] CHECK ) OMEZENÍ SLOUPCE OMEZENÍ TABULKY

datový typ CHARACTER, NUMERIC DECIMAL - pro numerické s des. mistem INTEGER, SMALLINT - celáčísla FLOAT, REAL, DOUBLE PRECISION od SQL 92 - DATE, TIME, YEAR, MONTH, DAY, HOUR, SECOND LOGICAL

Ochrana integrity databáze Integritní omezení (integrity constraints, integrity rules) Specifikace IO musí být podle teorie relačního modelu součástí definice databáze, uloženy v DD (Data Dictionary = slovníku dat =katalogu dat) Integritu rozlišujeme : - doménovou (domain integrity) - Entitní integrita (entity integrity) - Referenční ( referential integrity )

Ochrana integrity databáze doménová integrita (domain integrity) - každá hodnota musí být z hodnot pro atribut přípustných - DBS by měl poskytovat prostředky pro definici omezení v Data Dictionary, - v okamžiku definice relace - třeba zabudovat Entitní integrita (entity integrity) - požadavek na zajištění identifikace každého prvku relace (řádek = konkrétní výskyt entity či vztahu) = PK

DDL doménová integrita Pomocí klauzule CHECK CREATE TABLE jm (... Mesto CHAR(15) CHECK mesto IN ( Praha, Liberec ), c-pol INTEGER CHECK c-pol > 5 AND c-pol <11)

DDL doménová integrita Pomocí CREATE DOMAIN (od SQL2) CREATE DOMAIN pocet INTEGER CHECK VALUE >0 AND VALUE < = 5 CREATE TABLE katalog (..., qty pocet,...

DDL entitní integrita PRIMARY KEY(od SQL89) CREATE TABLE katalog (..., c-pol INTEGER PRIMARY KEY,... Pozn. pokud není tato klauzule - pak: klíčové atributy musí být definovány pomocí NOT NULL UNIQUE

Ochrana integrity databáze Referenční ( referential integrity ) - řeší logické vztahy mezi více relacemi - logická konzistence obsahu databáze - pomocí FK - řešení logické integrity databáze - 1. Restriktivnířešení - 2. kaskádovitéřešení - 3. Nullifyřešení

1. Restriktivnířešení - není dovoleno zrušit řádek, pokud existují v jiných relacích řádky logicky související - hodnotu PK nadřízené tabulky -není možné aktualizovat - do podřízené relace nelze uložit řádek, u něhož hodnota FK neodpovídářádku v nadřízene tabulce

2. kaskádovitéřešení - v případě rušenířádku v nadřazené tabulce -ruší se řádky v podřízené relaci se stejnou hodnotou FK - hodnotu PK možné aktualizovat - ale aktualizují se i FK v souvisejících řádcích - v případě ukládánířádku, u něhož hodnota FK neodpovídářádku v nadřízené tabulce - se doplní řádek v nadřízené tabulce

3. Nullify řešení - při rušenířádků dochází ke změně hodnot všech souvisejících klíčů na neurčené - tedy NULL hodnoty - v případě ukládánířádku, u něhož hodnota FK neodpovídářádku v nadřízené tabulce - se naplní FK hodnotou neurčenou

DDL referenční integrita klauzule REFERENCES (od SQL89)..restriktivnířešení ON DELETE CASCADE, ON UPDATE CASCADE ON DELETE SET NULL, ON UPDATE SET NULL ( od SQL2 ) implementace výjimečně

DDL referenční integrita CREATE TABLE zakaznici ( c-zak INTEGER PRIMARY KEY,......) CREATE TABLE objednavky (... c-zak INTEGER REFERENCES zakaznici(czak) CREATE TABLE objednavky (... c-zak INTEGER REFERENCES zakaznici(czak) ON DELETE CASCADE

DDL pokud SQL jediný jazyk pro práci s daty (ORACLE, SYBASE) - pak i jinářešení - např. triggery CREATE TRIGGER jmeno-trig ON nazev relace FOR {INSERT DELETE UPDATE[výčet atributů]} [,...] AS výčet SQL příkazů

DDL - ALTER TABLE ALTER TABLE jmeno-relace {ADD COLUMN nazev-atributu datovy-typ [NOT NULL [UNIQUE]] [ DEFAULT hodnota ] [ [NOT] CASE-SENSITIVE] [ FORMAT řetězec ] DROP COLUMN nazev-atributu ALTER COLUMN nazev-atributu [ DEFAULT hodnota ] [ {NOT] CASE-SENSITIVE] [ FORMAT řetězec ] [ LABEL řetězec ] [ COLUMN-LABEL řetězec ] }

DDL - ALTER TABLE ADD část má-li již relace záznamy DROP část» neurčená hodnota, či hodnota DEFAULT» není -li DEFAULT, pak nelze NOT NULL» nelze UNIQUE zruší atribut včetně hodnot pokud se na něj odkazuje některá z odvozených relací - pak chybové hlášení ALTER část DEFAULT- vliv až na dodatečně vkládanéřádky nelze NOT NULL a UNIQUE

DDL - DROP TABLE DROP TABLE nazev relace ruší definici relace včetně obsahu Po zrušení relace budou nepřístupné všechny odvozené relace definované nad zrušenou relací změna definice relace i její zrušení vede k aktualizaci v systémových relacích

DDL - indexy ovlivňuje rychlost práce s daty při aktualizaci dat - doba odezvy (souvisí s počtem řádků relace)

DDL - indexy z hlediska potřebnosti: pro klíčové atributy atributy, které jsou při výstupu dat používány jako třídící kriterium atributy vystupující při join operacích jako spojovací atributy s vysokou frekvencí přístupu atributy, které jsou častým předmětem dotazů na četnost

DDL - indexy indexy - jednoduché, skupinové, unikátní CREATE [ UNIQUE] INDEX nazev-indexu ON nazev-relace ( {nazev-atr} [,...]) DROP INDEX nazev-indexu

SQL a relace ZÁKLADNÍ (BÁZICKÉ) STATICKÉ DYNAMICKÉ

DYNAMICKÉ A STATICKÉ ODVOZENÉ RELACE DYNAMICKÉ ODVOZENÉ RELACE = VIEW fyzicky neexistují s každou aktualizací obsahu výchozích relací se mění i hodnoty relací odvozených smyslem zjednodušení práce s daty, zajištění nezávislosti na logické struktuře databáze STATICKÉ ODVOZENÉ RELACE = SNAP- SHOTS fyzicky existují

SQL DYNAMICKÉ ODVOZENÉ RELACE (virtuální relace, pohledy, viewed tables) Představuji jiný pohled na uložená data, vytvořeny z jednéči více základních relací z hlediska relační algebry: projekce, restrikce (selekce), join mohou být vytvořeny i z jiných VIEW nejsou naplněny daty (fyzicky neexistují), jsou uloženy pouze ve formě definice v DATA DICTIONARY Nad odvozenou relací nelze vytvářet indexy definici nelze modifikovat ( ALTER )

SQL ODVOZENÉ RELACE - DDL VYTVOŘENÍ ODVOZENÉ RELACE CREATE VIEW název odvozené relace [ (názvy atributů odvozené relace) ] AS vnořený příkaz SELECT [ WITH CHECK OPTION ] kde: WITH CHECK OPTION verifikuje případné aktualizace obsahu prostřednictvím odvozené relace (v některých implementacích chybí ) RUŠENÍ ODVOZENÉ RELACE DROP VIEW název odvozené relace

SQL ODVOZENÉ RELACE použití SELECTu celý vyjma ORDER BY v klauzuli SELECT - atributy relace, aritmetické výrazy, agregační funkce názvy atributů odvozené relace se uvedou, pokud nebudou totožné s názvy uvedenými za klauzulí SELECT Pokud bude daný pohled výchozí pro jiná VIEW nesmíme daný pohled rušit (abychom se nepřipravili o přístup k odvozeným relacím vyšší úrovně) - nemusí být vždy ochrana proti zrušení

SQL - ODVOZENÉ RELACE práce s odvozenými relacemi výběr dat z odvozených relací obdoba práce s relacemi základními aktualizace dat - INSERT, UPDATE, DELETE přípustná pouze v některých implementacích jazyka za splnění určitých podmínek (mohou se lišit) aktualizací pohledu - dochází k aktualizaci původních relací

SQL ODVOZENÉ RELACE aktualizace dat Standard SQL pro aktualizaci: SELECT ve VIEW nesmí obsahovat GROUP BY, HAVING v klauzuli SELECT nesmí být DISTINCT, agregační funkce, aritmetický výraz klauzule FROM nesmí obsahovat více jak jednu výchozí relaci (pokud touto relací je VIEW, musí být opět aktualizovatelné) za WHERE klauzulí nesmí být vnořený SELECT

SQL ODVOZENÉ RELACE Př. CREATE VIEW obj-kat AS SELECT katalog.c-pol, katalog.jmeno, c-obj, qty FROM katalog, r-obj WHERE katalog.c-pol = r-obj.c-pol SELECT * FROM obj-kat WHERE katalog.jmeno = bunda ADIDAS.

STATICKÉ ODVOZENÉ RELACE = SNAP-SHOTS pouze v některých implementacích SQL v databázi fyzicky existují jsou naplněny vybranými daty jsou vždy aktualizovatelné, jsou na výchozích relacích nezávislé ( jejich obsah se při aktualizaci výchozích relací nemění) vytvoří se příkazem SELECT klauzuli INTO

statické odvozené relace = snap-shots SELECT výčet atributů INTO název odvozené relace FROM název relací [WHERE výběrové podmínky ] struktura relace dána klauzulí SELECT, jednotlivé prvky výsledné relace vyhovují podmínkám za WHERE. Podle standardu SQL není možné uvést GROUP BY a HAVING některé implementace tato omezení nemají (SYBASE )

statické odvozené relace = snap-shots v momentě svého vytvoření je jejich obsah totožný s obsahem relací, z nichž je tato relace odvozena vypovídají o stavu databáze v daném okamžiku mohou sloužit jako časový snímek obsahu databáze použití pro testování, zálohování k definici relace s obdobnou strukturou pokud za WHERE dám podmínky, které nevyberou ani jeden řádek (např. 1 = 3 ) pokud příkaz neobsahuje klauzuli INTO - lze obejít» pomocí CREATE TABLE a INSERT s vnořeným SELECT příkazem

statické odvozené relace = snap-shots Př. SELECT katalog.c-pol, katalog.jmeno, c-obj, qty INTO obj-kat FROM katalog, r-obj WHERE katalog.c-pol = r-obj.c-pol

Data Control Language

Přístupová privilegia příkazy GRANT a REVOKE vlastník relace - považován její tvůrce- t.j. uživatelské jméno, pod kterým byla relace definována GRANT k přidělení přístupových privilegií REVOKE k odebrání přístupových privilegií

GRANT GRANT {ALL [PRIVILEGES] {SELECT INSERT DELETE UPDATE [(výčet atributů)]} [,...]} ON název relace TO { seznam uživatelů PUBLIC} [ WITH GRANT OPTION ]

REVOKE REVOKE {ALL [PRIVILEGES ] {SELECT INSERT DELETE UPDATE [(výčet atributů)]} [,...]} ON název relace FROM { seznam uživatelů PUBLIC}

GRANT, REVOKE Příkazy se vztahují pouze k jedné relaci (klauzule ON) lze přiřadit, či odvolat najednou všechna privilegia - ALL nebo explicitně vyjmenovaná pro UPDATE lze udělit privilegia až na hodnotu atributu PUBLIC - v GRANT přiděluje privilegia všem současným i budoucím uživatelům PUBLIC v REVOKE - odjímá privilegia udělená pomocí PUBLIC

GRANT, REVOKE WITH GRANT OPTION u příkazu GRANT povoluje uživatelům převádět příslušná privilegia (i část) na další uživatele může odejímat privilegia těm uživatelům, kterým je sám přidělil pokud jsou odejmuta privilegia uživateli s oprávněním GRANT OPTION - jsou odejmuta automaticky i těm, kterým je přidělil Vlastníkovi relace nelze přístupová privilegia odejmout

GRANT, REVOKE Privilegia lze udělovat i odebírat i odvozeným relacím při užití příkazů GRANT, REVOKE se účinky kumulují Př. GRANT INSERT, UPDATE ON zakaznik TO referent GRANT SELECT ON zakaznik TO referent REVOKE UPDATE ON zakaznik TO referent uživatel referent má možnosti INSERT, UPDATE a SELECT v relaci zakaznik uživatel referent má možnosti INSERT a SELECT v relaci zakaznik

SQL a tvorba aplikací SQL - pracuje s celou množinou řádků relací Χ 4GL (příkazy hostitelských jazyků pracují s jedním řádkem relace pomocí principu cursoru kurzor určuje běžný řádek záznamy jsou zpřístupňovány hostitelským jazykům postupně

SQL a tvorba aplikací DECLARE CURSOR, FETCH, OPEN, CLOSE DECLARE název-kurzoru CURSOR FOR příkaz SELECT definuje kurzor OPEN název-kurzoru nastavuje ukazovátko před první z množiny vybraných řádků FETCH název-kurzoru INTO {nazev parametru nazev-promenne}[,...]} zpřístupněnířádků dané množiny, příkaz vždy přesune ukazovátko na další řádek hodnotami řádku naplní předem definované proměnné.. (klauzule INTO) CLOSE název-kurzoru ukončení práce kurzoru