DOC

Vsetky prednasky

komplet

Formát
DOC
Veľkosť
877 kB
Pridané
Stiahnutí
3 704
Hodnotenie
5,0/5
Stiahnuť DOC · 877 kB

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

Otvoriť AI: ChatGPT · Claude · Gemini

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


Automaticky vygenerovaný textový náhľad. Pre plné formátovanie si stiahnite súbor.