Databáze
- propojené tabulky
- např. seznam zaměstnanců a laptopů, propojení kdo vlastní který
- nebo seznam objednávek (výrobek, zákazník, faktura)
- nebo data k blogu (autoři, blogposty, komentáře)
- narozdíl od tabulek v kalkulátoru (typu Excel) zajišťují tzv. ACID vlastnosti
- Atomicity: pokud se provádí více operací, tak se buď provedou všechny, nebo žádná
- Consistency: v databázi jsou jenom platná data (neplatné mezistavy nevidíme)
- Isolation: více uživatelů může pracovat s toutéž databází a nic se nerozbije
- Durability: data se neztrácí
Příklady co kreslím obvykle na tabuli
Příklad tabulky z geekgirls.com
Jednoduché schéma je na database.guide
Klíče
- primární klíč
- jednoznačná identifikace řádku
- typicky automaticky zvyšované celé číslo
- cizí klíč
- v propojené tabulce, odkaz na primární klíč jiné tabulky
Další poznámky
- filtrování dat provádějte co nejvíce na straně databáze
- je to rychlejší
- typicky je
SELECT
jednodušší než vnořené for cykly apod.
- pokud se v řádcích opakuje více stejných hodnot ve více sloupcích, asi je potřeba zavést další tabulku a jen se na ní odkazovat
Jazyk SQL
- jazyk pro práci s databázovými daty
- hodně upovídaný
- (téměř) nezávislý na skutečně použité databází
- výrobci se typicky liší v nabízených datových typech
- základní typy (
integer
,text
jsou všude stejné)
- základní typy (
- výrobci se typicky liší v nabízených datových typech
Příkaz SELECT
- výběr dat
SELECT sloupce FROM tabulky WHERE podmínka
- více tabulek
- výchozí nastavení - kartézský součin
- každý řádek z tabulky 1 s každým řádkem z tabulky 2
-
JOIN
část- které sloupce musí odpovídat
- typicky navázané klíče
- výchozí nastavení - kartézský součin
- příklad
- všimněte si přístupu ke sloupečkům pomocí jména tabulky
- sloupce je možné přejmenovat
- složité dotazy formátujeme rozumným způsobem
SELECT trida.jmeno trida, student.jmeno jmeno, student.prijmeni prijmeni FROM trida JOIN student ON (trida.id = student.trida) WHERE student.prijmeni = "Novák"
- seskupování hodnot (
GROUP BY
)- databáze umí tzv. agregaci: např. říci počet řádků odpovídající
danému kritériu
- pokud chceme jen celkový počet (typu
SELECT COUNT(id) FROM tab
), klauzuleGROUP BY
ani není potřeba
- pokud chceme jen celkový počet (typu
- databáze umí tzv. agregaci: např. říci počet řádků odpovídající
danému kritériu
SELECT trida.jmeno trida, COUNT(student.id) pocet FROM trida JOIN student ON (trida.id = student.trida) GROUP BY trida.id
Příklady
Základní data jsou k dispozici ke stažení:
- kraje a města
- kniha jízd
-
on-line formulář (heslo
3*b..
)
Kraje a města (demonstrace):
- Seznam všech měst
- Seznam všech krajů
- Seznam měst (jen názvy)
- Seznam malých měst
- Města ve středních Čechách
- Města a kraje (takto ne!)
- Města a kraje
- Součet obyvatelů ve městech
- Součet obyvatelů v kraji
- Součet obyvatelů ve městech
- Počet měst
- Počet obyvatel v daném kraji po městech
- Počty obyvatelů v krajích (takto ne!)
- Počty obyvatelů v krajích
- Počty obyvatelů v městech po krajích (takto ne!)
- Počty obyvatelů v městech po krajích
Kniha jízd (samostatně) (řidiči, vozidla a jízdy):
- Zjistěte příjmení řidičů.
- Vypište seznam dodávek.
- Vypište datum jízdy a SPZ vozidla a vzdálenost.
- K předchozímu přidejte jméno řidiče.
- Vypište pouze jízdy (bod 4) delší než 100km.
- Kolik je v databázi řidičů?
- Kolik jízd bylo v února 2013?
Další úlohy jako bodovaná práce.
Příkaz CREATE TABLE
- vytvoření tabulky s daty
CREATE TABLE jmeno ( definice sloupců )
- definice sloupce je tvořena
- jménem sloupce
- datovým type (např.
integer
čitext
) - omezením a dalšími vlastnostmi
- např.
NOT NULL
- nebo
PRIMARY KEY AUTOINCREMENT
- např.
CREATE TABLE vozidlo ( `id` INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, `spz` TEXT NOT NULL, `typ` TEXT NOT NULL, `nosnost` INTEGER NOT NULL );
Příkaz INSERT
- vkládání nových dat
INSERT INTO tabulka ( sloupce ) VALUES ( hodnoty )
INSERT INTO vozidlo ( id, nosnost, spz, typ ) VALUES ( 5, 5000, "1A9 89-45", "dodávka" )
Příkaz UPDATE
- aktualizace dat
-
WHERE
část podobná jako uSELECT
u
UPDATE tabulka SET hodnoty WHERE podmínka
UPDATE vozidlo SET spz="1A8 89-45" WHERE id = 5
Příkaz DELETE
- výmaz dat
- při vhodném nastavení může způsobit kaskádové vymazání dat
DELETE FROM tabulka WHERE podmínka
DELETE FROM vozidlo WHERE id = 5
„Servisní“ dotazy
- zjistit seznam tabulek apod.
- liší se podle autora/výrobce skutečně použité databáze
- MySQL
SHOW TABLES
DESCRIBE TABLES
- SQLite