sql - multiedu.tul.czmultiedu.tul.cz/.../databazove_systemy/sql_do_pdf.pdf · vladimíra zádová,...
Post on 12-Feb-2018
230 Views
Preview:
TRANSCRIPT
SQL
strukturovaný dotazovací jazyk
Structured Query Language (SQL)
Vladimíra Zádová, KIN, EF TUL - DBS
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
Vladimíra Zádová, KIN, EF TUL - DBS
SQL - normy
� SQL 86 - DDL, DML, DCL1986 - 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
Vladimíra Zádová, KIN, EF TUL - DBS
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ě
Vladimíra Zádová, KIN, EF TUL - DBS
SQL
je neprocedurální jazyk
specifikuje CO požadujeme nikolijak toho dosáhneme.
– DATA DEFINITION LANGUAGE - DDL
– DATA MANIPULATION LANGUAGE - DML
– DATA CONTROL LANGUAGE - DCL
Vladimíra Zádová, KIN, EF TUL - DBS
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
Vladimíra Zádová, KIN, EF TUL - DBS
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
Vladimíra Zádová, KIN, EF TUL - DBS
DATA CONTROL LANGUAGE - DCL
� příkazy GRANT, REVOKE
Přikazy pro tvorbu aplikací
pro spolupráci SQL s hostitelským jazykem
-- příkazy DECLARE CURSOROPEN CURSOR - před 1. z množiny
FETCH CURSOR - přesun o 1CLOSE CURSOR
� příkazy pro uživatelskou transakci -ROLLBACK, COMMIT
Vladimíra Zádová, KIN, EF TUL - DBS 14
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ů
Vladimíra Zádová, KIN, EF TUL - DBS 15
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
Vladimíra Zádová, KIN, EF TUL - DBS
DATA MANIPULATION LANGUAGE
Vladimíra Zádová, KIN, EF TUL - DBS 128
INSERT - vstup dat
INSERT INTO název relace [(výčet atributů)] { VALUES ( výčet hodnot atributů)| SELECT-příkaz}
kde:
VALUES -pro vstupprá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.
Vladimíra Zádová, KIN, EF TUL - DBS
� 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
Vladimíra Zádová, KIN, EF TUL - DBS
�
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.
Vladimíra Zádová, KIN, EF TUL - DBS
INSERTPř.
� 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.
Vladimíra Zádová, KIN, EF TUL - DBS
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
Vladimíra Zádová, KIN, EF TUL - DBS
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íncepokud není uvedeno WHERE -aktualizuje dané atributy ve
všech řádcích
SystSystéém odmm odmíítne aktualizaci, pokud novtne aktualizaci, pokud novááhodnota nebude respektovat nhodnota nebude respektovat něěkterkter áá z z defdef. . omezenomezeníí atributuatributu
Vladimíra Zádová, KIN, EF TUL - DBS
UPDATEPř.
� UPDATE zakaznik
SET zeme = zeme + "/EU”
� UPDATE radek-obj
SET qty = gty + qty/12,
cena = cena * 2
WHERE c-pol = 125.
Vladimíra Zádová, KIN, EF TUL - DBS
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
Vladimíra Zádová, KIN, EF TUL - DBS 3
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é
Vladimíra Zádová, KIN, EF TUL - DBS 17
SELECT příkaz
SELECT klauzule
FROM klauzule
[WHERE klauzule ]
[GROUP BY klauzule]
[HAVING klauzule ]
[ORDER BY klauzule]
Vladimíra Zádová, KIN, EF TUL - DBS
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ě)
Vladimíra Zádová, KIN, EF TUL - DBS 19
SELECT příkaz
� Pořadí klauzulí nemůže být měněno.
� Postup při vyhodnocování : FROM WHEREGROUP BY HAVINGORDER BY
Vladimíra Zádová, KIN, EF TUL - DBS
SELECT příkazSELECT - 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í)
Vladimíra Zádová, KIN, EF TUL - DBS
SELECT klauzule SELECT
ALL|DISTINCTALL|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í
Vladimíra Zádová, KIN, EF TUL - DBS
SELECT příkazSELECT
� 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
Vladimíra Zádová, KIN, EF TUL - DBS
SELECT příkazSELECT
.. {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
Vladimíra Zádová, KIN, EF TUL - DBS
SELECT příkazWHERE
� 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
Vladimíra Zádová, KIN, EF TUL - DBS
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 příkazWHERE
Vladimíra Zádová, KIN, EF TUL - DBS
SELECT -WHEREBETWEEN /NOT BETWEEN
pro spojitý interval , výraz1 -dolní, výraz2 - horní hraniceintervalu,
- 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
Vladimíra Zádová, KIN, EF TUL - DBS
SELECT -WHEREIN /NOT IN
• pro nespojitnespojit éé hodnoty• zjednodušuje zápis výběrových podmínek (OR)• výběr ze seznamuhodnot ,
• 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 ......
Vladimíra Zádová, KIN, EF TUL - DBS
� pouze pro atributatribut relacerelace
WHERE jméno atributu IS [ NOT] NULLPř.: 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é hodnotě), NULL hodnoty si
nemohou být rovny navzájem
ale při potlačení 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
NULL / NOT NULL
Vladimíra Zádová, KIN, EF TUL - DBS
SELECT -WHERELIKE /NOT LIKE
� porovnává se vzorovou hodnotou� lze jím testovat jen atributyjen 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%
Vladimíra Zádová, KIN, EF TUL - DBS
SELECT *FROM zakaznikWHERE mesto LIKE '% dec%';
Vladimíra Zádová, KIN, EF TUL - DBS
� 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ě
SELECT
ORDER BY klauzule
Vladimíra Zádová, KIN, EF TUL - DBS
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.
Vladimíra Zádová, KIN, EF TUL - DBS
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
Vladimíra Zádová, KIN, EF TUL - DBS
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
Vladimíra Zádová, KIN, EF TUL - DBS 17
SELECT příkaz a agregace
SELECT klauzule
FROM klauzule
[WHERE klauzule ]
[GROUP BY klauzule]
[HAVING klauzule ]
[ORDER BY klauzule]
Vladimíra Zádová, KIN, EF TUL - DBS
SELECT příkazAGREGAČ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
Vladimíra Zádová, KIN, EF TUL - DBS
SELECT příkazAGREGAČ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
Vladimíra Zádová, KIN, EF TUL - DBS
SELECT příkazAGREGAČ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.
Vladimíra Zádová, KIN, EF TUL - DBS
SELECT příkazAGREGAČNÍ FUNKCE
� Specifikace agregačního klíče
– v klauzuli GROUP BY
– jednoduchý klí č ( 1 atribut), složený klí č(více atributový)
Vladimíra Zádová, KIN, EF TUL - DBS
SELECT příkazAGREGAČNÍ FUNKCE
� DISTINCT– u agregační funkce potlačuje duplicitní hodnoty
argumentu funkcepři výběru dat z databázepř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.
Vladimíra Zádová, KIN, EF TUL - DBS
SELECT příkazAGREGAČNÍ FUNKCE - SUM
SUM ( [ DISTINCT ] argument)
- vrací součet hodnot argumentu
- argument:
- numerický atribut
- aritmetický výraz vracející numerickouhodnotu
Vladimíra Zádová, KIN, EF TUL - DBS
SELECT příkazAGREGAČ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í numerickouhodnotu
Vladimíra Zádová, KIN, EF TUL - DBS
SELECT příkazAGREGAČ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
Vladimíra Zádová, KIN, EF TUL - DBS
SELECT příkazAGREGAČ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).
Vladimíra Zádová, KIN, EF TUL - DBS
SELECT příkazAGREGAČ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é.
Vladimíra Zádová, KIN, EF TUL - DBS
SELECT příkazAGREGAČ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á
Vladimíra Zádová, KIN, EF TUL - DBS
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 nepToto je nepřříípustnpustnéé.
Vladimíra Zádová, KIN, EF TUL - DBS 61
SELECT příkazGROUP BY, HAVING
� HAVING - pouze užití s klauzulí GROUP BY
– omezuje výstup agregovaných skupinagregovaný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
Druhy spojení
Vladimíra Zádová, KIN, EF TUL - DBS
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 vvššeobecneobecnéém m joinujoinu
� Nejčastější spojenídle shody hodnot atributů – tzv. ekvivalentnekvivalentníí joinjoin
� explicitně spojenív SQL neexistuje, vyjadřuje se pomocíSELECT příkazu:
– ve FROMFROM - uvedením spojovaných relací
– za WHEREWHERE uvedením podmínky spojení– ale jen vnitřníspojení
– (atributy relací musí být kompatibilní)
Vladimíra Zádová, KIN, EF TUL - DBS
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ů)
Vladimíra Zádová, KIN, EF TUL - DBS
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í):
Vladimíra Zádová, KIN, EF TUL - DBS
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- vyhodnocovvyhodnocov áánníí spojenspojen íí se se
provprov ááddíí zleva dopravazleva doprava– pokud za FROM bude uvedeno více tabulek bez podmínek spojení
- pak výstup odpovídá kartézskému součinu
Vladimíra Zádová, KIN, EF TUL - DBS
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
Vladimíra Zádová, KIN, EF TUL - DBS
SPOJENÍ (join ) vnější – outer join
� u vnějšího spojeníje důležité, zda se jedná o levlevéé či pravpravéé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.
Vladimíra Zádová, KIN, EF TUL - DBS
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í
Vladimíra Zádová, KIN, EF TUL - DBS
SPOJENÍ (join )
SELECT klauzuleFROM { jméno relace [correlation-name] |
implicit-join |explicit-join }
[WHERE klauzule][GROUP BY atribut [,atribut2]...] [HAVING klauzule] [ORDER BY klauzule]
Vladimíra Zádová, KIN, EF TUL - DBS
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)
Vladimíra Zádová, KIN, EF TUL - DBS
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
Vladimíra Zádová, KIN, EF TUL - DBS
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
Vladimíra Zádová, KIN, EF TUL - DBS
STRUKTUROVANÉ DOTAZY
� Subdotaz ( = vnitřní dotaz, vnitřní příkaz )– je příkazSELECT 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
Vladimíra Zádová, KIN, EF TUL - DBS
STRUKTUROVANÉ DOTAZYvzájemné vztahy vnějších a vnitřních dotazů
� jednoduché» vyhodnocování dotazů zevnitř ven:
�vnitřní příkazje vyhodnocen jako první, nezávisle na vnějším příkazu
�vnější příkaznásledně využívá výsledků vnořeného dotazu
� souvztažné» 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áchdodávaných do subdotazu vnějším dotazem
Vladimíra Zádová, KIN, EF TUL - DBS
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 sALL , ANY nebo SOME
– vracející maximálně jednu hodnotu -uvozené relačním operátorem bezmodifikace
– subdotazy fungující jako test existence -uvozené klíčovým slovem EXISTS
Vladimíra Zádová, KIN, EF TUL - DBS
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] )
Vladimíra Zádová, KIN, EF TUL - DBS
STRUKTUROVANÉ DOTAZY omezení pro subdotazy
� vnořený SELECT je uzavřený v ( )
� v klauzuli WHERE vnějšího příkazu musí platitkompatibilitakompatibilitamezi hodnotou výrazua hodnotou vrácenou subdotazem
� klauzuleSELECT 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
Vladimíra Zádová, KIN, EF TUL - DBS
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:
��poupoužžitit íí IN 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
� poupoužžitit íí NOT INNOT IN - pravdivá, pokud nebude rovna žádné z vrácené množiny hodnot
Vladimíra Zádová, KIN, EF TUL - DBS
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
–– poupoužžitit íí v dotazech, kdys 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
Vladimíra Zádová, KIN, EF TUL - DBS
STRUKTUROVANÉ DOTAZYuvozené operátory : <, >, =, < >, < =, > =
� ALL
výběrová podmínkavnějšího příkazu bude pravdivá, pokud je výsledek srovnání pravdivý pro všechnyhodnotyvrácené vnořeným subdotazem.
4 > ALL (1, 2,3 ) .....pravda
2 > ALL (1,2,3 ) .....nepravda
Vladimíra Zádová, KIN, EF TUL - DBS
STRUKTUROVANÉ DOTAZYuvozené operátory : <, >, =, < >, < =, > =
� ANY, SOME– SOME je pouze ekvivalentem ANY
(zavedení SOME vychází ze standardu ANSI / ISO SQL)
– výběrová podmínkavnějšího příkazu bude pravdivá, pokud je výsledek srovnánípravdivý pro alespoň pro jednuz hodnotvrácených vnořeným subdotazem
4 > ANY (1, 2, 3 ) .....pravda2 > ANY (1,2,3 ) .....pravda
Vladimíra Zádová, KIN, EF TUL - DBS
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 subdotazualespoň 1 řádek
př.: SELECT jmeno-zak, kontakt
FROM zakaznik
WHERE EXISTS(SELECT *
FROM objednavky
WHERE objednavky.c-zak = zakaznik.c-zak )
Vladimíra Zádová, KIN, EF TUL - DBS
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í
Vladimíra Zádová, KIN, EF TUL - DBS 114
Union, Intersect, and Difference (Except)
Vladimíra Zádová, KIN, EF TUL - DBS
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
Vladimíra Zádová, KIN, EF TUL - DBS
SQL -DMLoperace UNION
SELECT…….UNION
SELECT…..� př.SELECT c-pol, nazev, cena-j
FROM katalog
UNION
SELECT c-pol, nazev, cena-j
FROM novy-katalog
Vladimíra Zádová, KIN, EF TUL - DBS
SQL -DMLoperace INTERSECT
SELECT…….INTERSECT
SELECT…..� př.SELECT c-pol, nazev, cena-j
FROM katalog
INTERSECT
SELECT c-pol, nazev, cena-j
FROM novy-katalog
Vladimíra Zádová, KIN, EF TUL - DBS
SQL -DMLoperace INTERSECT
� pokud není operátor INTERSECT– řešení pomocí struktur. dotazu:
�př.SELECT c-pol, nazev, cena-jFROM katalogWHERE EXISTS
( SELECT *FROM novy-katalogWHERE katalog.c-pol = novy-katalog.c-pol)
SELECT k.c-pol, k.nazev, k.cena-jFROM katalog k, novy-katalog nWHERE k.c-pol = n.c-pol
Vladimíra Zádová, KIN, EF TUL - DBS
SQL -DMLoperace EXCEPT
SELECT…….EXCEPT
SELECT…..� př.SELECT c-pol, nazev, cena-j
FROM katalog
EXCEPT
SELECT c-pol, nazev, cena-j
FROM novy-katalog
Vladimíra Zádová, KIN, EF TUL - DBS
SQL -DMLoperace 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-katalogWHERE katalog.c-pol = novy-katalog.c-pol )
Vladimíra Zádová, KIN, EF TUL - DBS
SQL A RELACE
� relace definované CREATE TABLE
– jsou považovány za základní, fyzické relace( basetables).
� odvozené relace
– dynamické odvozené relace = view– statické odvozené relace = snap-shots
Vladimíra Zádová, KIN, EF TUL - DBS
DATA DEFINITION LANGUAGE
Vladimíra Zádová, KIN, EF TUL - DBS
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.
Vladimíra Zádová, KIN, EF TUL - DBS
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
Vladimíra Zádová, KIN, EF TUL - DBS
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 } [,...] }] )
Vladimíra Zádová, KIN, EF TUL - DBS
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
Vladimíra Zádová, KIN, EF TUL - DBS
� datový typ
– CHARACTERCHARACTER,
– NUMERIC
– DECIMALDECIMAL - pro numerické s des. mistem
–– INTEGERINTEGER, SMALLINT - celá čísla
– FLOAT, REAL, DOUBLE PRECISIONod SQL 92 -DATEDATE, TIME, YEAR,
MONTH, DAY, HOUR, SECONDLOGICALLOGICAL
Vladimíra Zádová, KIN, EF TUL - DBS
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 )
Vladimíra Zádová, KIN, EF TUL - DBS
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
Vladimíra Zádová, KIN, EF TUL - DBS
DDL doménová integrita
� Pomocí klauzule CHECK
CREATE TABLE jm
(....
Mesto CHAR(15) CHECK CHECK mesto IN („Praha“ ,„Liberec“),
c-pol INTEGER CHECK c-pol > 5 AND c-pol <11)
Vladimíra Zádová, KIN, EF TUL - DBS
DDL doménová integrita
� PomocíCREATE DOMAIN (od SQL2)
CREATE DOMAIN pocetpocetINTEGER CHECK VALUE >0 AND VALUE < = 5
CREATE TABLE katalog
( ......,
qty pocetpocet,......
Vladimíra Zádová, KIN, EF TUL - DBS
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 NULLUNIQUE
Vladimíra Zádová, KIN, EF TUL - DBS
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í
Vladimíra Zádová, KIN, EF TUL - DBS
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řízenetabulce
Vladimíra Zádová, KIN, EF TUL - DBS
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
Vladimíra Zádová, KIN, EF TUL - DBS
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
Vladimíra Zádová, KIN, EF TUL - DBS
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ě
Vladimíra Zádová, KIN, EF TUL - DBS
DDL referenční integrita
CREATE TABLE zakaznici
( c-zak INTEGER PRIMARY KEY,....
......)
CREATE TABLE objednavky
(... c-zak INTEGER REFERENCES zakaznici(c-zak)
CREATE TABLE objednavky
(... c-zak INTEGER REFERENCES zakaznici(c-zak) ON DELETE CASCADE
Vladimíra Zádová, KIN, EF TUL - DBS
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ýčetatributů]} [,...]
AS výčet SQL příkazů
Vladimíra Zádová, KIN, EF TUL - DBS
DDL - ALTER TABLE
ALTER TABLE jmeno-relace{ADD COLUMNADD COLUMN nazev-atributu datovy-typ
[NOT NULL [UNIQUE]] [ DEFAULT hodnota ][ [NOT] CASE-SENSITIVE][ FORMAT řetězec ]
| DROP COLUMNDROP COLUMN nazev-atributu| ALTER COLUMNALTER COLUMN nazev-atributu
[ DEFAULT hodnota ][ {NOT] CASE-SENSITIVE][ FORMAT řetězec ][ LABEL řetězec ] [ COLUMN-LABEL řetězec ] }
Vladimíra Zádová, KIN, EF TUL - DBS
DDL - ALTER TABLE
� ADD část
– má-li již relace záznamy» neurčená hodnota, či hodnota DEFAULT » není -li DEFAULT, pak nelze NOT NULL» nelze UNIQUE
� DROP část� 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
Vladimíra Zádová, KIN, EF TUL - DBS
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
Vladimíra Zádová, KIN, EF TUL - DBS
DDL - indexy
� ovlivňuje rychlost práce s daty� při aktualizaci dat - doba odezvy (souvisí s
počtem řádků relace)
Vladimíra Zádová, KIN, EF TUL - DBS
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
Vladimíra Zádová, KIN, EF TUL - DBS
DDL - indexy
� indexy - jednoduché, skupinové, unikátní
CREATE [ UNIQUE] INDEX nazev-indexu
ON nazev-relace ( {nazev-atr} [,...])
DROP INDEX nazev-indexu
ZÁKLADNÍ (BÁZICKÉ)STATICKÉDYNAMICKÉ
SQL a relace
Vladimíra Zádová, KIN, EF TUL - DBS
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í
Vladimíra Zádová, KIN, EF TUL - DBS
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 )
Vladimíra Zádová, KIN, EF TUL - DBS
SQL ODVOZENÉ RELACE - DDL
� VYTVO ŘENÍ ODVOZENÉ RELACECREATE 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ímodvozené relace(v některých implementacích chybí )
� RUŠENÍ ODVOZENÉ RELACE DROP VIEW název odvozené relace
Vladimíra Zádová, KIN, EF TUL - DBS
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 nebudoutotož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í
Vladimíra Zádová, KIN, EF TUL - DBS
SQL - ODVOZENÉ RELACEprá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íchjazyka
– za splnění určitých podmínek (mohou se lišit)
– aktualizací pohledu - dochází k aktualizacipůvodních relací
Vladimíra Zádová, KIN, EF TUL - DBS
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 jednuvýchozí relaci (pokud touto relací je VIEW, musí býtopět aktualizovatelné)
– za WHERE klauzulí nesmí být vnořený SELECT
Vladimíra Zádová, KIN, EF TUL - DBS
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”.
Vladimíra Zádová, KIN, EF TUL - DBS
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
Vladimíra Zádová, KIN, EF TUL - DBS
statické odvozené relace= snap-shots
SELECT výčet atributů
INTO název odvozené relaceFROM 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 HAVINGněkteré implementace tato omezení nemají (SYBASE )
Vladimíra Zádová, KIN, EF TUL - DBS
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
Vladimíra Zádová, KIN, EF TUL - DBS
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
Vladimíra Zádová, KIN, EF TUL - DBS
Přístupová privilegiapří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í
Vladimíra Zádová, KIN, EF TUL - DBS
GRANT
GRANT
{ALL [PRIVILEGES] |{SELECT | INSERT | DELETE |
UPDATE [(výčet atributů)]} [, ...]}
ON název relace TO { seznam uživatelů|PUBLIC}
[ WITH GRANT OPTION ]
Vladimíra Zádová, KIN, EF TUL - DBS
REVOKE
REVOKE {ALL [PRIVILEGES ]|
{SELECT | INSERT | DELETE | UPDATE [(výčet atributů)]}
[ ,...]}ON název relace FROM { seznam uživatelů|PUBLIC}
Vladimíra Zádová, KIN, EF TUL - DBS
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 ibudoucbudoucíím m uživatelům
� PUBLIC v REVOKE - odjímá privilegia udělená pomocíPUBLIC
Vladimíra Zádová, KIN, EF TUL - DBS
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
Vladimíra Zádová, KIN, EF TUL - DBS
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
Vladimíra Zádová, KIN, EF TUL - DBS
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 cursorucursoru
kurzor určuje běžný řádek
záznamy jsou zpřístupňovány hostitelským jazykům postupně
Vladimíra Zádová, KIN, EF TUL - DBS
SQL a tvorba aplikacíDECLARE CURSOR, FETCH, OPEN, CLOSE
DECLARE název-kurzoru CURSOR FOR příkaz SELECTdefinuje kurzor
OPEN název-kurzorunastavuje 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
top related