Cvičení 2
Témata cvičení
- sjednocení, průnik, rozdíl
- podmínky a restrikce
Průběh cvičení
- první písemka
- opakování z přednášky
- úkoly na cvičení z doprovodných textů
- vytváření, plnění a mazání tabulek v PostgreSQL
Dotazy na tabulku - SELECT
Pár (i pokročilých) příkladů použití SELECT v dokumentaci.
Podmínky a základní SELECT výraz
Mohou nás zajímat jen některé řádky tabulky. To ale znamená, že musíme nějak specifikovat které. K tomu slouží forma příkazu SELECT, kdy condition je podmínka, kterou musí splnit řádek, pokud má být ve výsledné tabulce:
SELECT * FROM name WHERE condition;
Pro informace k podmínkám a jejich tvorbě v SQL vizte texty přednášek nebo dokumentaci.
Příkazy UPDATE a DELETE
Příkaz UPDATE umožňuje měnit hodnoty atributů v n-ticích splňujících dané podmínky.
UPDATE name SET col1 = val1, col2 = val2, ... , coln = valn WHERE condition;
Příkaz DELETE umožňuje mazat n-tice splňující dané podmínky.
DELETE FROM name WHERE condition;
Množinové operace
- sjednocení (UNION), průnik (INTERSECT) a rozdíl (EXCEPT)
- existují i verze UNION ALL, INTERSECT ALL a EXCEPT ALL, které pracují s duplicitami
- argumenty musí mít kompatibilní typy (tj mít stejný počet sloupců a sloupce po řadě kompatibilní)
Ukázky
Úkoly
Vytvořte tabulku pro evidenci zaměstnanců s vlastnsotí “Pracuje u nás zaměstnanec se jménem
name
, příjmenímsurname
, …”:- jméno tabulky: employee
- sloupce:
- name typu varchar(20)
- surname typu varchar(20)
- birthday typu date
- job_start_day type date
- office typu int
- email type varchar(50)
- web typu varchar(50)
- children_count typu smallint
- gender typu char(1)
Napište příkazy SELECT nad tabulkou employee s vlastností:
- Bezdětný zaměstnanec se jménem
name
, příjmenímsurname
, … - Zaměstnanec se jménem
name
, příjmenímsurname
, … pracuje v kanceláří číslo 007. - Zaměstnanec se jménem
name
, příjmenímsurname
, …, který do zaměstnání nastoupil ještě před vlastním narozením. - Zaměstnanec se jménem
name
, příjmenímsurname
, …, který má více dětí než je číslo jeho/její kanceláře.
- Bezdětný zaměstnanec se jménem
Přidejte do tabulky employee nové řádky tak, aby každý z příkazů z předchozího úkolu vrátil jedinečný výsledek.
Zkuste si nad tabulkou employee libovolné úpravy a mazání ntic.
Tady máte skript vytvářející tři relace: novakovi, kroupovi a kralikovi obsahujici soupis majetku tří rodin. Navrhněte dotazy vracející následující výsledky. Vyzkoušejte je.
- Objekty, které mají v domácnosti Nováků nebo v domácnosti Kroupů.
- Všechny objekty všech domácností (tj. Nováků, Kroupů i Králíků).
- Objekty, které mají jen Novácí (tj. nemají je Kroupovi ani Králíkovi). d4. Objekty, které má jen jedna rodina (kterákoliv).
Nyní pracujte pouze s relací novakovi a vyjádřete (kde je to možné) relace s následujícími vlastnostmi.
- Obsahující pouze objekty s jinou než bílou barvou.
- Obsahující pouze objekty s cenou vyšší než 1000.
- Obsahující pouze bíle objekty těžší než 5.
Zkuste to:
- Nejprve pomocí relačních operací průniku, sjednocení a rozdílu nad relací získanou z dat SELECT výrazem s jednoduchou podmínkou. T.j výsledky více jendoduchých SELECT výrazů kombinujte danými operacemi.
- Poté pomocí složených podmínek v SELECT výrazu nad původní relací. Tj. napište jeden SELECT dělající totéž složenou podmínkou.