OBSAH WEBU
ČTĚTE!
Názvosloví
Příklad
Nechť máme tabulku STUDENT(LOGIN, JMENO, PRIJMENI, ADRESA) asi takto:
LOGIN | JMENO | PRIJMENI | ADRESA |
---|---|---|---|
xcerny00 | Petr | Černý | Brněnská 15 Vyškov |
xnovak00 | Jan | Novák | Cejl 9 Brno |
xnovak01 | Pavel | Novák | Cejl 9 Brno |
domény atributů
DLOGIN = {xnovak00, xnovak01, xbanan01, xchleba11, …}
DJMENO = {Petr, Pavel, Josef, …}
DPRIJMENI = {Grupa, Sadlo, Zendulka, …}
DADRESA = {Brněnská 15 Vyškov, Cejl 9 Brno, …}
relace = tabulka
RSTUDENT DLOGIN x DJMENO x DPRIJMENI x DADRESA
neboli podmnožina kartézského součinu jednotlivých domén
Definice
Počet atributů n relace se označuje stupeň (řád) relace, kardinalita těla relace m = |R*| se označuje kardinalita relace
Zjednodušené se relace zapisuje R(A1, A2, …, An), třeba STUDENT(LOGIN, JMENO, PRIJMENI, ADRESA).
Definice
Definice
Atribut CK relace R se nazývá kandidátním klíčem, když splňuje tyto dvě časově nezávislé vlastnosti:
Definice
Primárním klíčem je jeden z kandidátních klíčů (vybraný), zbývající kandidátní klíče se nazývají alternativní (někdy také sekundární).
Definice
U žádné složky primárního klíče nesmí chybět hodnota.
Definice
Atribut FK relace R2 se nazývá cizí klíč, právě když splňuje tyto časově nezávislé vlastnosti:
Definice
Relační databáze nesmí obsahovat žádnou nesouhlasnou hodnotu cizího klíče.
Definice
Definice
Relační algebrou rozumíme dvojici RA = (R, O), kde nosičem R je množina relací a O je množina operací, která zahrnuje:
Definice
Sjednocením relací R1 = (R, R1*) a R2 = (R, R2*) se schématem R je relace R1 union R2 = (R, R1* ∪ R2*).
Analogicky pro průnik (R1 intersect R2) a rozdíl (R1 minus R2).
Kartézským součinem relací R1 = (R1, R1*) a R2 = (R2, R2*) je relace R1 times R2 = ( (R1,R2), R1* x R2*).
Definice
Definice
Nechť θ je operátor porovnání dvou hodnot (<, >, <>, =, atd.). θ selekce (restrikce) relace R = (R, R*) na atributech X a Y je relace
R where X θ Y,
která má stejné schéma jako relace R a obsahuje všechny n-tice t ∈ R*, pro které platí x θ y, kde x je hodnota atributu X a y hodnota atributu Y v ntici t. Na místě atributu X, resp. Y může být konstanta. Pak jde o θ selekci na atributu X, resp. Y.
Podle definice máme jenom jednu podmínku. Selekci lze dále rozšířit o spojky and, or, not.
Definice
Nechť R1 = (R1, R1*) je relace se schématem R1(X1,X2,..,Xm,Y1,Y2,…,Yn) a R2 relace se schématem R2(Y1,Y2, …,Yn, Z1,Z2,…,Zk). Uvažujme složené atributy X=(X1,X2,…,Xm), Y=(Y1,Y2,…,Yn) a Z=(Z1,Z2,…,Zk). Potom přirozené spojení relací R1 a R2 je relace R1 join R2 se schématem (X, Y, Z) a tělem zahrnujícím všechny n-tice t = (x, y, z) takové, že v R1* existuje n-tice t’ s hodnotou x atributu X a hodnotou y atributu Y a v R2* existuje n-tice t’’ s hodnotou y atributu Y a hodnotou z atributu Z.
Příklad
A | B | C |
---|---|---|
0 | a | d |
1 | a | e |
2 | b | f |
T2
C | D | E |
---|---|---|
e | 1 | 0 |
d | 1 | 1 |
d | 0 | 1 |
T1 join T2
A | B | C | D | E |
---|---|---|---|---|
0 | a | d | 1 | 1 |
0 | a | d | 0 | 1 |
1 | a | e | 1 | 0 |
SQL = structured query language, je standardizovaný dotazovací jazyk používaný pro práci s daty v relačních databázích
Příkazy e mohou více či méně lišit pro konkrétní databázi
SQL příkazy se dělí na čtyři základní skupiny:
Lze označit jako DDL – Data Definition Language
CREATE - slouží pro vytváření nových objektů
- například: tabulku, index, pohled, proceduru
Vytvoření pohledu
CREATE VIEW <nazev pohledu> AS <SELECT prikaz>
Vytvoření indexu
CREATE [UNIQUE] [CLUSTERED | NONCLUSTERED] INDEX <nazev indexu> ON <nazev tabulky nebo pohledu>(<nazev sloupce> [ASC | DESC] [,...n])
ALTER - slouží pro upravení objektů
DROP - pro smazání objektů
Slouží pro manipulaci s daty.
DELETE - maže data z tabulky
DELETE from users where (age < 13)
UPDATE - aktualizuje data
UPDATE users set city = 'Brno', wtf = 'FIT' where (surname = 'Novák')
INSERT - vkládáme nová data
INSERT into users (name, surname, age) values ('Jiri', 'Janda', 22)
SELECT - nejčastější příkaz
Transakce a prava jsme prakticky neprobírali.
Slouží ke spojování výsledku dotazu SELECT ze dvou vstupních množin (typicky tabulek relační databáze).
Vnitřní spojení - Nejjednodušší variantou je tzv. INNER JOIN (pozn. INNER a OUTER není nutné používat a v podstatě se ani nedoporučuje používat - zbytečně prodlužují zápis). Ten odpovídá kartézskému součinu tabulek a aplikaci predikátu na tento součin.
JOIN) je zvláštním případem vnitřního spojování, kde je spojovací podmínka realizována automaticky dle shodnosti názvů a datových typů ve spojovaných tabulkách. Pro nemožnost konkrétněji definovat ve spojovacích tabulkách, ale pouze strukturou, není tento typ tolik používán.
Vnější spojení - Vnější spojování (OUTER JOIN) generuje výstupní množinu omezenou o spojovací podmínky podobně jako vnitřní spojování, pokud však není nalezen vhodný řádek v druhé množině, je nenalezený řádek nahrazen hodnotami NULL. Dle typu vnějšího spojení mohou být doplňovány řádky z jedné nebo obou vstupních množin. Výsledkem vnějšího spojování jsou řádky naplněné hodnotami ze vstupních množin i částečně.
Částečné vnější spojování - Pro částečné vnější spojování jsou definována klíčová slova LEFT a RIGHT, která definují, která vstupní množina má zahrnuté všechny řádky v množině výstupní, tj. která vstupní množina není doplňována o NULL hodnoty
Lze použít i FULL OUTER JOIN.
SQL umožňuje v klauzuli FROM uvádět nejen jména tabulek, ale i tabulkové výrazy, resp. výraz spojení
Pohled je virtuální databázová struktura, která může obsahovat data z nula až více tabulek.
V prohlížeči máte záložky, na ploše zástupce a v databázi? V databázi jsou pohledy. Z pohledů lze především vybírat data (k čemuž slouží nejčastěji), a někdy do nich lze i data vkládat. Databázové systémy by se bez pohledů obešly - podobně, jako byste se na ploše obešli bez zástupců nebo v prohlížeči bez záložek. Ale práce s nimi může být mnohem pohodlnější.
· *Pohledy mohou obsahovat výrazy (jako jsou vestavěné funkce MySQL nebo uživatelsky definované funkce).
Pohledy s klauzulemi DISTINCT, GROUP BY, HAVING, s agregačními funkcemi a spojující několik tabulek, umožňují jen čtení.
create view vwPracovnici as select * from pracovnici;
- Od tohoto okamžiku můžete pohled použít jako tabulku, ve smyslu:
select * from vwPracovnici;
create view vwPrumernyVek as select avg(vek) as prumer from pracovnici;
- Vrátí průměrný věk (výsledek bude obsahovat vždy jen jeden řádek). Neboli pohled může obsahovat agregační funkci.
Používáme pohledy, pokud
Procedura - Uložená procedura je sada příkazů SQL, které jsou:
Procedury mohou dělat to, co normální příkazy:
Příklad:
create procedure sp_vratradky (od int, do int) begin select * from software where id between od and do; end
A zavolat pomocí příkazu:
call sp_vratradky 10, 20)
Triggery - Trigger je uložená procedura, která se spouští v souvislosti s provedením nějakého akčního dotazu na tabulce, nebo taky pouze ten spoustec, ktery ma navazanou uálost, a poté proceduru.
create trigger trSaveRows before delete on bezpecna for each row begin insert into bezpecna_zaloha(id, jmeno, plat, cas_odstraneni, uzivatel) values (old.id, old.jmeno, old.plat, now(), user()); end;
EMBEDED SQL / dynamic SQL??
33 | ||
---|---|---|
Celé jméno | OK | !!! |
Díky za materiály | ||
jozef | ||
a | ||
'SELECT * FROM users; | ||
weird | ||
1 | 4 |
Diskuze