Cvičení 3
Témata cvičení
- Množinové operace: průnik, sjednocení, rozdíl
- Restrikce
- UPDATE a DELETE
Opakování z přednášky
- množinové operace nad relacemi a nad tabulkami,
- UNION, INTERESECT a EXCEPT v SQL,
- restrikce relace a restrikce tabulky,
- příkaz SELECT * FROM … WHERE podmínka,
- složené podmínky (OR, AND a NOT),
- příkazy UPDATE a DELETE.
Restrikce - výběr řádků tabulky
V dané situaci nás mohou zajímat jen některé řádky tabulky. To ale znamená, že musíme nějak specifikovat které. K tomu slouží příkaz SELECT v následujcí formě, kdy condition je podmínka, kterou musí splnit řádek, pokud má být ve výsledné tabulce:
SELECT * FROM name WHERE condition;
Předpokládejme tabulku zvire se sloupci:
- jmeno (varchar(10)),
- druh (varchar (10)),
- vek (smallint),
- pocet_nohou (int),
- srst (boolean),
- supiny (boolean)
- mame_radi (boolean).
Podmínka condition může být složena z více jednodušších podmínek pomocí logických spojek - v SQL OR, AND, NOT.
(ukázky - příkaz vracející restrikci tabulky na: zvířata se srstí; zvířata s alespoň 2 nohama, která máme rádi; alespoň 5 let stará zvířata, která nemáme rádi)
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ázka)
UPDATE a DELETE
Příkaz UPDATE umožňuje měnit hodnoty sloupců (atributů) v řádcích (n-ticích) splňujících dané podmínky.
UPDATE name SET col1 = val1, col2 = val2, ... , coln = valn WHERE condition;
(ukázka)
Příkaz DELETE umožňuje mazat řádky (n-tice- splňující dané podmínky.
DELETE FROM name WHERE condition;
(ukázka)
Úkoly
Tady (a také na serveru v adresaří /home/PUBLIC/) 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. Dotazy si pište do skriptu, třeba do toho dodaného, ať si to nakonec můžeme celé projít.
- 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).
- Objekty, které má jen jedna rodina (kterákoliv).
Nyní si představte, že můžete do relace novakovi pouze přidávat (INSERT), z relace kroupovi pouze mazat (DELETE) a v relaci kralikovi pouze měnit hodnoty (UPDATE). Pomocí těchto akcí zajistěte, aby platilo:
- Dotaz 1. a dotaz 2. vrátí stejnou relaci.
- Dotaz 3. a dotaz 4. vrátí stejnou relaci.
- Dotaz 1. a 3. vrátí stejnou relaci.
Nyní pracujte pouze s relací novakovi a vyjádřete (kde je to možné) nejprve pomocí množinových operací nad restrikcí tabulky s jednoduchou podmínkou a poté pomocí složených podmínek v restrikci relace:
- 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.