Cvičení 10
Témata hodiny
- Skalární výrazy
- Operace rozšíření
- Singletony a operátor IN
- Agregace
Skalární výrazy
- výrazy, jejichž hodnota je daného skalárního typu
- hodnotu určujeme vzhledem k n-tici
- literály - skalární výrazy mající stejnou hodnotu vzhledem ke každé n-tici
- lze vytvářet n-tici obsahující pouze literál
(SELECT literal AS atr_name
)
Skalární výrazy typu integer
- literály: celá čísla v daném rozsahu
- jsou-li e1 a e2 skalární výrazy typu integer, tak i
- -e1 je skalární výraz téhož typu
- (e1 op e2), kde op binární operátor je +,-,*,/,%,^, …, je skalární výraz téhož typu
- obvyklá priorita operátoru
- asociativita zleva
Skalární výrazy typu boolean
- literály: true - pravda, false - nepravda
- jsou-li e1 a e2 skalární výrazy typu boolean, tak i
- NOT e1 je skalární výraz téhož typu
- (e1 AND e2) je skalární výraz téhož typu
- (e1 OR e2) je skalární výraz téhož typu
- jsou-li e1 a e2 skalární výrazy typu integer, tak
- (e1 comp e2), kde comp je operátor porovnávání <,>,=, < =, > =, < >, je skalární výraz typu boolean
- (podobně pro další typy: čísla, data, řetězce, )
- priorita:
- aritmetika
- porovnávání
- logické operace
Skalární funkce
- volání funkce je skalární výraz
- tvar volání fukce f s argumenty a1, …, an je f(a1,…,an)
- seznam funkcí a operátorů v PostgreSQL
- (ukázka)
Operace rozšíření
- nová relační operace
- rozšiřuje relaci R o nový atribut A, jehož hodnota v n-tici T je určena skalárním výrazem E
- tj nová relace má atributy z R plus nový atribut A, jehož hodntoa se pro každou novou n-tici dopočítá z původní n-tice T v R pomocí výrazu E
- výsledkem je nová relace
- zapisujeme pomocí SELECT, to vede na změnu našeho dosavadního vyhodnocovaní SELECTU
- Získání vstupních relací
- Přejmenování na vstupní atributy
- Spojení
- Restrikce
- Rozšíření (vygenruje se unikátní jméno atributu)
- Projekce (nový atribut se zahrne do projekce)
- Přejmenování na výstupní atributy (a přejmenuje se dle zadání)
- (ukázka)
Rozšíření a aktualizovatelnost
- virtuální relační proměnná (pohled) může mít některé atributy aktualizovatelné a jiné ne
- “Atribut aktualizovatelné virtuální relační proměnné je aktualizovatelný, pokud je definovaný skalárním výrazem tvořeným pouze aktualizovatelným atributem.”
- Tedy pokud jde přímo o atribut ze základní relace, tak je aktualizovatelný. Pokud jsme použili nějaký jiný skalární výraz, tak ne.
- (ukázka)
Singletony
- singleton - relace s aritou i kardinalitou 1
- dá se zaměnit přímo za hodnotu, která v ní je
- (ukázka)
Operátor IN
- obsahuje daná relace danou hodnotu?
- omezení: daná relace musí mít aritu 1 (jeden atribut A), daná hodnota musí být téhož typu jako atribut A
- (ukázka)
Agregace
- funkce očekávající buďto jeden atribut (A) dané relace, nebo všechny atributy (*) dané relace
- vrací jednu hodnotu skalárního typu
- příklady: max, min, count, sum, …
- (ukázka)
Zápočtový úkol
- Zadání je na webu
Úkoly na hodině
- Odkaz (Případně v publicu 10-zamestnanci.sql)
- Ukázka z hodiny