Vsetky prednasky
komplet
Stiahnuť DOC · 877 kBPreber si túto poznámku so svojou AI
Skopíruj pripravený podklad a vlož ho do ChatGPT, Claude alebo inej AI — bude ťa učiť alebo skúšať len z tejto poznámky.
Náhľad poznámky
Úvod
- dáta
popisujú určitý vymedzený úsek objektívnej reality
sú uložené v súboroch
- súbor
obsahuje všetky vlastnosti všetkých objektov určitého typu
- záznam
nižšia hierarchická štruktúra
obsahuje vlastnosti jediného objektu
skladá sa z položiek
- položka
obsahuje jednu vlastnosť jedného objektu
- základné operácie
vyhľadávanie – výber všetkých záznamov s určitou vlastnosťou
aktualizácia – zmena hodnôt dát
- dáta (údaje)
sú získavané pozorovaním, meraním, atď.
sú to všetky údaje o objektoch
- informácia
je zmysluplná interpretácia dát a vzťahov medzi nimi,
umožňujúca a uľahčujúca rozhodovanie
znižuje entropiu (neurčitosť) systému
Spracovanie dát:
v dávkach
vyžaduje zhromaždiť údaje, vypracovať programy
a spracovať údaje po dávkach (doba odozvy)
dialógovo
riešenie úlohy v reálnom čase
informácie sa získavajú priebežne
súbor
záznam
položka
Klasické spracovanie dát
- typické vlastnosti
závislosť dát na programoch – súbory sú organizované
a štruktúrované podľa potrieb aplikačných programov
závislosť programov na dátach – v každom programe je presne
udané ako majú byť dáta organizované, aké výstupné hodnoty sa
získajú, do akého súboru sa uložia, atď.
- problémy
redundancia dát (viacnásobného sa opakovania toho istého
údaju)
problém konzistencie (vlastnosť, ktorá vyžaduje, aby ten istý
údaj zapisovaný v rôznych súboroch mal tú istú hodnotu (rodné
meno a meno po vydaní sa))
obtiažna dosažiteľnosť požadovaných dát
izolovanosť dát – dáta sú roztrúsené v rôznych súboroch, ktoré
môžu byť rôzne organizované
neumožnený prístup viacerých používateľov
problém zneužitia a ochrany dát
problém integrity dát – ak všetky dáta v rôznych tabuľkách,
programoch, súboroch popisujúce stav reality zodpovedajú
aktuálnemu stavu, hovoríme o integrite dát
Databázové systémy
- vlastnosti
oddelená štruktúra aplikačných programov a súborov dát –
nezávislosť dát na programoch a naopak
prístup k dátam je umožnený len pomocou programov
databázových systémov, v žiadnom prípade nie priamo
poskytnutie informácií včas
možnosť prístupu viacerých používateľov
možnosť ochrany dát proti zneužitiu
minimalizovanie redundancie
- štruktúra databázového systému – DBS
báza dát (BD) - organizovaná množina dát
systém riadenia bázy dát (SRBD) - programový systém pre
manipuláciu s dátami z bázy dát
databázové systémy zahrňujú
prostriedky pre popis dát (DDL – Data Definition
Language) - zadefinovanie štruktúry dát
prostriedky pre popis algoritmu (DML – Data Manipulation
Language) jazyk pre samotné programovanie
niektoré databázové systémy umožňujú popísať otázku
používateľa pomocou tzv. dotazovacieho jazyka (QL –
Query Language)
- používatelia databázových systémov
správca
systémový programátor, ktorý má na starosti celú databázu
popisuje štruktúru dát, vzťahy medzi nimi, pozná všetky
heslá, ktoré môže prideľovať a meniť
aplikačný programátor
profesionálny programátor, ktorý programuje v hostiteľskom
programovom jazyku a ktorý volania databázového systému
dokáže riešiť pomocou DML
príležitostný používateľ
komunikuje s DBS pomocou dotazovacieho jazyka
naivný používateľ
komunikuje s bázou dát obyčajne pomocou jediného
aplikačného programu, ktorý nevytvoril, len ho používa
DBS
U3
U2
U1
používatelia
SRBD
BD
Jazyk SQL
(Structured Query Language)
- vyvinula IBM začiatkom 70-tych rokov
- je to deklaratívny jazyk (popisuje čo urobiť, nie ako)
- je súčasťou veľkých databázových systémov (Informix,
Oracle, DB2, dBASE IV)
- každý príkaz z jazyka SQL končí bodkočiarkou
- pracuje s relačnou databázou.
1 Vytvorenie tabuľky
CREATE TABLE <meno tabuľky>
(<meno stĺpca> <typ>(<dĺžka>)
[,<meno stĺpca> <typ>(<dĺžka>)]…);
- mená objektov databázy (tabuľky, stĺpce, ...) môžu obsahovať
písmená, číslice a podčiarnik; musia začínať písmenom
- dĺžka identifikátorov je maximálne 30 znakov
- výnimkou sú mená tabuliek, ktoré majú max 8 znakov
- ako identifikátor sa nesmú použiť kľúčové slová
- meno tabuľky môže mať kvalifikátor – prefix, nesúci meno
majiteľa objektu , teda <prefix>.<meno tabuľky>
napr. Vesely.Podnik
- možnosti pre <typ>: NUMBER, CHAR, DATE,
WARCHAR2 (má väčšiu dĺžku reťazcov); ORACLE
nepodporuje WARCHAR
- ak žiadame, aby daný stĺpec mal vždy hodnotu, za definíciu
stĺpca vložíme klauzulu NOT NULL
napr.
CREATE TABLE Podnik (Evcis NUMBER (4) NOT NULL,
.......;
- výpis všetkých tabuliek, ktoré sme vytvorili
SELECT table_name FROM tabs;
Vkladanie dát do tabuľky
INSERT INTO <meno tabuľky> VALUES (
<zoznam hodnôt>);
- jednotlivé hodnoty musia byť uvedené v takom poradí ako sú
prvky tabuľky
- pri vkladaní do tabuľky môžeme použiť aj hodnotu NULL,
ktorá predstavuje prázdnu hodnotu
- pomocou príkazu INSERT sa vkladá jeden nový záznam do
tabuľky
- hodnoty typu CHAR sa dávajú do apostrofov
- pri vkladaní dátumu možno ako oddeľovač použiť pomlčku,
lomítko alebo bodku;
mesiac v dátume sa zapisuje prvými tromi písmenami
z anglického názvu mesiaca
rok – posledné dve cifry alebo štyri; celý dátum sa zapisuje
v apostrofoch
Príklad: Vytvorte tabuľku popisujúcu pracovníkov inštitúcie
CREATE TABLE Podnik (
Ev_cislo NUMBER(5) NOT NULL,
Meno CHAR(25),
Mesto CHAR(20),
Ulica CHAR(15),
Narodeny DATE,
Mzda NUMBER(5),
Poc_deti NUMBER(2),
Veduci CHAR(25));
INSERT INTO Podnik
VALUES (3241, ‘Maly Jan’, ‘Kosice’, ‘Ruzova 15’,
’24-oct-1963’, 16200, 3, ‘Horny Ivan’);
2 Manipulácia s tabuľkami
Pre formuláciu otázky v SQL slúži jediný príkaz SELECT, ktorý
je základnou konštrukciou jazyka
2.1 Hľadanie v tabuľkách
SELECT <zoznam stĺpcov v projekcii>/*
FROM <meno tabuľky>
[WHERE <podmienka selekcie>];
* - znamená výpis všetkých stĺpcov tabuľky.
Príklad: Vypíšte všetky mená a mestá z tabuľky Podnik
SELECT Meno, Mesto FROM Podnik;
Príklad: Vypíšte z tabuľky Podnik mená všetky všetkých
košičanov
SELECT Meno FROM Podnik
WHERE Mesto=‘Košice‘;
- systém stĺpcov nie je case sensitive, t.j. mená stĺpcov môžeme
písať akýmikoľvek písmenami
- vo výpise sa mená stĺpcov vždy zobrazia veľkými písmenami
- pri výpise názvu stĺpca SQL používa dimenziu, ktorú sme
udali pre jeho veľkosť
napr. ak nadefinujeme stĺpec: prispel char(3), pri výpise
sa objaví len PRI
ano
nie
...
V príkaze SELECT požaduje však celý názov stĺpca.
- SELECT vypisuje všetky hodnoty požadovaných stĺpcov – aj
keď sú rovnaké
- ak požadujeme iba rôzne hodnoty použijeme klauzulu
DISTINCT
Príklad: Zistite, z akých rôznych miest pracovníci podniku
SELECT DISTINCT Mesto FROM Podnik;
- pre zápis podmienky selekcie v príkaze WHERE je možné
použiť:
relačné operátory
= rovná sa
pri porovnávaní reťazcov musíme vypísať celý reťazec,
nie sú povolené žolíky
Príklad: Vypíšte mzdu Jána Malého
SELECT Meno, Mzda FROM Podnik
WHERE Meno = ‘Maly Jan’;
Ďalšie:
!=
alebo <> nerovná sa
> väčší
>= väčší alebo rovný
<= menší alebo rovný
< menší
BETWEEN
testuje príslušnosť prvku k vybranému uzavretému
intervalu
BETWEEN <dolná hranica> AND <horná hranica>
Príklad: Vyhľadajte všetkých pracovníkov, ktorých mzda je medzi
10000 a 20000 Sk
SELECT Meno, Mzda FROM Podnik
WHERE Mzda BETWEEN 10000 AND 20000;
IN
testuje príslušnosť prvku do množiny
syntax: IN (<zoznam prvkov množiny>)
Príklad: Vypíšte mená pracovníkov, ktorý majú 1 alebo 3 deti
SELECT Meno, Poc_deti FROM Podnik
WHERE Poc_deti IN (1,3);
LIKE
porovnáva reťazec s reťazcom, v ktorom sú
použité žolíky
žolíky
podčiarnik _ - nahradzuje jeden ľub. znak
percento % - nahradzuje ľub. skupinu znakov
Príklad: Vypíšte všetky priezviská pracovníčok ukončené na – ová
SELECT Meno FROM Podnik
WHERE Meno LIKE ‘%ova %’;
logické operátory
AND - logický súčin
OR - logický súčet
NOT - logická negácia
množinové operátory (tieto Oracle ho nepodporuje)
INTERSECTION - prienik (je to isté ako AND)
UNION - zjednotenie (je to isté ako OR
MINUS - rozdiel (je to isté ako NOT AND)
konštanty a mená stĺpcov
2.2 Usporiadanie riadkov v tabuľke
záznamy z tabuliek sú vypisované v poradí v akom do
tabuľky boli vložené
ak chceme zmeniť ich poradie podľa hodnôt niektorého
kľúča, použijeme klauzulu
ORDER BY <meno kľúča/zoznam kľúčov>
V príkaze SELECT
implicitne sa výpis usporiada podľa hodnoty kľúča
vzostupne (ASC)
ak chceme opačné usporiadanie - zostupné, použijeme
za menom kľúča klauzulu DESC
Príklad: Usporiadajte pracovníkov podľa výšky mzdy zostupne
a v prípade, že majú rovnakú mzdu usporiadajte ich podľa abecedy
SELECT Meno, Mzda
FROM Podnik
ORDER BY Mzda DESC, Meno;
pri použití viacerých kľúčov sa rešpektujú kľúče v takom
poradí, v akom súuvedené
ak kľúčový stĺpec obsahuje prázdne hodnoty, záznamy
s týmito hodnotami sa vypisujú ako prvé
2.3
Spojenie viacerých tabuliek
- príkazom SELECT, kde v klauzule FROM sa uvedú názvy
spájaných tabuliek a v klauzule WHERE podmienka ich
spojenia
SELECT <zoznam stĺpcov>/*
FROM <zoznam tabuliek>
WHERE <podmienka spojenia>;
- ak spájané tabuľky majú rovnaké mená stĺpcov, musí sa
použiť kvalifikácia stĺpcov: <meno tabuľky>.<meno stĺpca>
Príklad: Predpokladajme, že máme tabuľku Fond takejto štruktúry:
Fond(Ev_cislo, Meno, Vyska). Nájdite adresu z tabuľky
Podnik a výšku príspevku na fond z tabuľky Fond pre
Jána Malého.
SELECT Podnik.Ev_cislo, Podnik.Meno, Fond.Vyska
FROM Podnik, Fond
WHERE Podnik.Ev_cislo = Fond.Ev_cislo AND
Podnik.Meno = ‘Maly Jan’;
- spojenie tabuliek prebieha na základe karteziánskeho súčinu
a preto je potrebné použiť WHERE na odfiltrovanie
nepožadovaných riadkov spojenej tabuľky
- Aby sme pri kvalifikácii nemuseli vypisovať celé mená
tabuliek, je možné definovať prefixy v klauzule FROM
Príklad: Nájdite adresu z tabuľky Podnik a výšku príspevku na
fond z tabuľky Fond pre Jána Malého.
SELECT X.Ev_cislo, X.Meno, Y.Vyska
FROM Podnik X, Fond Y
WHERE X.Ev_cislo = Y.Ev_cislo AND X.Meno = ‘Maly Jan’;
Pozor! Prefix platí len v danom príkaze SELECT, mimo neho nie!
- operácia spojenia spojí za sebou riadky dvoch tabuliek, ktoré
majú rovnakú hodnotu kľúča
- ak by k danej hodnote kľúča chýbal zodpovedajúci riadok
v druhej tabuľke, potom sa v spojení tento záznam neobjaví
- ak ho napriek tomu chceme vypísať, pripojíme za podmienku
selekcie (+) vpravo; potom sa vypíšu aj záznamy vyskytujúce
sa len v prvej tabuľke
- ak podmienka selekcie obsahuje (+) vľavo; potom sa vypíšu
aj záznamy vyskytujúce sa len v druhej tabuľke (viď. diagr.)
V niektorých prípadoch je výhodné pracovať s dvomi kópiami
tej istej tabuľky tak, akoby šlo o dve rôzne tabuľky. Dosiahne sa
to tým, že jednej tabuľke sa priradia dva rôzne prefixy.
Príklad: Nájdite všetkých tých pracovníkov, ktorý majú vyšší plat
ako ich vedúci. Predpokladáme, že tabuľka Podnik obsahuje aj stĺpec
veduci_odd.
SELECT X.Meno, X.Mzda, Y.Meno, Y.Mzda
FROM Podnik X, Podnik Y
WHERE X.Veduci_odd = Y.Meno AND X.Mzda > Y.Mzda;
2.4
Vytváranie podotázok
- realizuje sa do seba vnorenými príkazmi SELECT, ktoré sa
dávajú vždy do zátvoriek
- vnorený príkaz SELECT môže vrátiť na vyššiu úroveň:
jednu hodnotu
n-ticu hodnôt
Získanie jednej hodnoty:
Príklad: Nájdite všetkých pracovníkov, ktorí pracujú v rovnakom
oddelení ako Ján Malý
SELECT Meno, Veduci FROM Podnik
WHERE Veduci =
(SELECT Veduci FROM Podnik
WHERE Meno = ‘Maly Jan’);
Získanie viacerých hodnôt:
na vyššiu úroveň môžeme z tejto množiny presunúť
aspoň jeden prvok pomocou ANY
všetky prvky pomocou ALL
n-ticu prvkov
Použitie predikátov ANY, BETWEEN, OR a IN je podobné:
cena BETWEEN 4 AND 6
cena=4 OR cena=5 OR cena=6
cena IN (4,5,6)
cena ANY (4,5,6)
Ak použijeme predikáty ANY a ALL v nerovnostiach majú
význam kvantifikátorov
<ANY(4,5,6) znamená menší ako aspoň jeden prvok množiny
>ANY(4,5,6) znamená väčší ako všetky prvky množiny
Príklad: Nájdite pracovníkov z Košíc, ktorí majú:
1. vyšší plat ako ktorýkoľvek pracovník z Prešova.
2. nižší plat ako aspoň jeden Prešovčan
Usporiadajte ich podľa platu zostupne.
SELECT Meno, Mzda, Mesto
FROM Podnik
WHERE Mesto = ‘Kosice’ AND Mzda >ALL
(Mzda <ANY)
(SELECT Mzda FROM Podnik
WHERE Mesto = ‘Presov’)
ORDER BY Mzda DESC;
SQL porovnáva nielen atomické hodnoty, ale aj n – tice prvkov
Príklad: Nájdite pracovníkov, ktorý majú rovnakú mzdu
a pochádzajú z rovnakého mesta ako Ján Malý
SELECT Meno, Mzda, Mesto FROM Podnik
WHERE (Mzda, Mesto) =
(SELECT Mzda, Mesto
FROM Podnik
WHERE Meno = ‘Maly Jan’);
- V databáz. systéme ORACLE je v SQL v je možné vnárať
podotázky až do hĺbky 16
3 Práca s prázdnou hodnotou
- prázdna hodnota neznamená nulu
- nepripustenie prázdnej hodnoty sa musí deklarovať už
pri vytváraní tabuľky pomocou klauzuly NOT NULL
- jej kód môže mať v rôznych stĺpcoch rôznu hodnotu
- rôzne agregované funkcie pracujú s prázdnou hodnotou
rôzne
- pri práci s nulovou hodnotou sa nutne používa predikát
IS NULL respektívne IS NOT NULL, ktorý testuje, či
nájdená hodnota je prázdna
Príklad: Vypíšte mená všetkých hercov, ktorý nemajú udaný
vek.
SELECT Meno
FROM Herci
WHERE Vek IS NULL;
- pri ukladaní hodnôt do tabuľky pomocou INSERT sa
namiesto hodnoty môže použiť kľúčové slovo NULL
- pri aktualizácii hodnôt pomocou UPDATE používame
hodnotu NULL
Príklad: UPDATE Herci
SET Vek = NULL
WHERE Meno = ‘Taylor’;
- pri usporiadaní riadkov v príkaze SELECT ..... ORDER BY
sú riadky s prázdnou hodnotou kľúčového slova vždy
vypisované ako prvé a za nimi nasledujú už usporiadané.
- v prípade jednoznačnej hodnoty atribútu je potrebné pri
definícii tabuľky uviesť u daného atribútu kľúčové slovo
UNIQUE
Príklad:
CREATE TABLE Podnik
(Ev_cislo NUMBER(4) NOT NULL UNIQUE,
Meno...);
- zavedením prázdnej hodnoty sa mení sémantika vyhodnotenia
logických podmienok :
z dvojhodnotovej logiky sa prechádza na trojhodnotovú
(TRUE, FALSE a NULL).
4 Zoskupovanie riadkov
- tabuľku môžeme usporiadať tak, že zoskupíme riadky
s rovnakou hodnotou kľúča a to pomocou klauzuly
GROUP BY <meno kľúča>
Príklad: Zistite priemernú mzdu a maximálnu mzdu
pracovníkov podľa jednotlivých miest.
SELECT Mesto, AVG(Mzda), MAX(Mzda)
FROM Podnik
GROUP BY Mesto;
- je možné zoskupovať aj podľa viacerých kľúčov; zistenie
počtu v jednotlivých skupinách pomocou COUNT(*)
Príklad: Majme tabuľku s názvom Fakulta(Katedra, Meno,
Funkcia, Mzda, ...).
Zistite koľko je na jednotlivých katedrách
profesorov, docentov, odb. asistentov, asistentov,
sekretárok a aký majú priemerný plat.
SELECT Katedra, Funkcia, COUNT(*), AVG(Mzda)
FROM Fakulta
GROUP BY Katedra, Funkcia;
Hľadanie v zoskupených tabuľkách
realizuje sa pomocou klauzuly
HAVING <podmienka>
Príklad: Nájdite priemernú mzdu tých skupín (podľa funkcie),
ktoré majú viac členov ako 10.
SELECT Funkcia, COUNT(*), AVG(Mzda)
FROM Fakulta
GROUP BY Funkcia
HAVING COUNT(*) > 10;
Príklad: Nájdite všetky katedry, kde je priemerný plat
odborného asistenta väčší ako 14 000.
SELECT Katedra, Funkcia, AVG(Mzda)
FROM Fakulta
WHERE Funkcia = ‘Odb_asistent’
GROUP BY Katedra
HAVING AVG(Mzda) > 14000;
Príklad: Nájdite všetky katedry, ktoré majú dve
sekretárky.
SELECT Katedra, COUNT(*) Sekretarky
FROM Fakulta
WHERE Funkcia=’sekretarka’
GROUP BY Katedra
HAVING COUNT(*)=2;
Pozn.
Prázdne hodnoty nie sú do výpočtu agregovaných
funkcií zahrnuté.
5 Výrazy a funkcie
5.1 Aritmetické výrazy
Sú tvorené:
z mien stĺpcov typu NUMBER
číselných hodnôt
volania funkcií číselného typu, ktoré sú spojené
operátormi:
+ - * /
Aritmetický výraz môže byť:
v klauzule WHERE pro formulácii podmienky selekcie
v zozname stĺpcov projekcie príkazu SELECT
v klauzule ORDER BY na mieste kľúča.
Príklad: Akí by mali plat pracovníci katedier, keby sa im
zvýšil o polovicu.
SELECT Katedra, Meno, Mzda*1.5
FROM Fakulta
ODER BY Katedra DESC;
Ak sa výraz alebo hodnota funkcie vzťahuje k stĺpcu, ktorý môže
obsahovať prázdne hodnoty, môže byť hodnota výrazu tiež prázdna.
Niekedy je vhodné nahradiť prázdnu hodnotu (iba!!!) určitou
danou hodnotou pomocou funkcie
NVL(<meno stĺpca>,<náhradná hodnota>)
Príklad: Pre tých, čo boli na zahraničnej stáži.
SELECT Meno, NVL(Mzda,0)*1.5
FROM Fakulta;
zoznam prvkov projekcie v príkaze SELECT môže
obsahovať prvky tvaru
<výraz>[<záhlavie stĺpca>]
ak záhlavie stĺpca nemá charakter mena stĺpca, napr.
obsahuje medzery, musi sa uviesť v úvodzovkách!
Príklad: SELECT Meno, Mzda*1.5 “Upravena mzda“
FROM Fakulta;
5.2 Aritmetické funkcie
n – číslo d – počet desatinných miest
FUNKCIA
POPIS FUNKCIE
PRÍKLAD
VÝSL
ABS (<n>)
vypočíta abs. hodnotu
ABS (-15)
15
CEIL (<n>)
vypočíta najbližšie celé
číslo >= dané číslo n
CEIL (15.7)
16
FLOOR (<n>)
vypočíta najbližšie celé
číslo <= dané číslo n
FLOOR (15.7)
15
MOD (<n1,n2>)
vypočíta zvyšok po delení
n1/n2
MOD (7,5)
2
POWER (<n>,<exp>)
vypočíta mocninu
POWER (3,2)
9
ROUND (<n>,<d >)
zaokrúhli číslo
ROUND (1.556,1) 1.6
SQRT (<n>)
vypočíta druhú
odmocninu
SQRT (25)
5
TRUNC (<n>,<d >)
odreže des. miesta
ak je záporné berie vľavo
od des. bodky
TRUNC (1.692,1)
TRUNC (13.6,-1)
1.69
10
SIGN (<n>)
vráti 1 pre n>0,
-1 pre n<0, 0 pre n=0
SIGN (-15)
-1
GREATEST (<zoznam
hodnôt>)
určí maximum
GREATEST
(2,8,5)
8
LEAST (<zoznam
určí minimum
LEAST (2,8,5)
2
hodnôt>)
5.3 Reťazcové funkcie
a) vracajúce reťazec
SYNTAX:
VÝZNAM:
PRÍKLAD:
CHR (n)
vráti znak prislúchajúci
ASCII kódu n
CHR (75) .... K
INITCAP (reť)
vráti reťazec s veľkými
prvými písmenami iba u slov
oddelených medzerou,
ostatne malé
INITCAP (‘Ivan
BIELY’)
Ivan Biely
LOWER (reťazec)
zmení všetky veľké písmená
na malé
LOWER (‘Ivan Biely’)
ivan biely
UPPER (reťazec)
zmení všetky malé písmená
na veľké
UPPER (‘Ivan Biely’)
IVAN BIELY
LPAD (reť1,n[,reť2])
doplní reť1 na dĺžku n
znakmi reť2; ak reť2 nie je
tak doplní medzerami zľava
LPAD (‘Maly’,8,’.*’)
.*.*Maly
LTRIM (reť[,množina
znakov])
odstráni znaky zľava
uvedené v množine až po
prvý, ktorý v množ. nie je
LTRIM
(‘xxXxBiely‘,‘x‘)
XxBiely
LTRIM (‘ Biely’)
Biely
RTRIM (reť[,množina
znakov])
odstráni znaky sprava
uvedené v množine až po
prvý, ktorý v množ. nie je
impl. Vypustí medzery
RTRIM
(‘MalyxXxx’,’x’)
MalyxX
menovky
RPAD (reť1,n[,reť2])
doplní reť1 na dĺžku n
znakmi reť2; ak reť2 nie je
tak doplní medzerami sprava
RPAD (‘Maly’,8,’*’)
Maly****
REPLACE
(reť1,reť_čo[,reť_čím])
výmena
ak nie je čím, len vypustí
REPLACE
(‘abba’,’ba’,’el’)
abel
SUBSTR (reť,m[,n])
vráti n znakov od m-tého
počínajúc; ak n chýba tak
vráti do konca reťazca
SUBSTR (‘ABBA’,2,2)
BB
TRANSLATE
(reť,z_čoho,do)
preloží všetky výskyty
z_čoho reťazcom do; neoz-
TRANSLATE
(‘ABBA’,’A’,’B’)
načené znaky sa nechávajú
BBBB
b) vracajúce numerické hodnoty
SYNTAX:
VÝZNAM:
PRÍKLAD:
ASCII (reť)
vráti ASCII kód prvého
znaku reťazca
ASCII (‘Quido’)
81
INSTR (reť1,reť2
[,n[,m]])
dodá pozíciu m-tého
výskytu reť2, v reť1 od n-tej
pozície;ak n,m chýba impl.1
INSTR (‘ABB’,’B’,2,1)
2
LENGTH (reť)
vráti dĺžku reťazca
LENGTH (‘BLAVA’)
5
reť1 || reť2
pripojí oba reťazce za seba
SELECT Meno ||’......‘||
Mesto “Kto ....... Odkial”
FROM Podnik;
max 30 zn. v hlavicke
DECODE (stĺpec_tab,
zoznam dvojíc
tabulky kódu,
implicitne)
prekladá danú hodnotu
v stĺpci uvedenou hodnotou,
neuvedené...implicitne
SELECT Meno,
DECODE (Funkcia, 1,
‘Profesor’,2, ‘Docent’,
3, ’Odb.asistent’,
’Asistent’) “Pracuje ako“
FROM FAKULTA;
Funkcia DECODE môže mať úlohu prepínača v prípade, keď nechceme
mať v tom istom stĺpci homogénne hodnoty, napr. hodnoty toho istého
atribútu.
Príklad:
Predpokladajme, že u pracovníkov je zaznamenané: mesto, ale
i kompletná adresa. Vytlačte zoznam mien s adresami, ale ak ide
o košičanov, namiesto adresy tlačte len názov mesta.
SELECT Meno, DECODE (Mesto, ‘Košice’, Mesto, Adresa) Odkial
FROM Podnik;
Meno
Odkial
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Biely Jan
Košice
Maly Jozef
V tŕní 13, Moldava
Bajny Igor
Dlhá 17, Prešov
Konecny Pavol
Košice
Pozn. V stĺpci udanom prvým parametrom DECODE sa vo výsledku môžu
vyskytovať hodnoty z rôznych stĺpcov.
5.4 Agregované funkcie
vracajú výsledky zo skupín riadkov
ak nie je definované ináč berie všetky riadky ako jednu skupinu
použitím GROUP BY môže byť príkaz SELECT použitý na
výpočet výsledkov z menších skupín.
Použitie slov: DISTINCT – berie v úvahu rozdielne hodnoty
ALL – berie v úvahu všetky hodnoty
implicitne: ALL
argument môže byť typu: CHAR, NUMBER, DATE
v - výraz
SYNTAX:
VÝZNAM:
PRÍKLAD:
AVG
([DISTINCT/ALL]v)
vracia priemer v, ignoruje
prázdne hodnoty
SELECT AVG(Mzda)
“Priem. mzda“
FROM Podnik;
COUNT
([DISTINCT/ALL]v)
vracia počet riadkov,
v ktorých výraz v nemá
prázdnu hodnotu
SELECT COUNT
(DISTINCT Profesia)
FROM Podnik;
COUNT (*)
vracia počet všetkých
riadkov tabuľky, vrátane
prázdnych i opakujúcich sa
hodnôt
MAX
([DISTINCT/ALL]v)
vracia maximálnu hodnotu
výrazu v
SELECT MAX(Mzda)
“Max. mzda:“
FROM Podnik;
MIN
([DISTINCT/ALL]v)
vracia minimálnu hodnotu
výrazu v
SELECT MIN(Datnar)
FROM Podnik;
STDDEV
([DISTINCT/ALL]v)
vracia štand. odchýlku,
ignoruje prázdne hodnoty
(počíta s n-1 vo výpočte)
SELECT
STDDEV(Mzda)
FROM Podnik;
SUM
([DISTINCT/ALL]v)
vracia sumu hodnôt
výrazu v
VARIANCE
vracia varianciu výrazu v,
([DISTINCT/ALL]v)
ignoruje prázdne hodnoty
(rozptyl)
5.5 Dátumové funkcie
Vracajú hodnotu typu DATE
e,d – dátum, n – prir. číslo
d
<1.1.4712 pr.n.l, 31.12.4711 n.l>
v tvare ‘DD-MM-YY’alebo ‘DD-MON-YYYY‘ oddeľovače: - . /
SYNTAX:
VÝZNAM:
PRÍKLAD:
ADD_MONTHS (d,n) vráti nový dátum s +n
mesiacmi
SELECT
ADD_MONTHS(SYSDATE
,6) “O pol roka“ FROM
DUAL;
LAST_DAY (d)
vráti posledný deň
v celej dátumovej forme
v danom mesiaci
SELECT LAST_DAY (‘02-
JAN-1996’) “Posledný deň“
FROM DUAL;
Posledný deň: 31.01.96
MONTHS_BETWEEN
(d,e)
vráti počet mesiacov
medzi dátumami d a e
(ak d je neskôr ako e
tak je výsledok
pozitívny, ak naopak
tak negatívny)
SELECT ROUND
(MONTHS_BETWEEN
(’02.02.1996’,’01-
JAN-1996’),2) “Mesiace“
FROM DUAL;
Mesiace
1.03225806 vypísalo by,ale
1.03 ROUND
NEXT_DAY(d,reť)
vráti dátum prvého dňa
menovaného v reťazci
po dátume d. Reť musí
byť presné meno dňa.
SELECT NEXT_DAY(‘26-
JÚL-1996’, ’NEDEĽA’)
“NEDEĽA“ FROM DUAL;
NEDEĽA
28.07.96
ROUND (d[,presnosť]) vráti dátum d
zaokrúhlený na základe
presnosti; implicitne je
to nasledujúci deň
SELECT
ROUND(TO_DATE(’26/
JÚL/1996’), ’YEAR’) ”Prvý
ďeň v roku” FROM Podnik
Prvý deň v roku
01.01.97
SYSDATE
vráti bežný dátum – bez
argumentov
SELECT SYSDATE Dnes
FROM DUAL;
Dnes
15.10.03
TRUNC (d[,presnosť]) odreže dátum na zadanú
presnosť, t.j. dá prvý
deň v uvedenom
mesiaci alebo roku
SELECT
TRUNC(TO_DATE(’28-
OKT-1995’), ’YEAR’)
FROM DUAL;
01.01.95
TO_CHAR (d[,vzor])
skonvertuje dátum na
reťazec podľa vzoru, ak
je
TO_DATE
(reť[,<vzor>])
skonvertuje reťazec
alebo číslo na dátum
Pozn.
DUAL je tabuľka v Data Dictionary.
Má 1 stĺpec DUMMY CHAR(1) a 1 riadok s hodnotou ’x’
Dôležitá pre výpočty s dátum. funkciami, konštanta sa vráti iba raz.
Pre tabuľku s viacerými riadkami sa konštanta vráti pre každý riadok.
TO_CHAR
a) SELECT TO_CHAR (Narodeny, ‘YYYY’) FROM Podnik;
TO_CHAR (Narodeny, ‘YYYY’)
- - - - - - - - - - - - - - - - - - - - - - - - - -
1992
1945
1947
b) SELECT TO_CHAR (Narodeny, ‘Q’) Kvartal FROM Podnik;
Kvartal
- - - - - -
2
4
1
c) SELECT TO_CHAR (SYSDATE, ‘DD-MON-YYYY HH:MI:SS
A.M.’) Dnes FROM DUAL;
Dnes
15-OKT-2003 11:13:20 DOPOLUDNIA
TO_DATE
Štand. formát pre vstup Dátumu je DD-MON-YY. Ostatné neštandardné
vstupu musia použiť TO_DATE s dátumovým formátom.
Napr. INSERT INTO Podnik (Meno, Narodeny)
VALUES (‘Velky Ivan’,
TO_DATE (‘18-JAN-69 10:50 A.M.’,’DD-MON-YY HH:MI A.M.’;
Pozn.
Do formátového vzoru v TO_CHAR resp. TO_DATE sa použijú:
- číselné masky pre číselné hodnoty dátumu a času
- znakové masky pre textové hodnoty
Číselné masky:
CC alebo SCC
storočie
YYYY
rok (4 číslice)
YYY
rok (posledné 3 číslice)
YY
rok (posledné 2 číslice)
Y
rok (posledná číslica)
Q
štvrťrok (poradie kvartálu v roku)
WW
poradie týždňa v roku
W
poradie týždňa v mesiaci
MM
poradie mesiaca v roku
DDD
poradie dňa v roku
DD
poradie dňa v mesiaci
D
poradie dňa v týždni
HH alebo HH12
hodina dňa v stupnici 1-12
HH24
hodina dňa v stupnici 0-24
MI
počet minút
SS
počet sekúnd
SSSSS
počet sekúnd od polnoci (0-86 399)
Príklad: SELECT TO_CHAR (sysdate, ‘HH24’) FROM DUAL;
Znakové masky
SYEAR
rok anglicky textom
napr. Nineteen-Ninety-Six – 1996
MONTH
meno mesiaca – celé
MON
skratka mesiaca na 3 písmená
DAY
meno dňa – celé
AM alebo PM
dopoludnia alebo popoludní v prípade že hodina
je v rozsahu 1-12
A.M. alebo P.M.
to isté
BC alebo AD
pred našim letopočtom alebo nášho letopočtu
B.C. alebo A.D.
to isté
TH
anglická prípona poradového čísla (st,nd,rd,th)
SP
anglické slabikovanie čísla
2530 twenty-five-thirty
SPTH alebo THSP
anglické slabikovanie poradového čísla
25 twenty-fifth
Príklady:
1)
Kedy nastúpil pracovník?
SELECT Meno, TO_CHAR (Prijaty,’DY DD MON YYYY’) “Nastúpil”
FROM Fakulta;
Meno
Nastúpil
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Biely Jan
WED 17 DEC 1990
Maly Ivan
THU 02 APR 2001
Bajny Igor
MON 13 JUN 1985
Pozn.
Do vzoru (formátu) je možné kdekoľvek vložiť reťazec obmedzený
úvodzovkami, ktorý sa pri zobrazovaní hodnoty vloží na uvedené miesto.
Rešpektujú sa aj malé a veľké písmená vo formáte. Stĺpec s dátumom vždy
uchováva aj čas.
Napr.
FORMÁT
FORMÁTOVANÝ DÁTUM
štand. formát
17-DEC-95
DAY MONTH DD, YYYY
WEDNESDAY DECEMBER 17,
1995
Day DD Mon YYYY
Wednesday 17 Dec 1995
DY “the” ddth “of” Month YYYY
WED the 17th of December 1995
“The” DdSPTH “of” Month YyyySP The Seventeenth of December One
Thousand Nine Hundert Ninety-Five
MM/DD/YY HH:MI PM
12/17/95 12:00 AM
Pre hodnoty typu DATE je definovaná aritmetika v rozsahu:
dátum + číslo (v dňoch)
dátum – číslo
dátum – dátum (v dňoch)
2)
Ako dlho je zamestnaný?
SELECT Meno, ROUND (SYSDATE – Prijaty,2) “Dlzka zamestnania”
FROM Fakulta;
Napr. Dlzka zamestnania
685.24
3)
Kto nastúpil v danom období?
SELECT Meno, Katedra
FROM Fakulta
WHERE Nastupil BETWEEN ‘1-JAN-75’ AND ‘31-DEC-95’
ORDER BY Nastupil DESC;
4) Predpokladajme 90-dennú výpovednú lehotu. Máme k dispozícii dátum
výpovede. Nájdite všetkých zamestnancov, ktorým lehota vyprší o určitý
čas.
SELECT Meno, Dat_vypovedi, SYSDATE Dnes,
TRUNC ((Dat_vypovedi+90) – SYSDATE) “Dní do konca“,
Dat_vypovedi+90 Skončí
FROM Podnik;
WHERE Dat_vypovedi IS NOT NULL;
Meno Dat_vypovedi
Dnes Dni do konca Skončí
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - -
Maly Peter 10.7.04 10.10.04
12
22.11.04
KONVERZIA DÁT
DO
Z
CHAR
NUMBER
DATE
CHAR
nepotrebné
TO_NUMBER
TO_DATE
NUMBER
TO_CHAR
nepotrebné
TO_DATE
DATE
TO_CHAR
chybné
nepotrebné
6. Modifikácia tabuľky
- pri príkazoch, ktoré sú zamerané na zmenu tabuľky, je
dôležité, v akom režime pracuje SQL
- nastavenie módov práce SQL:
SET AUTOCOMMIT IMM
zmeny vykonané príkazmi INSERT, DELETE,
UPDATE sa vykonajú fyzicky okamžite
SET AUTOCOMMIT OFF
zmeny vykonané príkazmi INSERT, DELETE,
UPDATE sa vykonávajú len logicky a zhromažďujú
sa
vykonanie fyzických zmien príkazom
COMMIT WORK
Tento sa automaticky vykoná aj pri príkaze
EXIT pri ukončení práce
odvolanie zmien
všetky nazhromaždené zmeny sa odvolajú
príkazom: (aj keď práca končí nekorektne)
ROLLBACK WORK
Pod modifikáciou tabuľky rozumieme :
aktualizovanie prvkov tabuľky príkazom UPDATE
zrušenie riadkov tabuľky príkazom DELETE
pridanie stĺpcov tabuľky príkazom
ALTER TABLE ........ ADD
zmena rozmeru tabuľky príkazom
ALTER TABLE ...... MODIFY
vymazanie celej tabuľky príkazom DROP
Aktualizovanie prvkov tabuľky
UPDATE <meno tabuľky>
SET <meno stĺpca> = <výraz1>
[, <meno stĺpca> = <výraz2>] ...
[WHERE <podmienka>];
Príklad: Zvýšte mzdu všetkých odborných asistentov
o tisíc korún.
UPDATE Fakulta
SET Mzda = Mzda + 1000
WHERE Funkcia = ‘Odb_as’;
Zrušenie riadkov tabuľky
DELETE FROM <meno tabuľky>
[WHERE <podmienka>];
Príklad: Zrušte záznam o pracovníkovi s menom Malý
Ján
DELETE FROM Podnik
WHERE Meno = ‘Maly Jan’;
Pridanie nových stĺpcov
ALTER TABLE <meno tabuľky>
ADD (<meno stĺpca> <typ>
[, <meno stĺpca> <typ>] ...);
stĺpce sa pridávajú k tabuľke sprava
pre odstránenie stĺpca z tabuľky v SQL neexistuje
príkaz
riešenie: nadefinuje sa nová tabuľka bez nežiadúcich
stĺpcov a prekopírujú sa potrebné hodnoty z pôvodnej
tabuľky príkazom INSERT
Príklad: Prekopírujte tabuľku Podnik do tabuľky
Podnik2.
INSERT INTO Podnik2
SELECT Ev_cislo, Meno, ...
FROM Podnik;
Príklad:
Doplňte tabuľku Fakulta stĺpcom
s informačným číslom výskumnej úlohy na ktorej
pracovník pracuje.
ALTER TABLE Fakulta
ADD (Cislo_vu NUMBER(4));
UPDATE Fakulta
SET Cislo_vu = 1023
WHERE Funkcia = ‘Docent‘
AND Katedra=‘KKUI‘;
UPDATE Fakulta
SET Cislo_vu = 1025
WHERE Funkcia = ‘Asistent‘
OR Cislo_vu IS NULL;
Zmena rozmeru stĺpca
ALTER TABLE <meno tabuľky>
MODIFY (<meno stĺpca> <typ > <nový rozmer>
[, <meno stĺpca> <typ > <nový rozmer>] …);
Príklad: Zmeňte šírku stĺpca Mzda
ALTER TABLE Podnik
MODIFY Mzda NUMBER(8.2);
Zrušenie celej tabuľky
DROP TABLE <meno tabuľky>;
zruší sa aj definícia tabuľky
7. Indexové tabuľky
Slúžia pre urýchlenie vyhľadávania v tabuľkách.
Vytvorenie indexovej tabuľky :
CREATE [UNIQUE] INDEX <meno index. tabuľky>
ON <meno tabuľky dát>
(<meno stĺpca> [ASC | DESC]
[, <meno stĺpca> [ASC | DESC] ] ...);
klauzula UNIQUE sa používa vtedy ak je index
jedinečný, teda ak indexujeme podľa stĺpca označeného
UNIQUE
m meno tabuľky dát je tabuľka, ktorú chceme indexovať
meno stĺpca je stĺpec, podľa ktorého chceme indexovať
tabuľku
Príklad: Vytvorte indexovú tabuľku podľa evidenčného
čísla pre tabuľku Podnik.
CREATE UNIQUE INDEX Ind_Evc
ON Podnik
(Ev_cislo);
Príklad: Vytvorte indexovú tabuľku podľa mzdy a počtu
detí, obe v zostupnom poradí pre tabuľku Podnik
CREATE INDEX Ind_Mzda_Deti
ON Podnik
(Mzda DESC, Poc_deti DESC);
možno vytvoriť rovnako nazvané indexové tabuľky na
rôznych tabuľkách dát
na jednu tabuľku dát je možné vytvoriť množstvo
indexových súborov
Zrušenie indexovej tabuľky
DROP INDEX [<meno tabuľky>.]<meno index. tab>;
Príklad: Zrušte indexový súbor Ind_Mzda_Deti
DROP INDEX Index_Mzda_Deti;
DROP INDEX Podnik.Index_Mzda_Deti;
Poznámky:
nastaviť sa na indexový súbor nie je potrebné,
nie je vhodné vytvárať indexové súbory na tabuľkách
menších ako 1500 riadkov
pri zrušení tabuľky sa zrušia automaticky všetky jej
indexové súbory
systém si eviduje indexové súbory v DATA
DICTIONARY
vytvorené indexové tabuľky užívateľa sú v tabuľke
user_indexes, kde sa eviduje:
index_name – meno indexovej tabuľky
table_name – tabuľka, nad ktorou bol
vytvorený indexový súbor
zobrazenie všetkých indexových tabuliek, ktoré si
užívateľ vytvoril:
SELECT index_name, table_name
FROM user_indexes;
Aktualizácia indexovej tabuľky
VALIDATE INDEX <meno tab.>.<meno ind. tab.>;
Je nutná vždy po vložení nových záznamov do tabuľky.
8. Vytvorenie pohľadu a práca s ním
Charakteristika:
- pohľady predstavujú virtuálne tabuľky,
- obsahujú stĺpce často z rôznych tabuliek, ktoré sú pre
aplikáciu chápané ako jedna tabuľka,
- fyzicky neexistujú vo forme tabuľky,
- pri definícii pohľadu sa vymenujú stĺpce z tabuliek, ktoré sa
do daného pohľadu zahrnú,
- počet pohľadov nie je obmedzený.
Dôvody pre vytvorenie pohľadu:
pri veľkých databázach je výhodnejšie pracovať len
s určitým výsekom dát, ktoré tvoria pohľad,
z hľadiska ochrany a utajenia dát je výhodné každému
užívateľovi sprístupniť len určité dáta,
vo viacužívateľských systémoch slúžia pohľady k tomu,
aby rôzni používatelia pracovali s tými istými pohľadmi
rôznymi spôsobmi
Nevýhody práce s pohľadom
pretože pohľad nie je tvorený fyzicky tabuľkou,
zakaždým je znova vytváraný, operácie s pohľadom
trvajú dlhšie,
vznikajú problémy s aktualizáciou pohľadu, ktoré majú
údaje zo stĺpcov viacerých tabuliek
V
ytvorenie pohľadu:
CRETE VIEW <meno pohľadu> [(<zozn. stĺpcov pohľ.>)]
AS SELECT <zoznam mien stĺpcov>
FROM <zoznam tabuliek>
[WHERE <podmienka>]
[GROUP BY <meno stĺpca>
[HAVING <podmienka>]]
[WITH CHECK OPTION];
zoznam mien stĺpcov pohľadu slúži na premenovanie
vybraných stĺpcov
ak sa neuvedú ostávajú pôvodné
ak je v klauzule SELECT výraz, potom sa zoznam
stĺpcov pohľadu musí zadať
klauzula WITH CHECK OPTION spôsobí testovanie
aktualizovania položiek pohľadu, vrátane INSERT,
podľa podmienky uvedenej v podmienke WHERE
pohľadu
ak chceme vložiť do pohľadu záznam, ktorý
odporuje podmienke uvedenej v klauzule WHERE,
SQL vyhlási chybu a záznam sa do pohľadu
nezaradí
prehľad o vytvorených pohľadoch obsahuje DATA
DICTIONERY v tabuľke users_views
tabuľka obsahuje:
view_name – meno pohľadu
text_length – dĺžka textu
text – informácie o pohľade
Zrušenie pohľadu
DROP VIEW <meno pohľadu>;
Príklad: Vytvorte pohľad len o pracovníkoch KKUI
CREATE VIEW P_KKUI (Ec, M_prac, Zaradenie, Kat)
AS SELECT Ev_cislo, Meno, Funkcia,Katedra
FROM Fakulta
WHERE Katedra = ‘KKUI‘
WITH CHECK OPTION;
Príklad:
INSERT INTO P_KKUI
VALUES (454, ‘Velky Peter‘,‘Asistent‘,‘KPI‘);
ERROR: view with check option where-clause violation
Príklad:Zistite mesačný a ročný príjem prac. KKUI
CREATE VIEW P_Rocny_Prijem (Pracovnik,
Mesacne, Rocne)
AS SELECT Meno, Mzda, Mzda * 12
FROM Fakulta;
ak sa vyberú všetky stĺpce tabuľky, potom stačí uviesť
<meno tabuľky>.*
Príklad: CREATE VIEW P_KKUI
AS SELECT Fakulta.*
FROM Fakulta
WHERE Katedra = ‘KKUI‘;
zmeny hodnôt v tabuľkách sa do pohľadu premietajú
automaticky a naopak
aktualizácia pohľadu (UPDATE, DELETE, INSERT)
nie je možná ak:
je pohľad vytvorený z viacerých tabuliek
pohľad obsahuje klauzulu GROUP BY
pohľad obsahuje niektorú z funkcií AVG, MIN,
MAX, SUM, COUNT
niektorý stĺpec pohľadu je odvodený z výrazu
pri zapisovaní hodnôt do pohľadu pomocou INSERT sa
vždy hodnoty zapisujú do pôvodnej tabuľky; ak je
pohľad s WITH CHECK OPTION, vloží, len ak je
splnená podmienka, ak je bez CHECK OPTION, do
tabuľky vloží;
do pohľadu napr. P_KKUI sa však nezobrazi, ak nie je
pz KKUI
po vytvorení pohľadu je možná práca s ním ako
s ktoroukoľvek tabuľkou
v operácii spojenia sa pohľad môže použiť ako tabuľka;
nemôžeme ho však pripojiť, ak obsahuje klauzulu
GROUP BY
Výhoda pohľadu oproti spájaniu tabuliek:
s projekciou vytvorenou z viacerých tabuliek sa
ďalej pracovať nedá
s vytvoreným pohľadom je možné ďalej pracovať
ako s tabuľkou
9. Prideľovanie prístupových práv
- privilégiá sa delia
na objektové privilégiá
na systémové privilégiá
- syntax príkazu na pridelenie objektového privilégia
GRANT ALL [PRIVILEGES] | <zoz. prístup. práv>
ON [TABLE] <zoznam objektov>
TO PUBLIC | <zoznam používateľov>
[WITH GRANT OPTION];
zoznam možných prístupových práv na konkrétne
objekty
klauzulou TO PUBLIC sa prideľujú práva všetkým
používateľom, ináč je treba uviesť ich zoznam
ak je uvedená klauzula WITH GRANT OPTION môže
užívateľ, ktorému boli práva takto pridelené, odovzdávať
tieto práva (prípadne len niektoré z nich) ďalším
užívateľom
-
Odvolanie prístupových práv
REVOKE ALL [PRIVILEGES] | <zozn. prístup. práv>
ON [TABLE] <zoznam objektov>
FROM PUBLIC | <zoznam užívateľov>;
- DBS Oracle je určený pre prácu v prostredí (IBM PC/AT,
VAX), kde sú na diskových pamätiach umiestnené dáta
súčasne viacerých užívateľov
- práca používateľa s Oracle začína príkazom CONNECT,
ktorým sa používateľ pripojí do systému
v príkazovom riadku sa spustí sqlplus a potom sa pripojí
nasledovne
CONNECT <meno použ.>/<heslo> @<meno db servra >;
- Systémové práva v Oracle sú:
CONNECT – možnosť pripojenia sa k databáze
RESOURCE – všetky práva nad tabuľkami
DBA
– právo systémového správcu
databázového systému
(Data Base Administrator)
Správca databázového systému Oracle
definuje mená a heslá užívateľov
prideľuje práva a privilégiá užívateľom
GRANT RESOURCE | DBA | CONNECT
TO <meno> IDENTIFIED BY <heslo>;
aby mohol používateľ vytvárať vlastné tabuľky musí mať
právo RESOURCE
používatelia Oracle sú rozdelení do troch skupín:
CONNECT – má prístup k dátam a aj manipulácii
s nimi
RESOURCE – má práva definovať tabuľku
DBA – má všetky práva správcu databázového
systému
práva správcu môžu byť prenesené na iného
používateľa pomocou GRANT DBA
GRANT DBA TO <meno>
IDENTIFIED BY <heslo>;
zmena hesla môže byť vykonaná opätovným volaním
príkazu
GRANT CONNECT TO <meno>
IDENTIFIED BY <nové heslo>;
- ak používateľ používa tabuľku ktorú nevytvoril, musí použiť
k jej prístupu syntax:
<meno autora>.<meno tabuľky>
každý používateľ si môže pomenovať tabuľku ako chce
a nedochádza pritom ku konfliktom mien
ak by uvádzanie tohto prefixu, napr.
Medzihradska.Podnik malo zdržiavať, je možné
definovať synonymum:
CREATE SYNONYM <nové meno>
FOR <meno autora>.<pôvodné meno>;
Príklad:
CREATE SYNONYM mimi
FOR Medzihradska.Podnik;
správca môže vytvoriť synonymum mena tabuľky alebo
pohľadu, ktorý môžu používať všetci používatelia
CREATE PUBLIC SYNONYM <nové meno >
FOR <autor>.<meno tabuľky >;
vymazanie používateľa zo zoznamu používateľov
REVOKE CONNECT
FROM <meno používateľa>;
- Príklad
y:
1. Tvorca tabuľky dáva právo na otázky výberu p. Malému
GRANT SELECT
ON Podnik
TO Maly;
2. Umožnite všetkým prácu s tabuľkou Podnik
čo do výberu, ale bez toho aby mohli zistiť údaje o mzde
CREATE VIEW p_Podnik
AS SELECT Ev_cislo, Meno, Mesto,Narodeny,Deti
FROM Podnik;
GRANT SELECT
ON p_Podnik
TO PUBLIC;
Pozn.
Práca s pohľadom je obmedzená na SELECT, INSERT,
UPDATE a DELETE
SQL umožňuje zostrojiť pohľad všeobecne, ktorý dáva rôzne
výsledky rôznym používateľom vďaka využitiu slova
kľúčového USER, ktoré sa pri spracovaní nahradí menom
prihlasovaného používateľa (z príkazu CONNECT)
3. Nech pracovníci fakulty majú prístup len k údajom
o pracovníkoch vlastnej katedry
CREATE VIEW moja_Katedra
AS SELECT *
FROM Fakulta
WHERE Katedra IN
(SELECT Katedra
FROM Fakulta
WHERE Meno = USER);
4. Povoľte vedúcemu katedry KKUI čítať popr. meniť údaje
týkajúce sa len funkcie jednotlivých členov jeho katedry
GRANT SELECT, UPDATE (Funkcia)
ON moja_Katedra
TO Sarnovsky;
5. Porovnajte s predchádzajúcim príkazom.
GRANT SELECT, UPDATE
ON moja_Katedra
TO Sarnovsky,Kollar;
Pozn. Odvolanie práv je možné vždy a komukoľvek, komu
boli tieto pridelené
6. Zrušte právo na vkladanie údajov do tabuľky Fakulta
pre p. Bájneho
REVOKE INSERT
ON Fakulta
FROM Bajny;
10. Spojenie kurzora a príkazu SELECT
- ak príkaz SELECT vyberie nie jeden, ale viac riadkov tabuľky, je
nutné deklarovať tzv. kurzor pre príkaz SELECT
- kurzor predstavuje ukazovateľ (smerník) na konkrétny riadok
špecifikovaný príkazom SELECT
- množina vybraných riadkov sa nazýva aktívny súbor
Príkazy pre prácu s kurzorom:
DECLARE CURSOR – deklarácia kurzora
OPEN CURSOR – otvorenie kurzora
FETCH CURSOR – prechádzanie riadkov kurzorom
CLOSE CURSOR – zavretie kurzora
Príkaz DECLARE CURSOR je deklaratívny, musí sa
vyskytovať pred príkazmi, ktoré sa naň odvolávajú
Deklarácia kurzora
DECLARE CURSOR <meno kurzora> IS
SELECT <príkaz>;
Otvorenie kurzora
OPEN <meno kurzora>;
- slúži na určenie aktívneho súboru riadkov pre príkaz
SELECT spojený s daným kurzorom
- OPEN len vymedzí logickú množinu riadkov,
spĺňajúcich klauzulu vo WHERE, riadky z tabuľky
nevyberá; výber realizuje FETCH
- po príkaze OPEN je kurzor umiestnený tesne pred
prvým riadkom aktívneho súboru
Výber príkazom FETCH
FETCH <meno kurzora>
INTO <zoznam hostiteľských premenných>;
hostiteľské premenné sú premenné, ktorým sa priraďujú
vybrané hodnoty z tabuľky určené v SELECT-e a musia byť
deklarované v úvode programu
hostiteľské premenné sú oddeľované čiarkami a sú spojené
s názvami stĺpcov tabuľky
kurzor sa presúva vždy len dopredu na nasledujúci riadok
v aktívnom súbore a vyberá hodnoty z tohto riadku
a priraďuje ich hostiteľským premenným
ak sa chceme vrátiť k niektorému z predchádzajúcich
FETCH-ovaných riadkov, musíme kurzor znova otvoriť a ísť
od začiatku.
Uzavretie kurzora
CLOSE <meno kurzora>;
Príklad:
Z tabuľky podnik vyberte mená všetkých
zamestnancov z Prešova pomocou kurzora a vložte ich do
tabuľky Presovcania.
DROP TABLE Presovcania;
CREATE TABLE Presovcania
(Meno_prac CHAR (20));
DECLARE
CURSOR k_Presov IS
SELECT Meno FROM Podnik
WHERE Mesto = ’Presov’;
m_prac CHAR(20);
BEGIN
OPEN k_Presov;
FOR i IN 1..100 LOOP
FETCH k_Presov INTO m_prac;
EXIT WHEN k_Presov % NOTFOUND;
INSERT INTO Presovcania (Meno_prac)
VALUES (m_prac);
COMMIT;
END LOOP;
CLOSE k_Presov;
END;
/
SELECT Meno, Mesto
FROM Podnik;
SELECT Meno_prac
FROM Presovcania;
10.Pro*C
- používa sa, ak chceme spracovávať údaje z databázovej
tabuľky pomocou jazyka C
- ak príkaz SELECT vyberie viac riadkov tabuľky, je nutné
deklarovať tzv. kurzor pre tento príkaz
- kurzor predstavuje ukazovateľ (smerník) na konkrétny riadok
špecifikovaný príkazom SELECT
- množina vybratých riadkov sa nazýva aktívny súbor
- príkazy pre prácu s kurzorom:
DECLARE CURSOR – deklarácia kurzora
OPEN CURSOR – otvorenie kurzora
FETCH CURSOR – prechádzanie riadkov
kurzorom
CLOSE CURSOR – zavretie kurzora
- príkaz DECLARE CURSOR je deklaratívny, musí sa
vyskytovať pred príkazmi, ktoré sa naň odvolávajú
- Deklarácia kurzora:
EXEC SQL DECLARE <meno kurzora> CURSOR
FOR SELECT <príkaz>;
- Otvorenie kurzora
EXEC SQL OPEN <meno kurzora>;
- slúži na určenie aktívneho súboru riadkov pre príkaz
SELECT spojený s daným kurzorom
- OPEN len vymedzí logickú množinu riadkov,
spĺňajúcich klauzulu vo WHERE, riadky z tabuľky
nevyberá; výber realizuje FETCH
- po príkaze OPEN je kurzor umiestnený tesne pred
prvým riadkom aktívneho súboru
- Výber príkazom FETCH
EXEC SQL FETCH <meno kurzora>
[FOR :host_integer]
INTO <zoznam hostiteľských premenných>;
hostiteľské premenné sú premenné v jazyku C, ktorým sa
priraďujú vybrané hodnoty z tabuľky
host_integer limituje maximálny počet riadkov prenesených
do výsledných premenných
hostiteľské premenné sú oddeľované čiarkami a sú spojené
s názvami stĺpcov tabuľky
kurzor sa presúva vždy len dopredu na nasledujúci riadok
v aktívnom súbore a vyberá hodnoty z tohto riadku a prideľuje
ich hostiteľským premenným
ak sa chceme vrátiť k niektorému z predchádza-júcich
FETCH-ovaných riadkov, musíme kurzor znova otvoriť a ísť
od začiatku.
klauzula FOR limituje počet odovzdaných hodnôt pre
spracovanie polí v príkazoch SELECT, UPDATE, DELETE,
INSERT a FETCH
- Uzavretie kurzora
EXEC SQL CLOSE <meno kurzora>;
Príklad: Vyberte mená a platy všetkých zamestnancov
z Prešova pomocou kurzora
#include <stdio.h>
EXEC SQL BEGIN DECLARE SECTION;
VARCHAR uzivatel[20];
VARCHAR heslo[20];
VARCHAR m_prac[20];
FLOAT plat;
EXEC SQL END DECLARE SECTION;
EXEC SQL INCLUDE sqlca;
main()
{
printf(“Zadajte Vase meno: \n”);
gets(uzivatel.arr);
uzivatel.len=strlen(uzivatel.arr);
strcpy(heslo.arr, “Praha“);
heslo.len=strlen(heslo.arr);
EXEC SQL WHENEVER SQL ERROR GOTO chyba;
EXEC SQL CONNECT :uzivatel IDENTIFIED
BY :heslo;
printf (“\n Pripojeny…\n”);
EXEC SQL DECLARE K_Presov CURSOR FOR SELECT
Meno, Mzda FROM Podnik
WHERE Mesto = ’Presov’;
EXEC SQL OPEN K_Presov;
EXEC SQL WHENEVER NOT FOUND GOTO
koniec_fetch;
printf (“\n Zamestnanec
Mzda \n”);
printf (“\n ------------------------------------- \n”);
/* nekonecny cyklus, predpoklada sa ine ukoncenie -
vyskok */
for(;;)
{
EXEC SQL FETCH K_Presov INTO :m_prac, :plat;
/* ukoncenie retazca nulou */
m_prac.arr[m_prac.len] = ‘\0’;
printf(“...f...“, m_prac.arr, plat);
}
koniec_fetch:
EXEC SQL CLOSE K_Presov;
EXEC SQL COMMIT WORK RELEASE;
/* odpojenie sa od ORACLE-u */
printf (“\n Prijemny zvysok dna :) \n”);
exit(0);
chyba:
printf (“\n …f…”, sqlca.sqlerrm.sqlerrmc);
EXEC SQL WHENEVER SQLERROR
CONTINUE;
EXEC SQL ROLLBACK WORK RELEASE;
exit(1);
}
11.Tlač výstupnej zostavy
- vytvorenie prehľadných výstupných zostáv je síce záležitosť
formálna, ale je to významná súčasť každého systému správy
hromadných dát
- za základné príkazy pre tlač zostáv v Oracle môžeme
považovať príkazy
COLUMN – formátovanie nadpisu a dát v stĺpci
TTITLE – popisuje nadpis na začiatku zostavy
BTITLE – popisuje zostavu na konci
BREAK – oddeľuje v zostave skupiny riadkov
COMPUTE – počíta v zostave čiastkové a úplné súčty
- tieto formátovacie príkazy nepatria do jazyka SQL, ale do
pomocných programových prostriedkov Oracle, ktoré sú
označované ako systém UFI (User Friendly Interface). Preto
príkaz COLUMN je nasledovaný príkazom RUN
- Príklad: Vytlačte výstupnú zostavu košičanov, kde v hlavičke
namiesto mena pracovníka uvediete text zamestnanec
COLUMN Meno HEADING Zamestnanec
RUN
SELECT Meno, Adresa, Mzda
FROM Podnik
WHERE Mesto = ‘Kosice’;
- klauzula HEADING vlastne vytvára alias pre názov stĺpca
- ak by sa alias skladal z viacerých slov, musí byť v apostrofoch
a musí byť pridaný aj formát
Príklad:
COLUMN Meno HEADING ‘Meno zamestnanca’ A16
RUN
SELECT Meno, Adresa, Mzda
FROM Podnik
WHERE Mesto = ‘Kosice’;
- Syntax príkazov
COLUMN <meno stĺpca> HEADING <hlavička> <vzor formátu>
TTITLE <nadpis zostavy>
BTITLE <text na konci zostavy>
BREAK ON <skupina zázn rovnakej hodn. kľúča> SKIP <počet
riadkov>
COMPUTE <funkcia> OF <názov stĺpca> ON <skupina zázn. rovnakej
hodnoty kľúča>;
funkcia môže byť jedna z agregovaných funkcií SUM,
AVG, MAX, MIN, COUNT, NUMBER, STD, VAR
skupina záznamov rovnakej hodnoty kľúča je napr.
rovnaký názov katedry alebo mesta
ak dáme do záhlavia zvislú čiaru do reťazca, zapíšu sa
jeho časti pod seba
formátovacie príkazy zostávajú v platnosti implicitne;
ak ich chceme zrušiť, musíme použiť príkaz CLEAR
napr. CLEAR BREAK, CLEAR COMPUTE alebo
prepísať novým
Vzory formátov
Príklad:
Výstupná zostava miezd na fakulte.
COLUMN Meno HEADING ´Meno|zamestnanca´ FORMAT A14
TTITLE ´MZDOVÉ NÁKLADY|prehľad´
BTITLE ´Fakulta elektrotechniky a informatiky´
BREAK ON Katedra SKIP 2
COMPUTE SUM OF Mzda ON Katedra
RUN
SET PAGESIZE 36
SET NEWPAGE 0
SELECT Katedra, Meno, ROUND(Mzda)
FROM Fakulta
ORDER BY Katedra;
Page 1
MZDOVÉ NÁKLADY
Prehľad
Katedra Meno Mzda TTITLE
zamestnanca
KKUI Maly Jan 7 000
KKUI Biely Igor 14 000
.
.
KKUI Dodaný Pavol 21 000
***********************************************
SUM 145 000 COMPUTE SUM
BREAK....SKIP 2
KPI Veľký Ján 7 000
KPI Krajný Igor 14 000
.
.
KPI Dolný Pavol 21 000
***********************************************
SUM 185 000
.
.
Fakulta elektrotechniky a informatiky BTITLE
12. Jazyk PL/SQL
- je to rozšírenie jazyka SQL o procedurálne rysy
- PL/SQL umožňuje kombináciu štandardných príkazov SQL
s procedurálnymi prvkami
- poskytuje prostriedky pre definovanie a spúšťanie jednotiek
PL/SQL ako sú:
procedúry
funkcie
balíky (package)
- Jazyk zahŕňa tieto prvky:
blok
začína príkazom BEGIN
končí príkazom END
premenné a konštanty
môžu sa používať nielen v ne-SQL príkazoch, ale aj
v štandardných príkazoch SQL
typy objektov SQL
podmienené vetvenie
IF, THEN, ELSIF, ELSE
cyklické (iteratívne) spracovanie
LOOP – opakované spracovanie príkazov usporiad.
do bloku
príkaz GOTO
kurzor, ktorý identifikuje aktuálny riadok v aktuálnom
výbere definovanom SELECT-om SQL, ktorý vedie na
viacriadkový výber
ošetrenie výnimočných resp. neštandardných stavov –
výnimiek
- Syntax príkazu IF
BEGIN
IF <podmienka> THEN
...;
ELSE
...;
END IF;
END;
- Syntax príkazu FOR
BEGIN
FOR i IN 1 .. 10 LOOP
...;
END LOOP;
END;
- Štruktúra bloku
blok je rozčlenený na:
deklaračnú časť – voliteľná časť
výkonné príkazy – povinná časť
ošetrenie výnim. stavov – voliteľná časť
DECLARE
<deklarácie>;
BEGIN
<výkonné príkazy>;
[EXCEPTION
<výkonové príkazy pre ošetrenie výnimoč. stavov>]
END;
Výnim. stavy:
INVALID_NUMBER neplatné číslo alebo údaje nemôžu byť na číslo
prekonvertované
NO_DATA_FOUND nie sú nájdené žiadne záznamy
TOO_MANY_ROWS dotaz vrátil viac ako jeden záznam
VALUE_ERROR problém s mat. funkciou, napr. odmocnina zo záp. čísla
ZERO_DIVIDE delenie nulou
ak nie je použitá deklaračná časť, nie sú povinné
zátvorky BEGIN a END
blok môže tvoriť samostatnú programovú jednotku, alebo
byť anonymným blokom
Pozn. Anonymný blok je nepomenovaný blok, použiteľný
len raz, v mieste svojej definície.
Príklad:
Uložte do tabuľky Parnost 10 záznamov s hodnotou
indexu cyklu, s hodnotou premennej x a textom, či je
index cyklu párny alebo nie.
CREATE TABLE Parnost
(prem1 NUMBER(2),
prem2 NUMBER(5),
prem3 CHAR(12));
DECLARE
x NUMBER := 100;
BEGIN
FOR i IN 1 .. 10 LOOP
IF MOD(i, 2) = 0 THEN
INSERT INTO Parnost
VALUES (i, x, ‘je parne’);
ELSE
INSERT INTO Parnost
VALUES (i, x, ‘je neparne’);
END IF;
x := x + 100;
END LOOP;
COMMIT;
END;
/
SELECT * FROM Parnost;
Príklad:
Vyberte z tabuľky Podnik a vložte do tabuľky Super
päť najlepšie platených zamestnancov
DROP TABLE Super;
CREATE TABLE Super
(naj_cislo NUMBER(5) NOT NULL UNIQUE,
naj_meno CHAR(20),naj_mzda NUMBER(8,2));
DECLARE
CURSOR c1 IS
SELECT Ev_cislo, Meno, Mzda FROM Podnik
ORDER BY Mzda DESC;
n_meno CHAR(20);
n_evcis NUMBER(5);
n_mzda NUMBER(8,2);
BEGIN
OPEN c1;
FOR i IN 1 .. 5 LOOP
FETCH c1 INTO n_evcis, n_meno, n_mzda;
EXIT WHEN c1 % NOTFOUND;
/*pre prípad, že požad. počet je vyšší ako počet prac.*/
INSERT INTO Super
VALUES(n_evcis, n_meno, n_mzda);
COMMIT;
END LOOP;
CLOSE c1;
END;
/
SELECT * FROM Super;
Podprogram je pomenovaný blok, ktorý môže byť opakovane
volaný a pritom preberať skutočné parametre
štruktúra podprogramu je zhodná so štruktúrou bloku
podprogramy môžu byť dvoch typov:
procedúry
funkcie
viac procedúr a funkcií sa môže združovať do logických
celkov – balíkov (package)
Procedúra
- jej volanie spôsobí určitú akciu
Syntax procedúry:
PROCEDURE <meno proc.>[(parameter [, param.]…)] IS/AS
<lokálne deklarácie>;
BEGIN
<výkonné príkazy>;
[EXCEPTION <ošetrenie výnimiek>]
END [<meno procedúry>];
Parametre sa píšu nasledovne:
parameter :=meno [IN | OUT | IN OUT] {BOOLEAN |
CHAR | NUMBER | DATE}
- Príklad: Vytvorte procedúru, ktorá vyradí zamestnanca
PROCEDURE vyrad_zam (cislo NUMBER) IS
BEGIN
DELETE FROM Podnik
WHERE Ev_cislo = cislo;
END;
Funkcia
je podprogram, ktorý vracia hodnotu
oproti procedúre obsahuje klauzulu RETURN,
ktorá špecifikuje typ vrátenej hodnoty
Syntax funkcie:
FUNCTION <meno funkcie> <[(parameter [, par]…)]
RETURN <dátový typ> IS/AS
[<lokálne deklarácie>];
BEGIN
<výkonné príkazy>;
[EXCEPTION <ošetrenie výnimiek>]
END [<meno funkcie>];
parameter má rovnakú syntax ako v procedúre
Príklad:
Overte či mzda pracovníka určitej profesie je v mzdových
hraniciach, ktoré sú uvedené v tabuľke
Mzdy(Profesia, d_hranica, h_hranica)
FUNCTION Over(plat NUMBER, povolanie CHAR)
RETURN BOOLEAN IS
min_mzda NUMBER;
max_mzda NUMBER;
BEGIN
SELECT d_hranica, h_hranica
INTO min_mzda, max_mzda FROM Mzdy
WHERE Profesia = povolanie;
RETURN (Plat <= max_mzda) AND (Plat >= min_mzda);
END Over;
Volanie funkcie>
IF over(novy_plat, nove_povolanie) THEN
...;
ELSE
...;
END IF;
- Vytvorené podprogramy môžu byť samostatne uložené
v databáze, ktoré budú pripravené pre ktorúkoľvek aplikáciu,
ktorá je napojená na databázu.
- Pre ich vytvorenie sa používa príkaz
CREATE PROCEDURE alebo CREATE FUNCTION
Volanie samostatných procedúr:
EXECUTE <meno>(skutočné parameter);
Napr.
EXECUTE vyrad_zam(623);
Balíky– PACKAGE
podprogramy určené na uloženie do databázy je možné
sústreďovať do logicky príbuzných modulov – package
má dve časti
špecifikácia balíka
obsahuje deklaráciu podprogramov, kurzorov,
atď.
telo balíka
plne definuje podprogramy
Syntax:
PACKAGE <meno> IS/AS
<špecifikácia objektov v balíku>;
END [<meno>];
PACKAGE BODY <meno_to isté> IS
<deklarácia lokálnych typov a objektov>;
<telá podprogramov>;
[BEGIN
- - inicializačné príkazy]
END [<meno>];
Pozn. Balíky je možné vytvárať interaktívne v SQL*Plus
Príkazmi:
CREATE PACKAGE
CREATE PACKAGE BODY
Príklad: Vytvorte balík obsahujúci kurzor a dve procedúry
pre vloženie a vymazanie pracovníka
CREATE PACKAGE podnik_operacie IS - - specifikacie
TYPE zaznam_prac IS RECORD(Evcis
NUMBER, Plat NUMBER);
CURSOR k_mzdy RETURN zaznam_prac;
PROCEDURE vloz_prac(Evcislo NUMBER,
Priezvisko CHAR, Meno CHAR,Mzda NUMBER) ;
PROCEDURE vymaz_prac(Evcis NUMBER);
END podnik_operacie;
CREATE PACKAGE BODY podnik_operacie AS
CURSOR k_mzdy RETURN zaznam_prac IS
SELECT Ev_cislo, Mzda FROM Podnik
ORDER BY Mzda DESC;
PROCEDURE vloz_prac(Evcislo NUMBER,
Priezvisko CHAR, Meno CHAR, Mzda
NUMBER) IS
BEGIN
INSERT INTO Podnik (Ev_cislo,
Priezvisko, Krst_meno, Mzda)
VALUES (Evcislo, Priezvisko, Meno, Mzda);
END vloz_prac;
PROCEDURE vymaz_prac(Evcis NUMBER) IS
BEGIN
DELETE FROM Podnik
WHERE Ev_cislo = Evcis;
END vymaz_prac;
END podnik_operacie;
Syntax volania balíka:
EXECUTE <meno balíka>.<meno proc. | meno funkcie>
(<skutočné parametre>);
Používa sa bodková notácia s prefixom, ktorým je meno
balíku, v ktorom je procedúra umiestnená.
Napr.
Podnik_operacie.vloz_prac(skutočné parametre)
V prompt-režime SQL*Plus:
SQL>EXECUTE
Podnik_operacie.vloz_prac(126,´Maly´,´Jan
´,16400);
V ProC programe:
EXEC SQL EXECUTE
BEGIN
Podnik_operacie.vloz_prac(:cislo, :meno, ...);
END
END-EXEC;
Systémový katalóg
- Každý systém riadenia databázy obsahuje tzv. systémový
katalóg podávajúci informácie o relačnej schéme databázy,
t.j. o tabuľkách, indexoch, a pod.
- Systémový katalóg obsahuje napríklad relácie
SYSTABLES(Name, Creator, ColCount, ...)
SYSCOLUMNS(Name, TbName, ColType, ...)
SYSINDEXES(Name, TbName, Creator, ...)
- Ak správca DBS chce zistiť, v ktorých tabuľkách sa vyskytuje
stĺpec s názvom Mesto:
-
SELECT TbName FROM SYSCOLUMNS
WHERE Name = ‘Mesto’;
- Používateľovi je k dispozícii rad pohľadov o jeho tabuľkách
a objektoch v DATA DICTIONARY (slovník dát)
- Tieto pohľady majú prefix vo svojom mene, ktorý vyjadruje,
komu sú informácie určené
-
prefixy:
USER_ - informácie len o tom, čo užívateľ vlastní
ALL_ - ako USER_, naviac informácie o tom, čo
je užívateľovi sprístupnené
DBA_ - informácie o všetkých objektoch v databáze
- Existuje pohľad prefix_OBJECTS na všetky databázové
objekty
- Výpis štruktúry:
SQL> DESC USER_OBJECTS;
Name
Type
OBJECT_NAME
VARCHAR2(128)
OBJECT_ID
NUMBER
OBJECT_TYPE VARCHAR2(13)
......
- Výpis aktuálneho obsahu pre používateľa:
SQL> SELECT Object_name, Object_type
FROM USER_OBJECTS;
Object_name
Object_type
Podnik
Table
P_podnik View
Dovolenka
Table
........
- Štruktúra tabuľky:
SQL> DESC Podnik;
Name
Null?
Type
Evcis
Not null NUMBER(5)
Meno
VARCHAR(10)
Priezvisko
VARCHAR(15)
........
- Konkrétny obsah
SQL> SELECT * FROM Podnik;
Pohľady pre používateľa:
USER_TABLES
- zoznam tabuliek používateľa
USER_VIEWS
- “ pohľadov “
USER_INDEXES
- “ ind. tabuliek “
USER_TAB_COLUMNS - “ stípcov tabuliek, pohľadov
1
Štruktúra databázového systému
DBS sa skladá z programových modulov:
prekladač jazyka DML
prekladá príkazy jazyka DML uvedené
v hostiteľskom jazyku do volania procedúr v tomto
jazyku
prekladač jazyka DDL
prekladá definície dát v jazyku DDL do tabuliek
v slovníku dát (data dictionary)
procesor dotazovacieho jazyka
prekladá dotazy z dotazovacieho jazyka do tvaru,
ktorému rozumie manažér databázy
manažér databázy
sprostredkuje dotazy preložené z jazyka DML alebo
dotazovacieho jazyka
dotazy prevedie na postupnosť príkazov pre prácu
so súbormi, ktoré vykoná tzv. manažér súborov
manažér súborov
vykonávateľ
ovláda alokáciu miest údajov na disku
pracuje už priamo s dátami v súbore
súbory dát
obsahujú vlastné údaje
Pozn.
Jazyk SQL je jazyk dotazovací. Je deklaratívny; popisuje len akcie,
nie spôsob ich realizácie (čo sa má vykonať, nie ako)
Celková štruktúra databázového systému
1.1 Systém riadenia bázy dát
SRBD je programový systém umožňujúci používateľovi
pracovať s dátami v báze dát
Z funkčného hľadiska umožňuje:
definovať dáta v báze dát
ukladať dáta do databázy
vyberať dáta z databázy
umožniť výber viacerým užívateľom
udržiavať dáta v aktuálnom stave
chrániť dáta pred zneužitím alebo zničením.
naivný
používateľ
aplikačný
programátor
príležitostný
používateľ
správca
databázy
aplikačný
program
hostiteľský
jazyk
dotazovací jazyk
jazyk DDL –
schéma
prekladač DML
procesor
dotazovacieho
jazyka
prekladač DDL
preložený
program
manažér
databázy
manažér
súborov
súbory dát
slovník dát
konceptuálna
úroveň
systém
riadenia dát
užívateľská
úroveň
fyzická
úroveň
Základné funkcie SRBD sa delia na:
riadiace funkcie pre kontrolu a riadenie systému
dekóduje a kontroluje príkazy systému
poskytuje informácie o chybách vo formulácii
požiadaviek
realizuje prevzatie riadenia po ukončení činnosti
výkonovej funkcie
výkonové funkcie
umožňujú používateľovi definovať štruktúru dát,
ukladať, vyberať, aktualizovať dáta, chrániť ich
proti zneužitiu a znehodnoteniu
Moduly SRBD
v operačnej pamäti sú z modulov permanentne uložené iba
dva: (ostatné sú uložené na disku)
riadiaci (komunikačný) modul
zabezpečuje kontrolu a dekódovanie príkazov
používateľa
zabezpečuje vyvolanie a prenesenie do operačnej
pamäte potrebného výkonného modulu
informuje užívateľa pomocou diagnostických
výpisov o priebehu prác a o chybách, ktoré vznikli
havarijný a informačný modul
priebežne podáva informácie o prevádzke
databázového systému
vytvára kópie niektorých častí bázy dát pre prípadnú
rekonštrukciu
rieši situácie, keď došlo k porušeniu pravidiel
logického zabezpečenia dát
1.2 Báza dát
BD je komplex dát, medzi ktorými existujú vzťahy a ktoré sú prístupne
výlučne pomocou SRBD.
Kritériá bázy dát
dosiahnuteľnosť dát
neredundantnosť dát
viacnásobná využiteľnosť
konzistentnosť dát
integrita bázy dát
nezávislosť dát na programoch a naopak
Báza dát :
operatívna BD
obsahuje údaje o súčasnom stave systému
historická BD
obsahuje údaje o minulosti systému
Presunu dát z operačnej bázy dát do historickej sa hovorí aj
zabúdanie dát:
presun dát je vykonaný prostredníctvom SRBD pri určitých
udalostiach definovaných užívateľom
je realizovaný určitými transformáciami, ktoré umožňujú
realizovať plánovaný spôsob „zabúdania“
operatívna báza dát
báza dát
historická báza dát
HBD1
HBD2
HBD3
T12
T23
T1
T3
1.3 Architektúra databázy
Pohľad na dáta v DBS má tri druhy abstrakcie → trojúrovňová
architektúra bázy dát
fyzická úroveň
je najnižšia úroveň
je na nej detailne popísané ako sú dáta uložené na disku
konceptuálna úroveň
popisuje sa na nej aké dáta sú v databáze uložené a ako
dáta navzájom súvisia
túto úroveň používa správca databázového systému
popis databázy na konceptuálnej úrovni sa nazýva
schéma
schéma obsahuje popis všetkých tabuľkových údajov,
typov, vzťahov, ktoré v databáze sú
schéma databázy existuje hneď po svojej definícii, aj keď
v databáze nie sú žiadne dáta
vloženie konkrétneho objektu sa nazýva instancia
Na úrovni schémy databázy sa pracuje s pojmami:
typ objektu
vlastnosti typu objektu
vzťahy medzi typmi objektov
- schéma databázy sa mení zriedkavo
- menia počty instancií jednotlivých typov, samotné objekty
a aj instancie vzťahov medzi konkrétnymi objektmi
Príklad
typ objektu: učiteľ, predmety, miestnosti, ...
vlastnosti objektov: rodné číslo, meno, priezvisko, ...
vzťahy: učiteľ – predmet, ...
Instancie, t.j. konkrétni učitelia, predmety, atď. sa môžu
meniť, instancia vzťahu tiež, t.j. učiteľ každý rok môže učiť iný
predmet, ale základná štruktúra BD, daná schémou, zostáva.
užívateľská úroveň
popisuje sa na nej len tá časť databázy, s ktorou
pracuje používateľ
tá časť schémy, ktorú používa daný používateľ sa
nazýva subschéma
subschém je toľko, koľko je používateľov
1.3 Nezávislosť dát
Pod nezávislosťou dát rozumieme možnosť meniť definíciu
dát na nižšej úrovni abstrakcie bez toho, aby sa ovplyvnila
definíciu dát na vyššej úrovni abstrakcie.
Jedná sa o dve úrovne nezávislosti dát:
fyzická nezávislosť dát
umožňuje zmeniť fyzickú úroveň popisu dát bez toho,
aby bolo potrebné prepisovať aplik. programy
napr.: nahradenie sekvenčného súboru dát súborom
s priamym prístupom
logická nezávislosť dát
umožňuje zmeniť konceptuálnu úroveň popisu dátbez
toho, aby sa upravovali aplikačné programy, ktoré
s týmito dátami pracujú
napr.: zmena schémy tým, že sa do tabuľky pridajú nové
vlastnosti, čo neovplyvní pôvodné aplik. programy
2 Modely dát
Model dát je súhrn prostriedkov na popis dát na konceptuálnej
úrovni a to pre:
a) samotný popis dát
b) popis väzieb medzi dátami
c) popis obmedzení pre jednotlivé dáta
a) Základný pojem pre popis dát - entita
je to objekt, ktorý môže existovať sám o sebe
a má tú vlastnosť, že ho dokážeme odlíšiť od iného
objektu toho istého typu
Atribút je vlastnosť objektu.
Vytvorenie modelu na konceptuálnej úrovni vyžaduje:
- vybrať typy objektov
- samotné objekty
- a ich vlastnosti
Doména je množina všetkých možných hodnôt atribútu.
Rôzne atribúty môžu mať rovnakú doménu.
b) Väzby (vťahy) medzi dátami (relationship)
vyjadrujú vzťahy medzi objektmi a
vlastnosti týchto vzťahov.
c) Obmedzenie dát
znamená rešpektovanie hraníc, ktoré sú dané
sémantikou dát
napr.: mesiac v roku je číslo z intervalu< 1;12>.
Modely dát rozdeľujeme na:
objektovo – orientované (napr. model E-R)
záznamovo – orientované (relačný, sieťový hierarchický)
fyzické modely (implementácia na najnižšej úrovni)
2.1 Model E – R
Model E-R (Entity – Relationship) je predstaviteľ objektovo –
orientovaných modelov:
- popisuje objekty a ich vzťahy
- má podobný význam ako vývojový diagram v programovaní
pre návrh algoritmu
- grafické značky:
Príklad
Šipka na spojnici vzťahu sa kreslí smerom, ktorým je zobrazenie
jednoznačné
os_cislo
meno
učiteľ
učí
kód
názov
predmet
ev_cislo
meno
zákazník
vlastní
číslo
výška
konto
n
1
znázorňuje množinu objektov
znázorňuje vzťah
znázorňuje atribút
Databáza vytvorená pomocou modelu E – R je reprezentovaná množinou
tabuliek
vzťahy medzi objektmi sú matematicky popísané ako relácie. Sú to n-
tice objektov, ktoré vzťah tvoria
o vzťahu hovoríme často ako o zobrazení objektov (vzorov) do
obrazov
zo sémantiky vzťahu vyplýva jeho kardinalita, čo je počet obrazov,
do ktorých sa zobrazí jediný vzor.
T
ypy vzťahov:
o 1 → 1 jeden vzor jeden obraz
napr.: konto – zákazník
o 1 → n jeden vzor viac obrazov
napr.: zákazník – konto
o m → 1 viac vzorov na jeden obraz
napr: výrobcovia – určitý výrobok
o m → n viac vzorov na viac obrazov
zahŕňa jeden vzor viac obrazov
zahŕňa viac vzorov jeden obraz
napr: výrobcovia – určité výrobky
ev_cislo meno
číslo
výška
Kľúč
o objekty i vzťahy medzi nimi identifikujeme t.j.
jednoznačne odlišujeme pomocou kľúčov
o kľúč môže byť jeden alebo množina atribútov, ktorých
hodnoty umožnia jednoznačne odlíšiť objekty
o podľa toho, koľko má kľúč atribútov rozoznávame
kľúče:
jednoduché – majú len jeden atribút
zložené – majú množinu atribútov (mala by byť
minimálna)
Všetky možnosti vytvorenia kľúča tvoria množinu kľúčov
jej prvok sa nazýva kandidát kľúča
vybraný kľúč sa nazýva primárny
ostatné kľúče sa nazývajú sekundárne
Môžu existovať objekty, pri ktorých nie je možné vytvoriť
primárny kľúč.
Z tohto hľadiska delíme objekty na:
silné entity - objekty, ktoré kľúč majú a zodpovedajú im
dominantné objekty
slabé entity - objekty, ktoré nemajú kľúč; týmto
zodpovedajú podriadené objekty
- V prípade slabých entít sa primárny kľúč vytvorí
z primárneho kľúča jeho dominantného objektu a vhodne
zvoleného atribútu podriadeného objektu, ktorý sa nazýva
diskriminátor
- Pre slabé entity je nutné do tabuľky pridať stĺpce tvoriace
primárny kľúč dominantného objektu
- Ak reprezentujeme vzťah tabuľkou, bude táto obsahovať
n – tice primárnych kľúčov objektov, ktoré vzájomne
priraďuje.
- Okrem toho môže tabuľka môže obsahovať stĺpce popisujúce
vlastnosti vzťahov
- Model E – R slúži len pre účely návrhu databázy
vhodná realizácia sa vykonáva pomocou systému
riadenia bázy dát a to pomocou niektorého zo záznamovo
orientovaných modelov dát
realizáciou modelu E – R vznikne schéma databázy, čo
je prázdna ale naformátovaná báza dát pripravená pre
ukladanie dát.
2.2 Relačný model
Je záznamovo orientovaný model, kde
- záznam = riadok v tabuľke
- súbor = celá tabuľka
- báza dát = množina tabuliek
Relácia – def:
Nech
sú ľubovoľné množiny; n–árna relácia
je množina usporiadaných n–tíc. Je to podmnožina
karteziánskeho súčinu
.
Relácia
Záznam :
Pre zadanie relácie je potrebné zadať:
konečnú množinu atribútov kde atribúty
doménu
pre každý atribút
podmnožinu karteziánskeho súčinu domén t.j.
vlastnú reláciu ( hodnoty polí tvoriacich záznamy)
Počet atribútov udáva árnosť relácie:
unárna relácia
napr.: Olympiáda1(Mesto)
binárna relácia
napr.: Olympiáda2(Mesto, Štát)
ternárna relácia
napr.: Olympiáda3(Mesto, Štát, Rok)
atď.
Relácia je reprezentovaná tabuľkou s nasledujúcimi
vlastnosťami:
Každému prvku relácie zodpovedá jediný riadok
tabuľky. Žiadne dva riadky nie sú identické.
relácia je množina a daný prvok množiny sa v nej
vyskytuje vždy iba raz
Stĺpec s určitým atribútom
obsahuje hodnoty len
z jeho domény
Schéma relačnej databázy je daná popisom štruktúry
všetkých tabuliek a definíciou ich domén atribútov
Pre manipuláciu s dátami v databáze relačného typu sú
vypracované jazyky typu DML a dotazovacie jazyky.
Základné operácie nad tabuľkami:
selekcia - výber riadkov tabuľky, ktorých atribúty
spĺňajú určitú podmienku
projekcia - výpis zvolených stĺpcov tabuľky
spájanie dvoch tabuliek - karteziánsky súčin relácií
1.tab. 2. tab.
1. záznam
2. záznam
3. záznam
4. záznam
4 x 3 = 12
1. záznam 1.tab. 1. záznam 2.tab.
1. záznam 1.tab. 2. záznam 2.tab.
1. záznam 1.tab. 3. záznam 2.tab.
2. záznam 1.tab. 1. záznam 2.tab.
2. záznam 1.tab. 2. záznam 2.tab.
2. záznam 1.tab. 3. záznam 2.tab.
3. záznam 1.tab. 1. záznam 2.tab.
...
...
...
...
...
...
4. záznam 1.tab. 2. záznam 2.tab.
4. záznam 1.tab. 3. záznam 2.tab.
1. záznam
2. záz.
3. záz.
pri spájaní tabuliek sa takmer vždy uvažuje aj určitá
selekcia s podmienkou, ktorú nazývame theta
spojenie a ktoré sa vykonáva súčasne so spojením
tabuliek
najčastejšie sa spájajú záznamy o rovnakých
objektoch – prirodzené spojenie
zjednotenie
výsledkom je tabuľka záznamov objektov, ktoré sa
vyskytujú v jednej alebo v druhej tabuľke alebo
v oboch
napr. zákazníci, ktorí majú pôžičku alebo konto alebo obe
prienik
výsledkom je tabuľka záznamov z objektov, ktoré
sa nachádzajú v oboch tabuľkách
napr. zákazníci, ktorí majú aj pôžičku aj konto
rozdiel
výsledkom je tabuľka záznamov objektov, ktoré sa
vyskytujú v prvej tabuľke prvej ale nevyskytujú sa
v druhej tabuľke
napr. zákazníci, ktorí majú pôžičku ale nemajú konto
Realizácia operácií prieniku, zjednotenia a rozdielu tabuliek
sa v DBS realizuje pomocou logických operátorov : OR, AND,
NOT AND používaných v logických výrazoch, ktoré popisujú
podmienku selekcie
2.3 Návrh štruktúry relačnej databázy
Štruktúru tabuľky nie je možné navrhnúť ľubovoľne, pretože
sa môže stať, že:
dáta budú v tabuľke uvedené opakovane
niektoré informácie nebude možné zobraziť
niektoré informácie sa môžu pri práci s tabuľkou stratiť.
Príklad:
Výrobca
Adresa
Výrobok Množstvo
ZŤS
Košice
hriadeľ
150
MEZ
Michalovce rotor
180
ZŤS
Košice
koleso
260
ZŤS
Košice
rotor
190
MEZ
Michalovce stator
200
Dekompozícia-odstránenie redundancie:
Výrobca
Adresa
ZŤS
Košice
MEZ
Michalovce
Zlá dekompozícia:
Výrobca Adresa
ZŤS
Košice
MEZ
Michalovce
Otázka:
Koľko rotorov dodáva MEZ?
Nezodpovedateľná!
Výrobca
Výrobok Množstvo
ZŤS
hriadeľ
150
MEZ
rotor
180
ZŤS
koleso
260
ZŤS
rotor
190
MEZ
stator
200
Výrobca Výrobok
ZŤS
hriadeľ
MEZ
rotor
ZŤS
koleso
ZŤS
rotor
MEZ
stator
Výrobok Množstvo
hriadeľ
150
rotor
180
koleso
260
rotor
190
stator
200
Dôvod spočíva v tom, že dáta sú na sebe sémanticky závislé.
Aby sme tomu predišli, je nutné zvoliť vhodnú formu reprezentácie danej
relácie. Tabuľky musia spĺňať podmienky tzv. normálnych foriem relácie.
Normálne formy relácie
1. NF
Relácia je v prvej normálnej forme, ak hodnoty všetkých jej
atribútov sú atomické, t.j. prvkom domény nie je pole.
Ak relácia nie je v prvej normálnej forme, rieši sa to
dekompozíciou tabuľky tak, že pre každý neatomický
atribút vytvoríme novú reláciu, do ktorej pridáme
z pôvodnej relácie atribút zaisťujúci identifikáciu
Zamestnanci
Ev_cislo
Meno
Poc_deti Mena_deti
Mzda
333
Jan,Marka
Pracovnici
Deti
Ev_cislo Meno
Poc_deti Mzda
333
2. NF
Príklad- tab. Ponuka
Kľúč:{Výrobca,Výrobok} Aké množstvo hriadelí dodáva ZŤS?
Výrobca
Adresa
Výrobok Množstvo
ZŤS
Košice
hriadeľ
150
MEZ
Michalovce rotor
180
ZŤS
Košice
koleso
260
VSŽ
Košice
hriadeľ
350
MEZ
Michalovce stator
200
VSŽ prestane vyrábať hriadele- zruší sa záznam
Dopad: stratí sa informácia o adrese VSŽ
Dôvod: Množstvo závisí → na celom kľúči {Výrobca,Výrobok} ALE
Adresa → závisí len na Výrobca t.j. časti kľúča
Ev_cislo Meno_dietata
333
Jan
333
Marka
Relácia je v druhej normálnej forme, ak je v prvej
normálnej forme, v ktorej všetky sekundárne atribúty úplne
funkčne závisia od primárnych atribútov
ak atribút relácie závisí na celom kľúči K a nezávisí
na žiadnej jeho podmnožine, hovoríme o úplnej
funkčnej závislosti
atribút je primárny, ak sa vyskytuje aspoň v jednom
kľúči relácie R, všetky ostatné sú sekundárne
ak nie je tabuľka v druhej normálne forme, tak to
riešime dekompozíciou danej relácie a to tak, aby
v každej relácii boli sekundárne atribúty závislé
úplne na primárnom
relácia je v tretej normálnej forme, ak je v druhej
normálne forme a naviac platí, že množina všetkých
sekundárnych atribútov je nezávislá
žiadny sekundárny atribút nesmie závisieť na
niektorom z neprimárnych atribútov
riešime to pomocou dekompozície na relácie stupňa
dva, ktoré z princípu nemôžu obsahovať tranzitívne
závislosti
Sieťový model
-
v relačnom modeli sú objekty a vzťahy realizované pomocou tabuliek
-
v sieťových modeloch sú objekty realizované tabuľkami, ale vzťahy medzi objektmi sú reprezentované spojkami – odkazmi
-
ak je vzťah binárny, tak sa odkazy umiestňujú priamo do záznamov popisujúcich objekty
vzťah jeden zákazník vlastní jedno konto
vzťah jeden zákazník vlastní viac kont
zákazníci
kontá
-
v prípade viacárneho vzťahu sa vytvorí zvláštny záznam, ktorý obsahuje okrem kľúča aj n – ticu odkazov
-
má priame prostriedky len pre zobrazenie 1 – 1 a 1 – n
-
pre vzťahy typu n – m sa používajú zvláštne záznamy so smerníkmi
Hierarchický model
-
zjednodušený sieťový model
-
zatiaľ čo v sieťovom modeli môže mať jeden záznam viacerých vlastníkov, v hierarchickom modeli môže mať iba jediného vlastníka
(rodiča)
-
vzťah typu 1 – 1 je interpretovateľný bez problémov
-
vzťah 1 – n je interpretovateľný tiež bez problémov
-
problémy s interpretáciou nastávajú pri vzťahoch n – m
musíme ho rozložiť na dve časti
n – 1
m – 1
napríklad autori – publikácie musíme rozložiť na
autori – jedna publikácia
publikácie – autor
Štruktúra dát
Položky a záznamy
-
prvok štruktúry dát je záznam
-
záznam je zložený z položiek popisujúcich daný objekt
položka môže obsahovať
číslo
textový reťazec
referenciu na iný záznam
s relatívnou pamäťovou adresou
zákazníci
kontá
zákazníci
kontá
banky
__kľúče
A1
autori – jedna publikácia
A2
A3
P1
P2
P3
P1
P4
P5
P1
publikácie – jeden autor
P2
P3
P4
P5
A1
A2
A1
A2
A3
A3
s absolútnou pamäťovou adresou
s adresou začiatku záznamu na ktorý sa odvolávame
-
delenie záznamov podľa homogénnosti
homogénne
obsahujú položky rovnakého typu
heterogénne
obsahujú položky rôznych typov
-
delenie záznamov podľa dĺžky
s pevnou dĺžkou
počas života sa ich dĺžka nemení
s pohyblivou dĺžkou
počas života sa dĺžka záznamu mení
-
v prípade záznamov s pohyblivou dĺžkou môže byť informácia o konci uložená rôznymi spôsobmi
je uvedená dĺžka daného záznamu hneď na jeho začiatku záznamu
na začiatku záznamu je uvedená adresa záznamu nasledujúceho
záznam sa ukončí zvláštnym znakom označujúcim koniec záznamu
Logická a fyzická štruktúra dát
-
štruktúra dát je súhrn pravidiel a obmedzení, ktoré ukazujú vzťahy medzi jednotlivými organizačnými úrovňami dát
-
logická štruktúra je užívateľské vyjadrenie všeobecnej definície – pohľad užívateľa na ...
-
fyzická štruktúra predstavuje uplatnenie konkrétnych počítačových a programových techník, ktoré realizujú logickú štruktúru dát
-
druhy štruktúr dát
môžu nastať tieto vzťahy
1 – 1
1 – n
n – 1
n – m
na základe týchto vzťahov sa odvinuli rôzne štruktúry
1 – 1 – sekvenčná štruktúra
1 – n – stromová alebo nelineárna štruktúra
n – 1 – stromová alebo nelineárna štruktúru
n – m – sieťová štruktúra
pre lineárnu štruktúru dát platí, že všetky sú na rovnakej úrovni bez akéhokoľvek vzťahu nadriadenosti a podriadenosti
v nelineárnej štruktúre dát majú prvky rôznu hierarchickú úroveň a obsahujú vzťahy nadriadenosti a podriadenosti
Sekvenčná štruktúra dát
-
je lineárna
-
prvky na jednej úrovni majú vzťah iba k predchádzajúcemu alebo nasledujúcemu prvku
-
zobrazenie sekvenčnej štruktúry dát grafom
-
ak existuje vzťah od nasledujúcemu k predošlému, jedná sa o obojsmernú sekvenčnú štruktúru
-
ak existuje vzťah posledného k prvému, tak sa jedná o kruhovú štruktúru
-
uzly štruktúr sa ukladajú do pamäti
fyzicky bezprostredne za sebou
na ľubovoľné miesta, s tým že je uvedená referencia na následníka
-
pamäťová reprezentácia
radenie dát v tabuľke
uzly sú uložené v pamäti bezprostredne za sebou
vzťah predchádzajúceho a nasledujúceho je vytvorený iba fyzickým umiestnením tohto záznamu
ak sa jednotlivé záznamy usporiadajú (zostupne, alebo vzostupne) podľa hodnoty primárneho kľúča, hovoríme
o riadení dát podľa daného kľúča
nevýhoda: prístup k požadovanému záznamu je možný iba cez všetky predchádzajúce záznamy
index – sekvenčná reprezentácia dát
predpokladá a aj vyžaduje predchádzajúce radenie východzieho súboru podľa vzrastajúcej hodnoty primárneho kľúča
jeho súčasťou je tiež indexačná tabuľka, ktorá obsahuje pre každú stopu jej adresu a najvyššiu hodnotu primárneho
kľúča záznamov, ktoré sú na nej uložené
existuje jednoúrovňová a viacúrovňová indexácia
jednoúrovňová indexácia
užívateľ
logická
štruktúra
logický
súbor dát
systém
riadenia bázy
dát
fyzická
štruktúra
fyzický
súbor 1
fyzický
súbor 2
A1
A2
A3
A4
A5
dvojúrovňová indexácia
reťazenie dát
umožňuje uloženie záznamov v ľubovoľnej časti pamäte
ich nadväznosť je realizovaná pomocou smerníkov
v skupine záznamov spojené smerníky sa nazývajú reťazce, alebo zreťazený zoznam záznamov
znakom omega sa ukončuje reťazec
znamená to, že nasledovník neexistuje
v prípade cyklických štruktúr, smerník posledného záznamu obsahuje adresu prvého záznamu
v cyklických štruktúrach sa ako prvý záznam uvádza špeciálny záznam tzv. hlava, ktorá má prázdnu informačnú
hodnotu
ak sa používa aj smerník na predchodcu, potom sa jedná o obojsmernú sekvenčnú štruktúru dát
-
smerník možno používať na troch úrovniach
na úrovni fyzických dát (prepájajú súbory)
na úrovni vnútrosúborových dát (prepojenie v tom istom súbore)
na úrovni záznamov rôznych súborov (rodič – dieťa)
Stromová štruktúra
-
je hierarchická štruktúra
-
každý prvok štruktúry môže byť spojený s viacerými prvkami na nižšej hierarchickej úrovni
-
každý prvok je spojený najviac s jedným prvkom na vyššej hierarchickej úrovni
-
prvok na najvyššej hierarchickej úrovni sa nazýva koreň
-
počet podstromov vychádzajúcich z jedného uzla sa nazýva stupeň uzla
-
uzol so stupňom 0 sa nazýva listový uzol
-
koreň stromu má úroveň 1 a ostatné majú vždy o jedničku vyššiu
-
výška stromu je daná maximálnou úrovňou zo všetkých uzlov stromu
-
pri štruktúrach dát sa uvažujú usporiadané stromy, t.j. stromy pri ktorých záleží na poradí uzlov na jednej úrovni zľava doprava
-
stromovú štruktúru je možné pretransformovať, do tzv. binárneho stromu, kde každý uzol má maximálne dva podstromy – ľavý a pravý
rozlišovanie ľavého a pravého podstromu neumožňuje považovať binárny strom za stromovú štruktúru
každému uzlu pôvodného stromu sa môže priradiť ľavý a pravý strom
ľavý syn je bezprostredne podriadený prvok k danému uzlu a to prvý zľava
pravý syn je prvok ležiaci na tej istej úrovni ako daný uzol a to prvý sprava
0009
0019
1009
0000
0001
0009
0010
0011
0019
1000
1001
1009
9990
9991
9999
0099
0199
1199
0009
0019
0099
0109
0119
0199
0000
0001
0009
0010
0011
0019
1000
1001
1009
stromová štruktúra
binárny strom
-
pamäťová reprezentácia
nelineárny zreťazený zoznam
záznamy používajú
smerník vpred
smerník vzad
smerník podriadenosti – ukazuje prvý zľava podriadený záznam v stromovej štruktúre
smerník nadriadenosti – ukazuje na nadriadený záznam
techniky ukladania
klasický nelineárny reťazec
o
využíva smerník podriadenosti a smerník vpred
o
stromovú štruktúru je najskôr potrebné pretransformovať na binárnu stromovú štruktúru, na
ktorého pamäťovú reprezentáciu postačujú tieto dva smerníky
o
smerník podriadenosti ukazuje na ľavého syna
o
smerník vpred ukazuje na pravého syna daného uzla
stacionárne smerníkové matice
o
záznam obsahuje
informačnú hodnotu, ktorú nesie daný záznam
smerník nadriadenosti
maticu smerníkov podriadenosti udávajúcu adresy všetkých podriadených
záznamov
bude veľkosti, ako je maximálny počet podriadených uzlov zo všetkých
uzlov
o
nie je nutná transformácia do binárneho stromu
o
ľahko sa po stromovej štruktúre pohybuje
o
takto sa ukladajú iba stabilné stromy, lebo prerábanie stromu je náročné
K
A
B
C
D
E
F
G
1. úroveň
2. úroveň
3. úroveň
4. úroveň
K
A
B
D
F
C
E
G
K
W
B
A
C
W
W
D
W
E
W
F
W
W
G
W
W
dynamické smerníkové matice
o
je to iba jednosmerná štruktúra v smere od nadriadeného uzla k podriadenému
o
využíva sa len smerník podriadenosti
o
nie je možné nájsť nadradený uzol
stopové kódy
o
spočíva v takom očíslovaní uzlov, ktoré k nim uľahčujú prístup
o
číslo uzlu sa skladá z toľkých častí, koľko má daná štruktúra úrovní
o
číslo uzla predstavuje návestie (stopu) k nadradeným uzlom
o
stopa má vysokú vypovedaciu hodnotu, pretože jednoznačne určuje miesto v hierarchii stromu
o
zo stopy je možné odvodiť všetkých rodičov daného uzla
o
každý uzol obsahuje číslo nadriadeného uzla a miesto v úrovni
sekvenčný zoznam
vzťahy medzi uzlami štruktúry sa vyjadrujú bez použitia smerníkov
používa sa, ak stromová štruktúra nemá dynamický charakter
techniky
vektorová reprezentácia
o
obsahuje dva vektory
jeden je na odpamätanie uzlov stromu
druhý na zapamätanie otcov každého uzla
o
nevýhodou je, že nedovoľuje rozlíšiť poradie uzlov v danej hierarchickej štruktúre
K
A
W
B
W
W
C
W
W
W
D
W
W
W
E
W
W
F
W
W
W
G
W
W
W
W
K
A
W
B
W
W
C
W
W
W
D
W
W
W
E
W
W
F
W
W
W
G
W
W
W
K
A
B
C
E
D
F
G 1,1,2,1
1,1,2
1,1,1
1,1
1
1,2
1,2,1
1,3
rozšírená vektorová reprezentácia
o
rieši nedostatky vektorovej reprezentácie
o
vyžaduje pretransformovanie stromu do binárnej podoby
o
do vektora uzlov sa uložia uzly binárneho stromu v priamom poradí (koreň stromu, ľavý
podstrom v priamom poradí a pravý podstrom v priamom poradí)
o
vektor RLINK obsahuje smerníky na pravých synov jednotlivých uzlov
o
vektor IND nesie indikáciu o tom, či daný uzol má ľavého syna
Sieťová štruktúra
-
najvšeobecnejšia štruktúra
-
každý prvok môže byť spojený s ľubovoľným prvkom na rozdiel od stromovej štruktúry, ktorá neumožňuje prepojiť prvky na rovnakej
úrovni
-
príklad orientovanej sieťovej štruktúry s váhami
-
pamäťová reprezentácia
súvisí s pamäťovou reprezentáciou grafov
techniky
maticová reprezentácia
každý graf je možné popísať maticou, ktorej prvky zachytávajú vzťahy medzi uzlami grafu
ak je graf neorientovaný, tak je matica symetrická
ak je graf orientovaný, tak je matica väčšinou nesymetrická
ak je graf ohodnotený, tak prvky matice sú hodnoty hrán
ak je graf neohodnotený, tak 1 označuje, že existuje prepojenie medzi uzlami a 0 ak neexistuje prepojenie
medzi uzlami
pri rozmerných maticiach môže byť mnoho prvkov v matici nulových. Takéto matice sa nazývajú riedke
matice
takáto pamäťová reprezentácia teda nie je vhodná
statická tabuľková reprezentácia
pri riedkych maticiach sa používa technika, že do pamäte ukladáme len nenulové prvky
v prvom stĺpci tabuľky sa uloží váha hrany, a v ďalších dvoch indexy odkiaľ kam vedie
nevýhodou je statický charakter tejto reprezentácie, pretože pri vložení ďalšieho uzla do grafu, musíme
celú tabuľku reorganizovať
RLINK
uzol
IND
W
W
W
W
W
K
A
D
E
G
B
F
G
0
0
1
0
1
0
1
1
1
2
3
5
4
A
B
C
D
E
25
20
11
12
5
10
8
dynamická tabuľková reprezentácia
pri dynamickej charakteristike je vhodné zobrazenie pomocou záznamov, v ktorých bude uzol obsahovať
o
samotná hodnota hrany matice
o
riadkový index
o
stĺpcový index
o
smerník LEFT – ukazuje na ďalší prvok v riadkovom zozname a to vľavo
o
smerník UP – ukazuje na ďalší prvok v stĺpcovom zozname a to nahor
každý stĺpec a riadok v matice je reprezentovaný lineárnym zoznamom s hlavou. Opačná orientácia
zreťazenia je zámerná z dôvodu, že sa dá predpokladať, že rozšírenie prvkov sa častejšie vykonáva na
konci riadku a stĺpca, čím sa skráti čas pri vyhľadávaní
ak príde nový záznam, tak sa vloží na koniec zoznamu a zmení sa iba jeden smerník nahor a doľava od
hlavy zoznamov
reprezentácia orientovanej sieťovej štruktúry
realizuje sa pomocou záznamov dvojakého typu
o
jeden typ záznamu nesie informačnú hodnotu uzla a smerník na lineárny zreťazený zoznam
záznamov, ktoré popisujú hrany vychádzajúce z daného uzla
o
druhý typ záznamov popisuje hrany a obsahuje dva smerníky
prvý ukazuje na ďalšiu hranu vychádzajúcu z toho istého uzla
druhý ukazuje na koncový uzol danej hrany
W
1
0
W
2
0
W
3
0
W
4
0
W
5
0
W
0
1
W
0
2
W
0
3
W
0
4
W
0
5
10
2
1
8
4
2
5
1
3
20
5
3
12
1
4
11
3
4
25
1
5
Dátové jazyky
-
základná charakteristika
dátový jazyk slúži ako komunikačný prostriedok medzi používateľom databázového systému a samotným riadiacim systémom
bázy dát
dátová jazyk je množina operácií, ktoré umožňujú prístup k dátam v báze dát pomocou dátového modelu
operácie možno rozdeliť do dvoch skupín
operácie výberu (vyhľadávania)
operácie pre modifikáciu dát
-
klasifikácia dátových jazykov
systém riadenia bázy dát je možné rozdeliť podľa toho, aké dátové jazyky poskytuje
hostiteľský dátový jazyk
rozšírenie vyšších programovacích jazykov
väčšinou súčasťou hostiteľského programovacieho rozhrania
o
PL/SQL
o
COBOL
o
Assembler
je to jazyk na manipuláciu s dátami
o
data manipulation language
samostatný dátový jazyk
úplný programovací jazyk ako pre výber, tak aj manipuláciu s dátami v báze dát
samostatné jazyky založené na báze bežnej reči – jazyky otázok
o
tvar príkazu je pevne stanovený
o
obsahujú príkazy aj pre modifikáciu dát
podľa výrazových prostriedkov používaných v dátových jazykoch
všeobecné
všeobecné príkazy pre výber dát bez vzťahu k terminológii používanej v konkrétnej aplikácii
aplikačne orientované
výrazové prostriedky sú tesne viazané na terminológiu a pojmy používané v konkrétnych aplikáciách
často sa upravuje na zákazku
podľa miery procedurálnosti
procedurálne
umožňujú nielen špecifikovať požiadavky, ale aj spôsob akým tieto požiadavky splniť
patria sem hostiteľské jazyky, ktoré umožňujú samostatné programovanie operácií pre prácu s bázou dát
neprocedurálne
neumožňujú sa rozhodovať akým spôsobom sa požiadavky budú plniť
o
o tom rozhoduje systém riadenia bázy dát
o
možnosť optimalizácie vyhľadávania dát
podstatou je vhodná forma spojenia programových modulov, ktoré nahradzujú samostatné programové
riešenie užívateľom
postup
o
používateľ zadá požiadavku napríklad na výber dát
o
riadiaci modul subsystému systému riadenia bázy dát analyzuje parametre a vypisuje
diagnózu prípadných chýb v parametroch
o
riadiaci modul vyhľadá funkčný modul potrebný na realizáciu zadania
o
funkčný modul sa načíta do pamäte
o
funkčný modul požiada o prenos požadovaných dát z bázy dát
o
dáta z bázy dát sú prenesené na médium označené užívateľom
1
A
12
5
W
25
2
B
W
10
3
C
W
11
4
D
W
8
5
E
W
20
Document Outline
- 1 Vytvorenie tabuľky
-
Vkladanie dát do tabuľky
- 2 Manipulácia s tabuľkami
- Pre formuláciu otázky v SQL slúži jediný príkaz SELECT, ktorý je základnou konštrukciou jazyka
-
2.1 Hľadanie v tabuľkách
- Príklad: Vypíšte všetky mená a mestá z tabuľky Podnik
- Príklad: Vypíšte z tabuľky Podnik mená všetky všetkých
- Získanie viacerých hodnôt:
- 3 Práca s prázdnou hodnotou
- 5 Výrazy a funkcie
- 5.2 Aritmetické funkcie
- 5.3 Reťazcové funkcie
- 5.4 Agregované funkcie
- 5.5 Dátumové funkcie
- SELECT spojený s daným kurzorom
Automaticky vygenerovaný textový náhľad. Pre plné formátovanie si stiahnite súbor.
nechodím na prednášky