Cvičení 2
Opakování z přednášky
Přednáška neproběhla kvůli státnímu svátku.
Témata cvičení
- úprava tabulek
- dotazy na tabulku
- programové připojení k databázi
Úprava tabulek (ALTER TABLE)
Minule někteří z nás narazili na potřebu změnit nějakou tabulku, ať už kvůli překlepu při jejím vytváření, kvůli změně názoru na vhodný typ sloupce, nebo z jiných důvodů. K tomu v SQL slouží příkaz ALTER TABLE.
Nás zajímají zejména varianty:
Přidání nového sloupce column_name typu column_type do tabulky name.
ALTER TABLE name ADD COLUMN column_name data_type;
Odebrání sloupce column_name z tabulky name.
ALTER TABLE name DROP COLUMN column_name RESTRICT;
Přejmenování sloupce column_name_old na column_name_new v tabulce name.
ALTER TABLE name RENAME COLUMN column_name_old TO column_name_new;
Změna typu sloupce column_name na data_type v tabulce name.
ALTER TABLE name ALTER COLUMN column_name TYPE data_type,
Přejmenování tabulky name_old na name_new.
ALTER TABLE name_old RENAME TO name_new;
Mnoho dalších variant, které (zatím) používat nebudeme: změny integritních omezení, přesuny tabulek ve schématech, …
Z dokumentace “The key word COLUMN is noise and can be omitted.”
(ukázky)
Dotazy na tabulku - projekce, restrikce (SELECT)
Zde se budeme pohybovat jen na intuitivní úrovni. Vše důležité k projekcím a restrikcím bude sděleno na přednáškách a poté se k tomu vrátíme i zde. Dnes si jen ukážeme pár příkladů použití SELECT.
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).
Projekce - výběr sloupců tabulky
Mohou nás zajímat jen některé sloupce tabulky, pak použijeme příkaz SELECT následovně:
SELECT col_1, col_2, ... , col_n FROM name;
(ukázka - příkaz vracející projekci tabulky zvire na sloupce vek, pocet_nohou a mame_radi.)
Výběr všech sloupců pomocí *.
Restrikce - výběr řádků tabulky
Stejně tak nás mohou zajímat jen některé řádky tabulky. To ale znamená, že musíme nějak specifikovat které. K tomu slouží další 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;
(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)
Kombinace
Projekce a restrikce lze samozřejmě kombinovat.
SELECT col_1, col_2, ... , col_n FROM name WHERE condition;
(ukázka - výběr druhu a počtu nohou u zvířat, která máme rádi)
Napojení na databázi z programu
K databázi se samozřejmě lze připojit i přímo z nějakého námi vytvářeného programu. Snad každý dostatečně zavedený jazyk má nějakou knihovnu umožňující pohodlnou práci s PostgreSQL.
Server: database.inf.upol.cz:5432
(ukázka Java)
Úkoly
Pomocí příkazu/ů ALTER TABLE upravte tabulky se zaměstnanci z minulého cvičení do tvaru
- jméno tabulky: zamestnanec
- sloupce:
- jmeno typu varchar(20)
- prijmeni 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)
Aktulaizace: pohlavi přejmenováno na gender.
Napište příkazy SELECT, které z tabulky zamestnanec vyberou:
- Jména a příjmení bezdětných zaměstnanců.
- Zaměstnance (všechny sloupce), kteří mají kancelář číslo 007.
- Jméno, pohlaví, datum narození a datum nástupu zaměstnanců, kteří do zaměstnání nastoupili ještě před vlastním narozením.
- Zaměstnance (všechny sloupce), kteří mají více dětí než je číslo jejich kanceláře.
Přidejte do tabulky zamestnanec nové řádky tak, aby každý z příkazů z předchozího úkolu vrátil jedinečný výsledek.
Zkuste se připojit k databázi na database.inf.upol.cz ze svého oblíbeného programovacího jazyka a něco udělat (CREATE TABLE, SELECT, ALTER TABLE, DROP TABLE, …)