77
1 Teorie zpracování dat N-ticový relační kalkul SQL Doménový relační kalkul QBE

Teorie zpracování dat

  • Upload
    delila

  • View
    30

  • Download
    0

Embed Size (px)

DESCRIPTION

Teorie zpracování dat. N-ticový relační kalkul SQL Doménový relační kalkul QBE. N-ticový relační kalkul. Dr. Codd definoval n-ticový relační kalkul pro RDM jazyk matematické logiky - predikátový počet je využit pro výběr informací z relační databáze - PowerPoint PPT Presentation

Citation preview

Page 1: Teorie zpracování dat

1

Teorie zpracování dat

N-ticový relační kalkulSQLDoménový relační kalkulQBE

Page 2: Teorie zpracování dat

2

N-ticový relační kalkul

• Dr. Codd definoval n-ticový relační kalkul pro RDM jazyk matematické logiky - predikátový počet je využit pro výběr informací z relační databáze

• název odvozen z oboru hodnot jeho proměnných - relace je množina prvků = n-tic

• je základem pro jazyk typu SQL

Syntaxe je přizpůsobena programovacímu jazyku

matematické vyjádření { x | F(x) }

nahradíme zápisemx WHERE F(x)

kde x je proměnná pro hledané n-tice (struktura relace),

F(x) je podmínka, kterou má x splňovat (výběr prvků relace)

Page 3: Teorie zpracování dat

3

N-ticový relační kalkul

Definice

Abecedu tvoří

• konstanty atomické (hodnoty atributů), př. 8, ‘Kovář‘

• predikátové (jména relací), př. Zam, Student

• proměnné n-ticové (proměnné, jejichž oborem hodnot jsou n-tice); označujeme je identifikátory; n-ticové proměnné představují prvky = n-tice relací; př. x, xZam, yStudent

• komponenty proměnných (indexové konstanty), odvolávky na atributy relací; označíme je odkazem na relaci (prefixem) a jménem atributu, př. xZam.jmeno, yStudent.rodcis

• operátory predikátové binární < <= > >= = <> , obecně *

• logické kvantifikátory NOT AND OR EXIST FORALL

• oddělovače ( )

Page 4: Teorie zpracování dat

4

N-ticový relační kalkul

Definice

Formulí n-ticového relačního kalkulu je

• atomická formule R(r), kde R jméno relace, r je n-ticová proměnná; formule znamená, že r je prvkem relace R; př: Zam(x), Student(y)

• atomické formule r.a * s.b, r.a* 'k', 'k' * s.b,

kde r, s jsou n-ticové proměnné, a, b jsou komponenty proměnných (atributy), 'k' je atomická konstanta, * je binární operátor, r.a je atribut a n-tice r, s.b atribut b n-tice s; př: x.plat > 3000, y.jmeno = x.jmeno

• jsou-li F1 a F2 formule,

pak také F1 OR F2, F1 AND F2, NOT F1 jsou formule;

• je-li F formule,

pak také EXIST r(F(r)), FORALL r(F(r)) jsou formule;

• nic jiného není formule.

Formule relačního kalkulu reprezentuje vyhledávací podmínku.

Page 5: Teorie zpracování dat

5

N-ticový relační kalkul

Definice

Výraz n-ticového relačního kalkulu je výraz tvaru

x WHERE F(x)

kde x je jediná volná proměnná ve formuli F.

 

Jako v predikátovém počtu platí, že proměnné vázané kvantifikátory EXIST a FORALL nazývány vázanými proměnnými, ostatní n-ticové proměnné jsou volné.

Výraz n-ticového relačního kalkulu určuje relaci tvořenou všemi možnými hodnotami proměnné x, které splňují formuli F(x).

x definuje seznam komponent proměnných, které definují schéma výstupní relace. Je to buď již dříve definovaná entita, množina entit nebo seznam komponent volných proměnných.

Page 6: Teorie zpracování dat

6

N-ticový relační kalkul

Základní operace relační algebry se dají vyjádřit pomocí výrazů n-ticového relačního kalkulu, tedy n-ticový relační kalkul je relačně úplný.

Platí: R S => x WHERE R(x) OR S(x)

R S => x WHERE R(x) AND S(x)

R - S => x WHERE R(x) AND NOT S(x)

R x S => x, y WHERE R(x) AND S(y)

R[a1,a2,...,ak] => x.a1, x.a2,..., x.ak WHERE R(x)

R(P) => x WHERE R(x) AND P

R[A*B]S => x, y WHERE R(x) AND S(y) AND x.A * y.B

Page 7: Teorie zpracování dat

7

N-ticový relační kalkul

Příklad: Mějme relace Učitel(ČU, jméno, fce, plat),

Úvazek(ČU, ČP, hodin).

Pak

Učitel(x) ... je atomická formule (podmínka), která nabývá hodnoty

TRUE, je-li x (= prvek, entita, řádek) v tabulce Učitel – tzv.

příslušnost proměnné x k relaci Učitel

x.hodin>4 ... je atomická formule (= podmínka selekce)

Úvazek(x) AND x.hodin>4 ... je formule (podmínka) nabývající TRUE,

pokud v tabulce Úvazek je x s hodnotou hodin>4

xUčitel ... je proměnná (= n-tice) typu (struktury) Učitel

xUčitel.jméno, xUčitel.plat ... je n-tice (zde projekce ze struktury Učitel)

x.jméno, x.plat ... totéž v jednodušším zápise

Page 8: Teorie zpracování dat

8

N-ticový relační kalkul

Příklad – pokr. Dáno: Učitel(ČU, jméno, fce, plat)

Úvazek(ČU, ČP, hodin)

Jako výraz n-ticového relačního kalkulu zapište:

Jmenný seznam učitelů (projekce)

x.jméno WHERE Učitel(x)

Seznam čísel učitelů, kteří učí předmět P2 (selekce a projekce)

x.ČU WHERE Úvazek(x) AND Úvazek.ČP='P2' 

Seznam čísel učitelů a jejich počtu hodin v jednotlivých předmětech

x.ČU, x.hodin WHERE Úvazek(x) 

Jmenný seznam učitelů a jejich úvazků v hodinách (přirozené spojení)

y.jméno, x.hodin WHERE Učitel(y) AND Úvazek(x) AND y.ČU=x.ČU

Page 9: Teorie zpracování dat

9

N-ticový relační kalkul

Relační kalkul, jak byl zatím definován, umožňuje zapsat i nekonečné relace, např.

x WHERE NOT R(x)

Výrazy relačního kalkulu se proto omezují jen na tzv. bezpečné výrazy, které definování relací nekonečných nedovolují.

Page 10: Teorie zpracování dat

10

Jazyk SQL

• navržen u IBM jako dotazovací jazyk (původní název Sequel)

• základem je n-ticový relační kalkul

• obsahuje i příkazy pro vytvoření a modifikace tabulek, pro ukládání, modifikaci a rušení dat v databázi a řadu dalších příkazů

Page 11: Teorie zpracování dat

11

Jazyk SQL  Vývoj a standardy

• Vznik jazyka - jen dotazovací část, prototyp u IBM, Dr.Codd

1974 (Sequel)

• Zprvu implementován živelně v různých SŘBD.

• První standardizace organizací ANSI - průnik existujících implementací

1986 (SQL86).

• Rozšíření definičního jazyka o definice IO - 1989 (SQL89).

• Rozšíření o nové datové typy, nové typy spojení, aplikační

programování, další podpora transakcí, ... 1992 (SQL2 SQL92)

• Java 1998 (SQLJ)

• Rozšíření o objektovou orientaci pro objektově-relační databáze,

rekurzivní SELECT, triggery, procedury, ... 1999 (SQL3 SQL99)

• „Kontejner pro budoucí standardy“, temporální SQL, XML, ... > 2000

Page 12: Teorie zpracování dat

12

Jazyk SQL  Vývoj a standardy

• Současné implementace SQL v SŘBD jsou na úrovni SQL92 nebo

SQL99.

• Některé implementace mají rozšíření i o prvky navíc proti standardům.

Význam definování a dodržování standardů

• přenositelnost aplikací v různých prostředích

• životnost aplikací v různých prostředích

• možnost společného přístupu v heterogenním prostředí

• jednodušší zaškolování

Page 13: Teorie zpracování dat

13

Jazyk SQL příkazy jazyka pro definici dat

Vytvoření definice tabulky:

CREATE TABLE Tab (ident1 {NUMBER | CHAR | DATE }(délka)

[, ident2 ... , ident3 ...] )

Příklad:

CREATE TABLE Včelaři (jméno CHAR(20), adresa CHAR(30),

okres CHAR(15), včel NUMBER(4), medu NUMBER(4));

jméno adresa okres včel medu

Page 14: Teorie zpracování dat

14

Jazyk SQL příkazy jazyka pro definici dat

Modifikace struktury tabulky

ALTER TABLE tab {MODIFY (ident dat_typ (nový rozměr)) |

ADD (ident dat_typ (rozměr)) |

DROP ident}

Příklad: Sloupec pro plat NUMBER(6, 2) už nestačí, je třeba přidat 2

cifry.

ALTER TABLE zam MODIFY (plat NUMBER (8,2) );

Příklad: Do tabulky včelaři je nutno přidat sloupec o tom, jestli se u včelstev vyskytuje nemoc varoáza.

ALTER TABLE včelaři ADD (varoáza NUMBER (1) );

Page 15: Teorie zpracování dat

15

Jazyk SQL příkazy jazyka pro definici dat

Přejmenování tabulky nebo sloupce tabulky

RENAME TABLE tab_stará TO tab_nová

RENAME COLUMN tab.sloupec_starý TO tab.sloupec_nový

Zrušení tabulky včetně definice

DROP TABLE tab

Vytvoření a rušení indexu

CREATE [UNIQUE] INDEX index ON tab (seznam_klíčů)

DROP INDEX index

Klauzule UNIQUE znamená požadavek jednoznačnosti indexu

Příklad: CREATE UNIQUE INDEX ind_včel ON včelaři (jméno);

CREATE INDEX ind_fakul ON fakulta (kat, jméno);

Page 16: Teorie zpracování dat

16

Jazyk SQL příkazy jazyka pro manipulaci s daty

Včelaři

jméno adresa okres včel medu

VčelařiP

jméno adresa okres včel medu předs

Včelař Med99

jméno adresa okres jméno včel medu

Včelař Med

jméno adresa okres jméno včel medu rok

Page 17: Teorie zpracování dat

17

Jazyk SQL příkazy jazyka pro manipulaci s daty

Vkládání nových řádků

INSERT INTO tab [seznam_sloupců] VALUES(seznam_hodnot)

Příklad: Nový včelař se přihlásil do organizace, dosud nemá výnosy.

INSERT INTO Včelaři jméno, adresa, okres

VALUES (‘Novotný Karel’,’Opava, Květná 34’,’Opava’);

Bez specifikace sloupců bychom museli uvést všechny hodnoty:

INSERT INTO Včelaři

VALUES (‘Novák Jiří’,’Kravaře, Opavská 12’, ’Opava’, NULL, NULL);

jméno adresa okres včel medu

Novotný Karel Opava, Květná 34 Opava

Novák Jiří Kravaře, Opavská 12 Opava

Page 18: Teorie zpracování dat

18

Jazyk SQL příkazy jazyka pro manipulaci s daty

Pomocí příkazu INSERT je možno také naplňovat řádky tabulky hodnotami z jiné tabulky tak, že místo klauzule VALUES použijeme SELECT, v němž budou zadány řádky i sloupce jiných tabulek, které se do naší tabulky mají přenést.

Page 19: Teorie zpracování dat

19

Jazyk SQL příkazy jazyka pro manipulaci s daty

Modifikace hodnot v řádcích tabulky

UPDATE tab

SET ident1=výraz1 [, ident2=výraz2,...] [WHERE podm]

Příklad: Včelař Beran Alois se přestěhoval do Benešova a má nyní 92 včelstev.

UPDATE Včelaři

SET adresa = ‘Benešov, Šeříková 55’, včelstev = 92

WHERE jméno = ‘Beran Alois’;

Příklad: Všichni zaměstnanci katedry 345 dostali přidáno 300 Kč.

UPDATE Zam

SET plat = plat + 300 WHERE kat = 345;

Page 20: Teorie zpracování dat

20

Jazyk SQL příkazy jazyka pro manipulaci s daty

Rušení řádků tabulky

DELETE FROM tab WHERE podm

Příklad: Zaměstnanci Jára a Žára nedostanou žádné prémie, vymažou sez tabulky Odměny.

DELETE FROM Odměny

WHERE jméno = ‘Jára’ OR jméno = ‘Žára’;

Page 21: Teorie zpracování dat

21

Jazyk SQL příkazy jazyka pro manipulaci s daty

Vyhledání informací z tabulky

Příkaz SELECT reprezentuje vlastní dotazovací jazyk. Jeho použitím je možno nejen vyhledávat údaje v databázi obsažené, ale i údaje odvozené, případně vhodně setříděné. Základní nejjednodušší tvar příkazu je

SELECT {seznam_sloupců | *}FROM tab[WHERE podm]

znak * místo seznamu sloupců znamená výpis všech sloupců tabulky

Poznámka: Příkaz

SELECT A1, A2, . . . , Ak FROM R WHERE podm

odpovídá výrazu relační algebry

(R (podm) ) [A1, A2, . . . , Ak]

nebo výrazu n-ticového relačního kalkulu

x.A1, x.A2, . . . , x.Ak WHERE R(x) AND podm

Page 22: Teorie zpracování dat

22

Jazyk SQL příkazy jazyka pro manipulaci s daty

Vyhledání informací z tabulky

Jednoznačnost prvků výsledné relace nezajišťuje jazyk SQL automaticky, ale musí se zadat v příkazu klauzulí UNIQUE (nebo DISTINCT)

Příklad: Celá tabulka

SELECT * FROM včelaři;

Příklad: Jmenný seznam a adresy všech včelařů (projekce)

SELECT jméno, adresa FROM včelaři;

Příklad: Seznam okresů, v nichž jsou organizováni včelaři

SELECT UNIQUE okres FROM včelaři;

Page 23: Teorie zpracování dat

23

Jazyk SQL příkazy jazyka pro manipulaci s daty

Vyhledání informací z tabulky

Podmínka selekce se zapisuje za klauzulí WHERE.

Ve výběrové podmínce je možno používat:

konstanty, identifikátory sloupců,

relační operátory : = <> < <= > >=

logické operátory: NOT AND OR

další operátory: BETWEEN dolní mez AND horní mez

IN(seznam_prvků_množiny)

IS NULL

LIKE vzor ... porovnání řetězců

% ... odpovídá skupině znaků

_ ... podtržítko zastupuje 1 znak

Page 24: Teorie zpracování dat

24

Jazyk SQL příkazy jazyka pro manipulaci s daty

Vyhledání informací z tabulky

Příklad: Seznam včelařů z okresů Praha, Ústí a Ostrava, kteří mají mezi 50 a 100 včelstvy.

SELECT *FROM VčelařiWHERE okres IN (‘Praha’,’Ústí’,’Ostrava’)AND včel BETWEEN 50 AND 100;

Příklad: Seznam včelařů se jménem začínajícím písmenem K.

SELECT *FROM VčelařiWHERE jméno LIKE ‘K%’;

Příklad: Seznam včelařek (= jméno končí na -ová).

SELECT *FROM VčelařiWHERE jméno LIKE ‘%ová’;

Page 25: Teorie zpracování dat

25

Jazyk SQL příkazy jazyka pro manipulaci s daty

Vyhledání informací z tabulky

Příklad: seznam včelařů jejichž jméno obsahuje X.

SELECT *FROM VčelařiWHERE jméno LIKE ‘%X%’;

Příklad: Seznam včelařů, kde jejich jméno obsahuje jako druhé písmeno v pořadí A.

SELECT *FROM VčelařiWHERE jméno LIKE ‘_A%’;

Page 26: Teorie zpracování dat

26

Jazyk SQL příkazy jazyka pro manipulaci s daty

Vyhledání informací z tabulky

Příklad: Seznam včelařů jmenujících se Karel, rozlišujících velká a malá písmena tzv. binární porovnání. (Jinak SQL velká a malá písmena nerozlišuje). SELECT *

FROM VčelařiWHERE BINARY jméno = ‘Karel’;

Příklad: Seznam včelařů jejichž počet včelstev není vyplněn (NULL). SELECT *

FROM VčelařiWHERE vcel IS NULL;

Page 27: Teorie zpracování dat

27

Jazyk SQL

Setřídění výsledných řádků podle třídicího klíče, ne podle pořadí uložení v souboru:

SELECT {seznam_sloupců | *}FROM tab[WHERE podm][ORDER BY třídicí_klíč [DESC]]

Příklad: Seznam včelařů v pořadí podle získaného medu od 500 kg výše.

SELECT *FROM VčelařiWHERE medu>500ORDER BY medu DESC;

Pokud jsou v třídicím klíči prázdné hodnoty, uvádí se tyto řádky vždy na začátku tabulky při sestupném i vzestupném třídění.

Page 28: Teorie zpracování dat

28

Jazyk SQL

Spojení více tabulek (vazba) se provede uvedením všech tabulek za FROM a podmínka spojení se uvede jako součást výběrové podmínky za WHERE. Bez této podmínky by se provedl prostý kartézský součin všech tabulek za FROM. Rozlišení stejnojmenných sloupců se rozliší pomocí prefixu - jméno tabulky před jménem sloupce a oddělené tečkou.

SELECT {seznam_sloupců | *}FROM seznam_tabulek[WHERE podm_spojení]

Příklad: Jmenný seznam včelařů s adresami je v tabulce Včelaři a záznamy o každoročních sklizních v tabulce Med. Zajímá nás adresa včelaře Žáry a kolik získal medu v roce 1994.

SELECT Včelaři .jméno, adresa, medu FROM Včelaři, Med WHERE rok=1994 AND Včelaři.jméno=‘Žára’ AND ... selekce

Včelaři.jméno = Med.jméno; ... podm. spojení

Page 29: Teorie zpracování dat

29

Jazyk SQL

Pokud je název tabulky jako prefix nepohodlně dlouhý, nebo pokud potřebujeme jednu tabulku označit dvakrát pokaždé jinak (např. pro realizaci unární vazby), můžeme za klauzulí FROM každé tabulce zadat vlastní prefix.

SELECT {seznam_sloupců | *}FROM tab1 P1, tab2 P2, . . .

Příklad: V tabulce včelaři je také jméno předsedy místní organizace - u každého včelaře. Zajímá nás seznam včelařů, kteří získali více medu, než jejich předseda.

SELECT X.jméno, X.medu, Y.meduFROM VčelařiP X, VčelařiP YWHERE X.předs = Y.jmeno AND X.medu >Y.medu;

Page 30: Teorie zpracování dat

30

Jazyk SQL

Pokud se při spojování tabulek nenajde v jedné tabulce odpovídající řádek ze druhé tabulky, ve výsledku spojení se odpovídající hodnota spojovacího klíče neobjeví. Může však nastat situace, že požadujeme ve výsledné tabulce i tento řádek (odpovídající hodnoty ze druhé tabulky zůstanou prázdné), zadáme to příznakem (+) u podmínky spojení. Podmínka spojení může být nejen na rovnost hodnot.

Příklad: V tabulce včelaři mohou být členové, kteří v roce 1999 ještě včely nepěstovali, ale ve výsledném seznamu jejich jména požadujeme s nulovou snůškou medu.

SELECT X.jméno, M.meduFROM Včelaři X, Med MWHERE rok = 1999 AND M.jméno = X.jméno(+);

Page 31: Teorie zpracování dat

31

Jazyk SQL

Spojení více tabulek pomocí příkazu JOIN, levé a pravé spojení (LEFT/RIGHT JOIN). Pro levé spojení se vyberou všechny řádky z tabulky uvedené „vlevo“ a k nim pokud existují se přiřadí řádky z tabulky „vpravo“.

SELECT {seznam_sloupců | *}FROM Tab1 [LEFT,RIGHT] JOIN Tab 2 ON podm_spojení

Příklad: Jmenný seznam včelařů s adresami je v tabulce Včelaři a záznamy o každoročních sklizních v tabulce Med.

SELECT Včelaři .jméno, adresa, medu FROM Včelaři JOIN Med ON Včelaři.jméno = Med.jméno; ... podm. Spojení

Příklad: Jmenný seznam VŠECH včelařů a jejich případné sklizeň medu v roce 99. SELECT Včelaři .jméno, adresa, medu FROM Včelaři LEFT JOIN Med99 ON Včelaři.jméno = Med99.jméno;

Page 32: Teorie zpracování dat

32

Jazyk SQL

Výrazy a funkce

Pro vytváření výrazů používá SQL aritmetických operátorů a závorek v obvyklých významech.

Místo jména sloupce můžeme použít výraz, a to v seznamu za SELECT či v podmínce za WHERE.

Pokud je výraz použit jako prvek seznamu za SELECT a chceme příslušnému sloupci na výstupu přiřadit sloupcový nadpis vlastní, zapíšeme ho po mezeře za výrazem.

Pokud se nadpis skládá z více slov, uzavírá se do závorek.

Příklad:

SELECT jméno, medu/včel FROM Včelaři;

SELECT jméno, medu/včel (průměr medu) FROM Včelaři;

Page 33: Teorie zpracování dat

33

Jazyk SQL

Výrazy, funkce a NULL

Pokud je ve výrazu proměnná, která má hodnotu NULL, má celý výraz hodnotu NULL.

Někdy se takový výstup nehodí a chceme nahradit hodnotu NULL konkrétní náhradní hodnotou (např. nulou pro číslo nebo mezerou pro text). K tomu slouží funkce

NVL( prom, náhr_hodn )

Příklad:

SELECT jmeno, NVL(medu,0)/NVL(včel,1) průměr

FROM Včelaři;

Page 34: Teorie zpracování dat

34

Jazyk SQL

Funkce aritmetické:

POWER(číslo, mocnitel) ... mocninaROUND(číslo, poč_des_míst)TRUNC(číslo, poč_des_míst)ABS(číslo)SIGN(číslo)MOD(číslo1, číslo2)SQRT(číslo)GREATEST(seznam_hodnot) ... maximum v řádkuLEAST(seznam_hodnot) ... minimum v řádku

Page 35: Teorie zpracování dat

35

Jazyk SQL

Funkce řetězcové:

řetězec1 || řetězec2 LENGHT(řetězec)SUBSTR(řetězec,pozice,délka) ... výběr podřetězceINSTR(řetězec,podřetězec,pozice,pořadí)UPPER(řetězec)LOWER(řetězec)TO_NUMBER(řetězec) ... konverze text -> čísloTO_CHAR(řetězec[,formát]) ... datum či číslo -> textTO_DATE(řetězec[,formát]) ... text či číslo -> datumLPAD(řetězec,délka,[,znak]) ... doplní zlevaRPAD(řetězec,délka,[,znak]) ... doplní zpravaLTRIM(řetězec,množ_znaků) ... vypustí zlevaRTRIM(řetězec,množ_znaků) ... vypustí zpravaDECODE(sl,vzor1,obraz1,...,implic) ... překlad tabulkou

Page 36: Teorie zpracování dat

36

Jazyk SQL

Ve funkci DECODE obraz může být konstanta nebo jméno sloupce; může sloužit i jako přepínač, když ve sloupci nechceme homogenní hodnoty.

Příklad: V tabulce Zam ke každé funkci přidáme kategorii funkce 1-4 podle pravidla prof=3, doc=2, asist=1, ostatní=4.

SELECT jméno, funkce,

DECODE(funkce, ’asist’, 1, ’doc’, 2, ’prof’, 3, 4) kateg

FROM Zam;

jméno fce kateg

Adam Alois doc 2

Beran Bedřich topič 4

Čermák Cyril asist 1

Page 37: Teorie zpracování dat

37

Jazyk SQL

Příklad: U mimopražských včelařů budeme tisknout adresy, u pražských jen Praha (=okres).

SELECT jméno, DECODE(okres, ’Praha ’, okres, adresa) odkudFROM Včelaři;

jméno odkud

Adam Alois Praha

Beran Bedřich U pošty 15, Dobřichovice

Čermák Cyril Praha

Poznámka: Funkcí DECODE je možno docílit nehomogenních sloupců.

Page 38: Teorie zpracování dat

38

Jazyk SQL

Funkce agregované jsou nerelační funkce nad sloupci, vyžádané praxí.

AVG ({[DISTINCT] sez_výr|*}) ... průměr

SUM ({[DISTINCT] sez_výr|*}) ... součet

MIN ({[DISTINCT] sez_výr|*}) ... minimum

MAX ({[DISTINCT] sez_výr|*}) ... maximum

COUNT({[DISTINCT] sez_výr|*}) ... počet

Příklad: Určete prům, minim a maxim počet včelstev v okrese Karviná.

SELECT AVG(včel), MIN(včel), MAX(včel)FROM Včelaři WHERE okres = ‘Karviná’;

Příklad: Kolik je v okrese Praha včelařů ?

SELECT COUNT(*) FROM Včelaři WHERE okres = ‘Praha’;

Příklad: V kolika okresech včelaři pracují ?

SELECT COUNT (UNIQUE okres) FROM Včelaři;

Page 39: Teorie zpracování dat

39

Jazyk SQL

Grupování a podmínka na grupy

Tabulku můžeme uspořádat tak, že vzniknou skupiny řádků se stejnou hodnotou třídicího klíče. Pro skupiny můžeme provádět operace (částečné počty, součty ap.).

SELECT {seznam_výrazů | *}FROM seznam_tabulekGROUP BY seznam_sloupců

Příklad: Najděte průměrné množství medu v jednotlivých okresech.

SELECT okres, AVG(medu)FROM VčelařiGROUP BY okres;

Page 40: Teorie zpracování dat

40

Jazyk SQL

Atributy zdrojové relace tvoří 3 skupiny ... ve výsledné relaci (1) definující grupu ... 1 řádek = grupa(2) agregovatelné ... agregovaná hodnota grupy(3) ostatní ... nemají význam nebo 1.řádek grupy

(3)

jméno

(3)

adresa

(1)

okres

(2)

včel

(2)

medu

(1)

okres

AVG(2)

AVG(medu)

Beneš ... Opava ... 100 Opava 150

Gajdoš ... Opava ... 230 Bruntál 36

.. ...

Adam ... Bruntál ... 320 Ostrava 78

...

Žižka ... Ostrava ... 125

Page 41: Teorie zpracování dat

41

Jazyk SQL

Příklad: Rozdělte zaměstnance fakulty podle kateder a funkcí, pro každou tuto skupinu určete jejich počet a průměrný plat.

SELECT kat, funkce, COUNT(*), AVG(plat)FROM ZamGROUP BY kat, funkce;

kat fce COUNT(*) AVG(plat)

401 prog 3 8700

401 doc 7 7800

401 asist 12 6500

402 prof 2 8900

... ...

403 prof 1 9900

... ...

Page 42: Teorie zpracování dat

42

Jazyk SQL

Pokud pracujeme se skupinami a chceme formulovat podmínku pro celou skupinu, nejen pro jednotlivé řádky původních tabulek, nedává se tato podmínka za WHERE, ale za HAVING:

SELECT {seznam_výrazů | *}FROM seznam_tabulek[WHERE podm_pro_řádek][GROUP BY seznam-klíčů[HAVING podm_pro_skupinu] ]

Příklad: Najděte průměrný plat skupin na fakultě s více než 25 členy.

SELECT kat, funkce, COUNT(*), AVG(plat)FROM ZamGROUP BY kat, funkceHAVING COUNT(*) > 25;

Page 43: Teorie zpracování dat

43

Jazyk SQL

Příklad: Najděte katedry, kde jsou alespoň 2 sekretářky.

SELECT kat, COUNT(*)FROM ZamWHERE funkce = ‘sekretářka’GROUP BY katHAVING COUNT(*) >= 2;

Příklad: Najděte katedry s průměrným platem asistenta > 5000.

SELECT kat, AVG(plat)FROM ZamWHERE funkce = ‘asist’GROUP BY katHAVING AVG(plat) > 5000;

Page 44: Teorie zpracování dat

44

Jazyk SQL

Úplná syntaxe příkazu SELECT

SELECT {ALL | DISTINCT }{seznam_výrazů | *}FROM tab[ tabnázev] [, ...][ WHERE podm ][ GROUP BY seznam_sloupců [ HAVING podm ] ][ ORDER BY atr1 [ASC|DESC] [, atr2 ...] ]

Page 45: Teorie zpracování dat

45

Jazyk SQL Podotázky

Dotazy je možno řetězit, pro formulaci hlavního dotazu je možno použít výsledků dotazu jiného (poddotazu) v podmínce za WHERE v příkazech SELECT, UPDATE a DELETE.

1. pokud je výsledkem poddotazu jediná hodnota (relace o 1 řádku a 1 sloupci), pak kdekoliv místo hodnoty:

výraz rel_oper (příkaz SELECT)

(2.) pokud je výsledkem poddotazu n-tice hodnot (relace o 1 řádku), pak s relačními operátory = a <> místo n-tice hodnot:

výraz rel_oper (příkaz SELECT)

3. je-li výsledkem poddotazu množina hodnot (relace o 1 sloupci):

výraz [NOT] IN (příkaz SELECT)výraz rel_oper {[ANY | ALL]} (příkaz

SELECT)

ANY je minimální a ANY maximální prvek výsledné množiny

Page 46: Teorie zpracování dat

46

Jazyk SQL Podotázky

Příklad: Hledáme včelaře patřící do organizace jako Kovář Karel (mají stejného předsedu).

1. buď dvěma dotazy s „ručním“ přenesením mezivýsledku

SELECT předs FROM Včelaři WHERE jmeno = ‘Kovář Karel’;

SELECT jméno, adresa FROM Včelaři WHERE předs = ‘ ...’;

kde ‘...’ je výsledek 1. dotazu.

2. nebo zřetězeně s poddotazem

SELECT jméno, adresa FROM Včelaři

WHERE předs = (SELECT předs FROM Včelaři WHERE jméno=‘Kovář Karel’);

Page 47: Teorie zpracování dat

47

Jazyk SQL Podotázky

Příklad: Najděte včelaře, kteří mají stejné množství včelstev a získali stejné množství medu jako včelař Kovář Karel.

SELECT jméno, adresa, včel, medu FROM Včelaři WHERE (včel, medu) = (SELECT včel, medu

FROM VčelařiWHERE jméno = ‘Kovář

Karel’);

Příklad: Najděte funkce, které mají vyšší průměrný plat, než je průměrný plat docenta.

SELECT funkce, AVG(plat) FROM Zam GROUP BY funkce HAVING AVG(plat) > (SELECT AVG(plat)

FROM ZamWHERE funkce = ‘doc’);

Page 48: Teorie zpracování dat

48

Jazyk SQL Podotázky

Příklad: Najděte včelaře, kteří získali více medu než alespoň jeden včelař okresu Ústí (= víc než ten, co získal nejméně).

SELECT jméno, adresa FROM Včelaři WHERE medu > ANY (SELECT medu

FROM VčelařiWHERE okres = ‘Ústí’);

SELECT jméno, adresaFROM VčelařiWHERE medu > (SELECT MIN(medu)

FROM VčelařiWHERE okres = ‘Ústí’);

Page 49: Teorie zpracování dat

49

Jazyk SQL Podotázky

Příklad: Najděte včelaře, kteří mají více včelstev než kterýkoliv včelař okresu Ústí (= víc než ten, co má nejvíc)

SELECT jméno, adresa FROM Včelaři WHERE včel > ALL (SELECT včel

FROM VčelařiWHERE okres = ‘Ústí’);

SELECT jméno, adresaFROM VčelařiWHERE včel > (SELECT MAX(včel)

FROM VčelařiWHERE okres = ‘Ústí’);

Page 50: Teorie zpracování dat

50

Jazyk SQL Podotázky

Příklad: Vypište seznam včelařů a snůšku medu z okresů, jejichž průměrná snůška medu je větší než 100.

SELECT jméno, adresa, medu FROM Včelaři WHERE okres IN (SELECT okres

FROM VčelařiGROUP BY okresHAVING AVG(medu) > 100);

Příklad: Vypište seznam včelařů a snůšku medu z okresů Ostrava, Opava. SELECT jméno, adresa, medu

FROM Včelaři WHERE okres IN (‘Ostrava’, ‘Opava’);

Page 51: Teorie zpracování dat

51

Jazyk SQL Logické kvantifikátory

Některé složitější dotazy v relačním kalkulu vyžadují použití logických kvantifikátorů EXISTS a FORALL.

Existenční kvantifikátor v SQL je definován

  SELECT . . . FROM . . . [WHERE [NOT] EXISTS (SELECT ... FROM ... [...]) ]

kde EXISTS(SELECT ... ) = TRUE, je-li množina daná výrazem v závorkách neprázdná, jinak je FALSE; totéž lze formulovat pomocí IN.

Všeobecný kvantifikátor v SQL neexistuje, využívá se vztahu:

FORALL x (P(x)) = NOT EXISTS x (NOT P(x))

 Doporučený postup je1.    zapsat dotaz jako výraz relačního kalkulu včetně FORALL2.    pak jej mechanicky přepsat do SQL

Page 52: Teorie zpracování dat

52

Jazyk SQL

Příklad: Mějme relace Čtenář(id_čt, jméno,adresa), Kniha (prir, ISBN, autor, název) a Rezer (id_čt, prir, datod). Hledáme čtenáře, kteří mají nějakou knihu rezervovanou (= existuje záznam s jejich id_čt v Rezer)

SELECT jméno FROM ČtenářWHERE EXIST (SELECT C.*

FROM Rezer R, Čtenář C WHERE R.id_čt = C.id_čt)

nebo

SELECT jméno FROM ČtenářWHERE id_čt IN (SELECT UNIQUE id_čt

FROM Rezer R)

Page 53: Teorie zpracování dat

53

Jazyk SQL Množinové operace

Z množinových operací dosud známe IN a NOT IN, případně ALL, ANY.

Sjednocení SELECT ... FROM ... [WHERE ... GROUP BY ... HAVING ... ] UNION (SELECT ... FROM ... [...]) [ORDER BY ...]Průnik SELECT ... FROM ... [...] INTERSECT (SELECT ... FROM ... [...]) [...]Rozdíl SELECT ... FROM ... [...] EXCEPT (SELECT ... FROM ... [...]) [...]

Page 54: Teorie zpracování dat

54

Jazyk SQL Množinové operace

Příklad: Abecední jmenný seznam zaměstnanců i studentů.

SELECT jmeno FROM Student UNION (SELECT jmeno FROM Zam) ORDER BY jmeno

Pozor na častou chybu, není možno použít: FROM Student, Zam ...

Příklad: Jmenný seznam zaměstnaných studentů na VŠB.

SELECT jmeno FROM Student INTERSECT (SELECT jmeno FROM Zam)

Snadno se nahradí projekcí a selekcí nad kartézským součinem.

Page 55: Teorie zpracování dat

55

Jazyk SQL Množinové operace

Příklad: Jmenný seznam studentů nezaměstnaných na VŠB.

SELECT jmeno FROM Student EXCEPT (SELECT jmeno FROM Zam)

Page 56: Teorie zpracování dat

56

Jazyk SQL     Doplnění INSERT, UPDATE, DELETE

Pomocí příkazu INSERT je možno také naplňovat řádky tabulky hodnotami z jiné tabulky tak, že místo klauzule VALUES použijeme SELECT, v němž budou zadány řádky i sloupce jiných tabulek, které se do naší tabulky mají přenést.

INSERT INTO Tab [seznam_sloupců] SELECT seznam_hodnot FROM tab2 WHERE podm ...

Příklad: Do definované prázdné tabulky ostravských včelařů se opíší včelaři z celostátní evidence:

INSERT INTO Ostr_včelařiSELECT * FROM Včelaři WHERE okres = ‘Ostrava’;

Page 57: Teorie zpracování dat

57

Jazyk SQL     Doplnění INSERT, UPDATE, DELETE

Také u příkazů UPDATE a DELETE je možno za klauzulí WHERE používat všechny funkce, operátory, konstrukty, poddotazy jako u příkazu SELECT.

Příklad: Prémii ve výši 20% platu dostali všichni zaměstnanci uvedení v seznamu Odměny (jmeno).

UPDATE ZamSET plat = plat * 1.2WHERE jméno IN (SELECT jméno FROM Odměny);

Příklad: Zaměstnanci ze seznamu NoZam (jmeno) dostali výpověď.

DELETE FROM ZamWHERE jméno IN (SELECT jméno FROM NoZam);

Page 58: Teorie zpracování dat

58

Jazyk SQL     Pohledy

Pohled je virtuální tabulka přímo v databázi neexistující, ale definovatelná příkazem SELECT. Definuje se příkazem:

CREATE VIEW pohled ASSELECT {seznam_výrazů | *}FROM tab[WHERE podm][GROUP BY seznam_sloupců [HAVING podm] ][ORDER BY seznam_sloupců]

Práce s pohledem jako s tabulkou, změny v pohledu změní i hodnoty v tabulce, z níž je pohled odvozen a naopak.

Problémem změny ve virtuálních sloupcích, v pohledech setříděných ap., implementace práci s pohledy omezují.

Při vytváření virtuálních sloupců zadáme jména nově vzniklých sloupců za názvem pohledu.

Page 59: Teorie zpracování dat

59

Jazyk SQL     Pohledy

Příklad: Aplikace potřebuje jméno, adresu a medu včelařů z Ostravy.

CREATE VIEW Ostraváci ASSELECT jméno, adresa, meduFROM VčelařiWHERE okres = ‘Ostrava’;

Příklad: Jiná úloha potřebuje všechny údaje z obou tabulek včelaři i med.

CREATE VIEW Všichni ASSELECT *FROM Včelaři V, med MWHERE V.jméno = M.jméno;

Příklad:Potřebujeme tabulku ročních příjmů zaměstnanců.

CREATE VIEW Roční_příjem (jméno, měsíčně, ročně) ASSELECT jméno, plat, plat*12FROM Zam;

Page 60: Teorie zpracování dat

60

Jazyk SQL  Příkazy pro sdílení a ochranu dat

SQL obsahuje i příkazy podporující správu databáze - příkazy pro přidělování a odebírání přístupových práv na různých úrovních různým uživatelům databáze.

V implementacích v SŘBD platí: k tabulce vytvořené uživatelem má přístup jen on sám, pokud nezpřístupní svou tabulku jinému uživateli příkazem GRANT. Odebrat toto právo může příkazem REVOKE.

Některé SŘBD rozšiřují GRANT i REVOKE i na celou databázi.

Page 61: Teorie zpracování dat

61

Jazyk SQL 

Přidělení přístupového práva

GRANT tabulkové_právoON { tab | pohled }TO { PUBLIC | sez_jmen_uživatelů }

jméno uživatele je příslušný login_name, PUBLIC znamená zveřejnění tabulky všem uživatelům.

Tabulková práva rozlišují vymezení přístupu uživatelů k různým datům:

SELECT [(seznam_sloupců)] ... čtení příslušných sloupců INSERT ... vkládání řádků do tabulky UPDATE [(seznam_sloupců)] ... modifikace sloupců tabulky DELETE ... rušení řádků tabulky ALTER ... modifikace struktury tabulky INDEX ... vytváření indexů ALL ... všechna výše uvedená práva

Page 62: Teorie zpracování dat

62

Jazyk SQL Odebrání přístupového práva

REVOKE tabulkové_právoON { tab | pohled }FROM { PUBLIC | sez_jmen_uživatelů }

Příklad: Pro definovanou tabulku Zam(RČ,jméno,adresa,plat,fce) povolte záznam zaměstnance - RČ, jméno, adresa perzonalistce s loginem ABC20, plat, fce vedoucímu katedry login DEF30, ostatním jen prohlížení jména, adresy, fce, správci databáze GHI40 všechna práva. REVOKE ALL ON Zam FROM PUBLIC GRANT INSERT ON Zam TO ABC20 GRANT UPDATE(RČ, jméno, adresa) ON Zam TO ABC20 GRANT SELECT(RČ, jméno, adresa) ON Zam TO ABC20 GRANT UPDATE(plat, fce) ON Zam TO DEF30 GRANT SELECT(plat, fce) ON Zam TO DEF30 GRANT SELECT(jméno, adresa, fce) ON Zam TO PUBLIC GRANT ALL ON Zam TO GHI40

Page 63: Teorie zpracování dat

63

Jazyk SQL  Další možnosti SQL

SQL není jen dotazovací jazyk, ale obsahuje i příkazy další. Již známe

• příkazy JDD, definuje, modifikuje a ruší tabulky, indexy, pohledy

• příkazy JMD, ukládá data do databáze, modifikuje je a ruší

• dotazovací jazyk reprezentuje mohutný příkaz SELECT

• příkazy pro přidělování přístupových práv

Ale to není všechno, současný SQL obsahuje i

• pro záznam některých integritních omezení

• pro vytváření hierarchických struktur dat

• pro definici a manipulaci s neatomickými atributy (pole, množiny, seznamy, BLOB, hnízděné relace, dokumenty, video, audio, mapy, časové řady, prostorové objekty, ...)

• pro řízení transakcí

• pro práci se systémovým katalogem

• a další

Page 64: Teorie zpracování dat

64

Jazyk SQL  Další možnosti SQL

Příklad: neatomické atributy – pole, odhnízdění, poziční přístup

CREATE TABLE Články (id NUMBER(4), autoři CHAR(15) ARRAY [20], titul CHAR(100), abstrakt FULLTEXT )

SELECT Z.id, A.jménoFROM Zprávy Z, UNNEST (Z.autoři) AS A(jméno) ...

SELECT id, autoři[1],autoři[2] FROM Články WHERE ...

Příklad: Zam(jméno, ..., vzdělání, jazyky), hledáme vysokoškoláka se znalostí angličtiny a němčiny.

SELECT jménoFROM ZamWHERE vzdělání CONTAINS RT(univerzita) AND jazyky CONTAINS ‘angličtina’ AND ‘němčina’

Page 65: Teorie zpracování dat

65

Doménový relační kalkul

Oborem hodnot proměnných jsou prvky domén.

Abeceda doménového kalkulu

• konstanty atomické, př. 3, ¨Novák¨

predikátové; příslušnost k relaci, n-ární, př. Zam, Student

• proměnné doménové, př. x, y, xjmeno, xplat

• operátory predikátové binární < <= > >= = <> , obecně *

logické a kvantifikátory OR AND NOT EXIST FORALL

• oddělovače ( )

Page 66: Teorie zpracování dat

66

Doménový relační kalkul

Atomické formule doménového kalkulu jsou:

• R(x1,x2,...,xn), kde R je jméno relace stupně n, xi jsou buď doménové proměnné nebo atomické konstanty; vyjadřuje, že n-tice hodnot x1, ..., xn je prvkem relace R;

Aby v této formuli nebyl seznam proměnných závislý na pořadí atributů, zapisuje se obvykle pro schéma relace R(a,b,c,...) formule příslušnosti n-tice k relaci

R(a:x1,b:x2,c:x3,...);

• x * y, kde x, y jsou doménové proměnné nebo atomické konstanty, * je binární predikátový operátor < <= > >= = <>

Formule doménového kalkulu se vytváří stejně, jako u n-ticového kalkulu (NOT F1, F1 OR F2, ...)

Page 67: Teorie zpracování dat

67

Doménový relační kalkul

Výraz doménového relačního kalkulu je výraz tvaru

x1, x2, …, xn WHERE F(x1, x2, ..., xn)

kde x1, ... , xn jsou jediné navzájem různé volné doménové proměnné ve formuli doménového relačního kalkulu F.

Výraz určuje relaci tvořenou všemi možnými n-ticemi hodnot proměnných x1, x2, ..., xn, které splňují formuli F.

Page 68: Teorie zpracování dat

68

Doménový relační kalkul

Příklad: Učitel (ČU, jméno, kat, plat), Úvazek (ČU, ČP, hodin).

1: Seznam čísel učitelů a jejich počtu hodin v jednotlivých předmětech

(= úplný výpis relace Úvazek)

xČU, xČP, xhodin WHERE Úvazek(ČU: xČU, ČP:xČP, hodin: xhodin)

2: Určete jmenný seznam učitelů, jejich kateder a platů (projekce)

xjméno, xkat, xplat

WHERE EXIST z (Učitel(ČU:z, jméno: xjméno, kat: xkat, plat: xplat))

3: Seznam čísel učitelů, kteří učí předmět P2 (selekce a projekce)

xČU

WHERE EXIST z (Úvazek (ČU: xČU,ČP: z, hodin: z)) AND ČP='P2'

4: seznam učitelů a jejich úvazků v hodinách (přirozené spojení)

xču, xjm, xkat, xpl, xčp, xhod

WHERE (Učitel (ČU: xČU, jméno: xjm, kat: xkat, plat: xpl) AND

Úvazek(ČU: xČU, ČP: xČP, hodin: xhod))

Page 69: Teorie zpracování dat

69

Doménový relační kalkul

Poznámka: Pomocí existenčního kvantifikátoru doplňujeme do n-tice ty proměnné, které se nevyskytují v seznamu na levé straně; zavedením jiné notace můžeme existenční kvantifikátor vynechat: do formule znamenající příslušnost prvku k relaci zapíšeme jen volné proměnné, ostatní proměnné vázané existenčním kvantifikátorem vynecháme a chápeme existenční kvantifikaci implicitně.

Místo

xjméno WHERE EXIST z (Učitel(ČU:z, jméno: xjméno, kat: z, plat: z))

píšeme

xjméno WHERE (Učitel(jméno: xjméno))

Příklad: Učitel (ČU, jméno, kat, plat), Úvazek (ČU, ČP, hodin).

3. xČU WHERE Úvazek(ČU: xČU) AND ČP='P2'

Page 70: Teorie zpracování dat

70

Jazyk QBE (Query By Example)

• Původně vytvořen u firmy IBM, popsán Zloofem, 1975, pro pohodlné zadávání výběrových podmínek pro naivní uživatele.• Postupně se z něj vytvořil standard, implementovaný u řady SŘBD, podobně jako jazyk SQL.• Svými schopnostmi formulovat výběrové podmínky je stejně silným prostředkem, jako je jazyk SQL. • Také již není jen dotazovacím jazykem, ale obsahuje prostředky pro definici a manipulaci s daty, pro práci s pohledy, se systémovým katalogem ap. • Dotazy jsou vyjadřovány interaktivně pomocí příkladů. Tabulky se formou prázdných tabulkových schémat zobrazují na obrazovce. Dotaz se zapíše do příslušných sloupců prázdné tabulky - vypíší se hodnoty, které se ve sloupcích hledají.

Page 71: Teorie zpracování dat

71

Jazyk QBE

Příklad: Relace Zam(osob, jméno, adresa, plat).

Po volbě tabulky se zobrazí prázdný řádek tabulky.

Zam osob jméno adresa plat

Do řádků se zapisují příkazy QBE, proměnné a výběrové podmínky.

Příkazy jazyka uvedeme na příkladech

Proměnná začíná podtržítkem: _jmeno, _plat, _novak, _x, _y

Výběrové podmínky se zapisují standardně, AND, OR dle implementace

Na rozdíl od SQL jazyk QBE podporuje odstranění duplicitních řádků výsledné relace. Zajištění všech řádků se naopak zajistí klauzulí ALL.

Page 72: Teorie zpracování dat

72

Jazyk QBE

Příklad: Relace Zam(osob, jméno, adresa, plat).

1. Výpis celé tabulky se zadá znakem P. (= print) pod jméno relace

Zam osob jméno adresa plat

P.

2. Selekce se zapíše hledanými hodnotami ve sloupcích s případným použitím relačního operátoru.

Vypište jména zaměstnanců bydlících v Opavě.

Zam osob jméno adresa plat

P._x Opava

Page 73: Teorie zpracování dat

73

Jazyk QBE

Příklad:

3. Projekce se zapíše znakem P. do příslušného sloupce a vyjádřením proměnné: P._Novák

Vypište jména a adresy všech zaměstnanců.

Zam osob jméno adresa plat

P. P.ALL._Novák P._Opava

_Novák je proměnná, tedy stačí _x, užíváme různé proměnné v různých sloupcích. Prostou projekci můžeme někdy zapsat i bez proměnné.

Zam osob jméno adresa plat

P.ALL._x P._y

Zam osob jméno adresa plat

P. P.

Page 74: Teorie zpracování dat

74

Jazyk QBE

Příklad:

4. Selekce a projekce současně.

Vypište osobní čísla a jména zaměstnanců s platem menším než 3500.

Zam osob jméno adresa plat

P. P. P. < 3500

5. Konjunkce více podmínek se píše do řádku vedle sebe.

Najděte zaměstnance mimo Ostravu s platem větším než 10000.

Zam osob jméno adresa plat

P. <>Ostrava >10000

Složitější podmínky, jako více podmínek na jeden sloupec, disjunkce podmínek a další implementují různé SŘBD různě.

Page 75: Teorie zpracování dat

75

Jazyk QBE

Příklad: Najdi jména a osobní čísla zaměstnanců s platem 3000 - 4000.

6. Konjunkce dvou a více podmínek na jeden sloupec se buď• píše do speciálního okna na obrazovce (CONDITION BOX),• nebo existuje možnost rozšířit tabulku o duplicitní sloupce:

• nebo podmínky do dvou řádků a současně stejné proměnné:

Zam osob jméno adresa plat

P._xP._x

P._y P._y

>3000<4000

• nebo se seznam podmínek píše na oddělený čárkou.

Zam osob jméno adresa plat plat

P. P. >3000 <4000

Zam osob jméno adresa plat

P._x P._y >3000,<4000

Page 76: Teorie zpracování dat

76

Jazyk QBE

Příklad: Najdi zaměstnance s platem pod 3000 nebo nad 30000.

7. Disjunkce podmínek se píše do dvou a více řádků tabulky s použitím různých proměnných.

8. Vzestupné setřídění výstupní relace se předepíše AO(n), sestupné DO(n) a v závorce zapsané číslo n znamená pořadí třídicího klíče.

Vypište zaměstnance dle výše platu - od nejvyššího k nejnižšímu, při stejném platu dle abecedy.

Zam osob jméno adresa plat

P._xP._y

< 3000>30000

Zam osob jméno adresa plat

P. P.AO(2) P.DO(1)

Page 77: Teorie zpracování dat

77

Jazyk QBE

Příklad:

9. Pro dotaz vyžadující spojení dvou tabulek se vyvolají formuláře obou tabulek a podmínka spojení se vyjádří použitím stejné proměnné v obou tabulkách.

Je dána další relace Děti (jméno_d, rodcis, osob). Osob je cizí klíč ze Zam. Vypište adresy všech dětí (= adresy rodičů).

10. Agregace používají funkcí CNT, SUM, AVG, MIN, MAX, grupování pomocí G.

Zam osob jméno adresa plat

_x P._z

Děti jmeno_d rč osob

P._y _x

Zam kat osob jméno adresa plat

P.G. SUM._x