1 of 49

Databáze v geoinformatice IV.

Mgr. Michal Jakl

ZS 2025

2 of 49

Obsah lekce

  1. SQL
  2. SQLite

Praktické cvičení:

Procvičení SQL a výběr témat SP

3 of 49

1. SQL – transakce

  • DML příkazy lze zapouzdřit do transakcí
  • V rámci transakce můžeme provést několik DML příkazů, ale teprve po posledním z nich rozhodneme, zda všechny provedené změny budou platné nebo ne
  • Databáze zajistí, že budou provedeny buď všechny změny, nebo žádná
  • Pro řízení transakcí existují 2 základní příkazy:
    • Příkaz COMMIT transakci potvrdí
    • Příkaz ROLLBACK transakci zruší
  • Transakce začíná spuštěním prvního DML příkazu
  • Změny prováděné v rámci transakce nejsou před spuštěním COMMIT mimo transakci viditelné, jinými slovy, ostatní uživatelé vidí stále stejná data jako před zahájením transakce.

4 of 49

1. SQL – řízení přístupu

  • Poslední skupinou SQL příkazů jsou příkazy pro řízení přístupových oprávnění.
  • Platí politika, že které objekty vytvořím ty také vlastním a rozhoduji o tom, kdo další k nim bude mít přístup
  • Oprávnění se udělují na celé objekty, tedy například na celý obsah tabulky
  • Lze však specifikovat, jaké operace bude moci jiný uživatel nad objektem používat

  • Typy oprávnění odpovídají DML příkazům
    • Můžeme tedy zpřístupnit tabulku pro čtení, tím že povolíme příkaz SELECT, ale zakážeme ostatní operace INSERT, UPDATE, DELETE
    • K udělování oprávnění se používá příkaz GRANT
      • GRANT opravneni ON objekt TO uzivatel
      • GRANT SELECT ON tabulka1 TO Novak
        • Po spuštění tohoto příkazu může uživatel Novak spouštět příkazy SELECT nad tabulkou tabulka1
    • Odejmout přidělená práva můžeme příkazem REVOKE
      • REVOKE opravneni ON objekt FROM uzivatel
      • REVOKE SELECT ON tabulka1 FROM Novak

5 of 49

1. SQL – AS (alias)

🧠 Co to je:

AS (alias) slouží k dočasnému přejmenování tabulky, sloupce nebo celé výsledné relace.

Alias:

  • zjednodušuje psaní dlouhých názvů
  • zvyšuje čitelnost dotazu
  • umožňuje rozlišit stejné názvy z více tabulek (např. v JOINech)

6 of 49

1. SQL – AS (alias)

7 of 49

1. SQL – JOIN (spojení)

JOIN spojuje řádky z více tabulek na základě společného klíče. Každý řádek z první tabulky se porovnává s řádky druhé tabulky, a pokud splní podmínku, vznikne nový kombinovaný řádek.

✅ Výhody JOINů

  • propojení tabulek bez redundance (logické, ne fyzické)
  • čitelné a efektivní – optimalizátor dotazů rozpozná vhodné cesty
  • možnost kombinovat různé vztahy (1:N, M:N)
  • základ pro analýzy, reporting a relační pohledy

8 of 49

1. SQL – JOIN - jak provést spojení

  • Pro získání dat z více tabulek slouží v SQL klíčové slovo JOIN, které se umísťuje mezi názvy spojovaných tabulek Následuje klíčové slovo ON, po kterém je nutné definovat způsob propojení.

SELECT p.id_pacienta, p.jmeno, p.prijmeni, v.datum_vysetreni, v.hmotnost FROM pacienti p JOIN vysetreni v ON p.id_pacienta = v.id_pacienta

  • Způsob spojení tabulek je obvykle definováno podmínkou za klíčovým slovem ON.
    • Podmínka definuje, které řádky se spolu mají párovat.

Sloupce je nutné identifikovat plným jménem, které se skládá z názvu tabulky a názvu samotného sloupce, který oddělíme tečkou.

Místo plného názvu tabulek můžeme definovat zkrácené pojmenování v části FROM, zkratku zapíšeme přímo za název tabulky. Zkratku tabulky pak používáme ve všech částech SQL dotazu.

9 of 49

1. SQL – TYPY JOIN

10 of 49

1. SQL – JOIN - rozdíl - příklad

11 of 49

1. SQL – JOIN - rozdíl - příklad

12 of 49

1. SQL – JOIN - rozdíl - příklad

13 of 49

1. SQL – JOIN - rozdíl - příklad

14 of 49

1. SQL – VIEW (pohledy)

VIEW je pojmenovaný SQL dotaz, který se tváří jako tabulka. Umožňuje uložit složitý SELECT pod jménem a znovu ho používat. Data se většinou neukládají fyzicky, ale generují se při každém dotazu.

🧩 Výhody

  • zpřehlednění složitých dotazů
  • vyšší bezpečnost (skrývá skutečnou strukturu tabulek)
  • opakované použití bez duplikace kódu
  • stabilní rozhraní pro aplikace (nezávislost na změnách schématu)

15 of 49

1. SQL – WITH

WITH vytváří pojmenovanou dočasnou tabulku, kterou lze použít v rámci jednoho SQL dotazu.Chová se jako dočasný pohled (view) – po vykonání dotazu zaniká.

🎯 K čemu se hodí

  • zpřehlednění složitých dotazů (místo vnořených SELECTů)
  • opětovné použití mezivýsledků
  • přehledné vícekrokové analýzy
  • rekurzivní dotazy (WITH RECURSIVE)

16 of 49

1. SQL – RETURNING

Klauzule RETURNING říká databázi: „Po INSERT, UPDATE nebo DELETE mi vrať konkrétní data, která byla ovlivněna.“ Používá se pro okamžité získání ID, potvrzení změn nebo archivaci bez nutnosti dělat další SELECT.

17 of 49

2. SQLite

  • Relační databázový systém obsažený v relativně malé knihovně (cca 700 KB) napsané v C
  • Vyvíjen D. Richardem Hippem
  • Šířen pod licencí public domain
  • Na rozdíl od databází založených na principu klient-server, kde je databázový server spuštěn jako samostatný proces, je SQLite pouze nevelká knihovna, která, po přilinkování k aplikaci, je k dispozici pomocí jednoduchého rozhraní.
  • Každá databáze je uložena v samostatném souboru .db, data ukládána za použití jednoduchého primárního klíče do stejně velkých bloků, využití hašovacích technik pro rychlý přístup k datům při vyhledávání podle klíče. Databáze v jednom souboru, nezávislém na platformě s sebou nese výhody (migrace) i nevýhody (fragmentace).
  • Databázi SQLite lze použít například v jazycích C, C++, C#, Delphi, Java, PHP, Python, Perl, Ruby atd. Předkompilované binárky jsou k dispozici pro Linux, macOS a MS Windows. SQLite je vestavěná i v mobilním systému Android. Formát databázovových souborů je nezávislý na operačním systému a SQLite tak představuje i zajímavý a jednoduchý nástroj pro přenos strukturovaných dat.
  • Ze standardu SQL implementováno není:
    • OUTER RIGHT JOIN, OUTER FULL JOIN
    • ALTER TABLE DROP COLUMN, ALTER COLUMN, ADD CONSTRAINT
    • GRANT, REVOKE (vzhledem k databázi coby jednoduchému souboru, nikoli kompletního abstrahovaného prostředí)

Je důležité si promyslet na co a kde budete databázi používat. Nějaká velká aplikace, nebo důraz na bezpečnost, SQLite není pro vás. Prototypujete? Děláte nějakou střední nebo menší webovou stránku? Vyvíjíte aplikaci třeba chytrý telefon, nebo nějaké udělátko? S SQLite byste neměli narazit na žádný problém. 

18 of 49

2. SQLite – DB Browser for SQLite

  • Oblíbená jednoduchá aplikace pro prohlížení, úpravu i vytváření SQLite databází v příjemném grafickém kabátu.
  • Není všemocná, složitější věci si budete muset psát pomocí SQL příkazů, ale pro základní úpravy bez znalostí SQL plně dostačuje.

19 of 49

Cvičení – procvičení interpretace SQL

Přeložte „do lidské řeči“ následující SQL skript = vysvětlete svými slovy, jaký úkon/úkony SŘBD při jeho interpretování provede:

20 of 49

Cvičení – procvičení interpretace SQL

Přeložte „do lidské řeči“ následující SQL skript = vysvětlete svými slovy, jaký úkon/úkony SŘBD při jeho interpretování provede:

Vytvoří tabulku pacientů, kde budou shromažďovány údaje o jejich unikátním ID, pohlaví a datu narození dle uvedených datových typů.

21 of 49

Cvičení – procvičení interpretace SQL

Přeložte „do lidské řeči“ následující SQL skript = vysvětlete svými slovy, jaký úkon/úkony SŘBD při jeho interpretování provede:

22 of 49

Cvičení – procvičení interpretace SQL

Přeložte „do lidské řeči“ následující SQL skript = vysvětlete svými slovy, jaký úkon/úkony SŘBD při jeho interpretování provede:

Vloží do tabulky o pacientech záznam pacientky narozené 2. 4. 1940.

23 of 49

Cvičení – procvičení interpretace SQL

Přeložte „do lidské řeči“ následující SQL skript = vysvětlete svými slovy, jaký úkon/úkony SŘBD při jeho interpretování provede:

24 of 49

Cvičení – procvičení interpretace SQL

Přeložte „do lidské řeči“ následující SQL skript = vysvětlete svými slovy, jaký úkon/úkony SŘBD při jeho interpretování provede:

Prémii ve výši 20% platu dostali všichni zaměstnanci s uvedením „ano“ ve sloupci odměny.

25 of 49

Cvičení – procvičení interpretace SQL

Přeložte „do lidské řeči“ následující SQL skript = vysvětlete svými slovy, jaký úkon/úkony SŘBD při jeho interpretování provede:

26 of 49

Cvičení – procvičení interpretace SQL

Přeložte „do lidské řeči“ následující SQL skript = vysvětlete svými slovy, jaký úkon/úkony SŘBD při jeho interpretování provede:

Návštěva pacienta s RČ 7707073345, kterou měl absolvovat dne 4. 4. 2006, bude zrušena.

27 of 49

Cvičení – procvičení interpretace SQL

Přeložte „do lidské řeči“ následující SQL skript = vysvětlete svými slovy, jaký úkon/úkony SŘBD při jeho interpretování provede:

28 of 49

Cvičení – procvičení interpretace SQL

Přeložte „do lidské řeči“ následující SQL skript = vysvětlete svými slovy, jaký úkon/úkony SŘBD při jeho interpretování provede:

Vrátí počty pacientů dle jednotlivých pohlaví.

29 of 49

Cvičení – procvičení interpretace SQL

Přeložte „do lidské řeči“ následující SQL skript = vysvětlete svými slovy, jaký úkon/úkony SŘBD při jeho interpretování provede:

30 of 49

Cvičení – procvičení interpretace SQL

Přeložte „do lidské řeči“ následující SQL skript = vysvětlete svými slovy, jaký úkon/úkony SŘBD při jeho interpretování provede:

Hledáme studenty, jejichž datum narození se rovná nejmenšímu (nejstaršímu) datu v tabulce. Výsledkem jsou tedy nejstarší studenti.

31 of 49

Cvičení – procvičení interpretace SQL

Přeložte „do lidské řeči“ následující SQL skript = vysvětlete svými slovy, jaký úkon/úkony SŘBD při jeho interpretování provede:

32 of 49

Cvičení – procvičení interpretace SQL

Přeložte „do lidské řeči“ následující SQL skript = vysvětlete svými slovy, jaký úkon/úkony SŘBD při jeho interpretování provede:

Seznam objednávek na hodiny 7.00 a 8.00 v týdnu od 20.4.2006 do 24.4.2006

33 of 49

Cvičení – procvičení interpretace SQL

Přeložte „do lidské řeči“ následující SQL skript = vysvětlete svými slovy, jaký úkon/úkony SŘBD při jeho interpretování provede:

34 of 49

Cvičení – procvičení interpretace SQL

Přeložte „do lidské řeči“ následující SQL skript = vysvětlete svými slovy, jaký úkon/úkony SŘBD při jeho interpretování provede:

Vrátí průměrný, minimální a maximální plat zaměstnanců - profesorů

35 of 49

Cvičení – procvičení interpretace SQL

Přeložte „do lidské řeči“ následující SQL skript = vysvětlete svými slovy, jaký úkon/úkony SŘBD při jeho interpretování provede:

36 of 49

Cvičení – procvičení interpretace SQL

Přeložte „do lidské řeči“ následující SQL skript = vysvětlete svými slovy, jaký úkon/úkony SŘBD při jeho interpretování provede:

Vrátí průměrný, maximální a minimální plat zaměstnanců podle funkcí.

37 of 49

Cvičení – procvičení interpretace SQL

Přeložte „do lidské řeči“ následující SQL skript = vysvětlete svými slovy, jaký úkon/úkony SŘBD při jeho interpretování provede:

38 of 49

Cvičení – procvičení interpretace SQL

Přeložte „do lidské řeči“ následující SQL skript = vysvětlete svými slovy, jaký úkon/úkony SŘBD při jeho interpretování provede:

Najde katedry, kde je průměrný plat asistenta větší, než 5000.

39 of 49

Cvičení – procvičení interpretace SQL

Přeložte „do lidské řeči“ následující SQL skript = vysvětlete svými slovy, jaký úkon/úkony SŘBD při jeho interpretování provede:

40 of 49

Cvičení – procvičení interpretace SQL

Přeložte „do lidské řeči“ následující SQL skript = vysvětlete svými slovy, jaký úkon/úkony SŘBD při jeho interpretování provede:

Vypíše seznam pacientů a jejich adresy z pojišťoven, u kterých má lékař více než 10 pacientů, setříděný podle pojišťoven.

41 of 49

Cvičení – normálové formy

Jak upravíte následující tabulku, aby splňovala 1. NF?

Relace je v nulté normální formě, existuje-li takové její pole, které obsahuje více než jednu hodnotu. Není-li relace v nulté normální formě, je alespoň v první normální formě.

Zdroj: http://programujte.com/clanek/2008071900-normalizace-relacnich-databazi/

42 of 49

Cvičení – normálové formy

Jak upravíte následující tabulku, aby splňovala 1. NF?

Relace je v nulté normální formě, existuje-li takové její pole, které obsahuje více než jednu hodnotu. Není-li relace v nulté normální formě, je alespoň v první normální formě.

Zdroj: http://programujte.com/clanek/2008071900-normalizace-relacnich-databazi/

43 of 49

Cvičení – normálové formy

Jak upravíte následující tabulku, aby splňovala 2. NF?

Zdroj: http://programujte.com/clanek/2008071900-normalizace-relacnich-databazi/

44 of 49

Cvičení – normálové formy

Jak upravíte následující tabulku, aby splňovala 2. NF?

Zdroj: http://programujte.com/clanek/2008071900-normalizace-relacnich-databazi/

45 of 49

Cvičení – normálové formy

Jak upravíte následující tabulku, aby splňovala 3. NF?

Zdroj: http://programujte.com/clanek/2008071900-normalizace-relacnich-databazi/

46 of 49

Cvičení – normálové formy

Jak upravíte následující tabulku, aby splňovala 3. NF?

Zdroj: http://programujte.com/clanek/2008071900-normalizace-relacnich-databazi/

47 of 49

Praktické cvičení

Návrhy vhodných témat pro semestrální práci:

    • Systém pro přepravní společnost
      • GIS složka: Polohy vozidel a zákazníků
    • Systém pro správu městské zeleně
      • GIS složka: Poloha jednotlivých rostlin
    • Systém pro správu výlepových ploch
      • GIS složka: Polohy jednotlivých výlepových ploch
    • Aplikace pro pochodový závod
      • GIS složka: Polohy závodníků během závodu
    • Aplikace pro záznam oblíbených míst
      • GIS složka: Polohy jednotlivých zájmových objektů
    • Aplikace pro seznamování a navazování kontaktů
      • GIS složka: Poloha jednotlivých uživatelů

48 of 49

Na doma

Vytvořte skripty pro splnění následujících příkladů (odevzdejte do Moodle!):

  1. Založte si tabulku s názvem odberatele.
  2. Tabulka bude obsahovat tyto atributy: nazev_odberatele, ico a vzdalenost_skladu.
  3. Zvolte odpovídající datové typy a naplňte tabulku nejméně 10 platnými záznamy.
  4. Založte si tabulku s názvem odberatele_b
  5. Tabulka bude obsahovat stejné atributy, jako tabulka z příkladu 1.
  6. Pomocí jediného příkazu překopírujte všechna data z tabulky odberatele do tabulky odberatele_B.
  7. Smažte všechna data z tabulky odberatele_B a naplňte ji pěti záznamy shodnými s tabulkou odberatele a pěti novými záznamy.
  8. Vyberte všechny záznamy z tabulky odberatele, pro které platí, že jsou také v tabulce odberatele_B.
  9. Vyberte všechny záznamy z tabulky odberatele, pro které platí, že Nejsou také v tabulce odberatele_B.
  10. Pomocí jednoho dotazu zjistěte seznam všech různých odběratelů z obou tabulek.
  11. Zjistěte počet všech odběratelů v obou tabulkách. Výsledkem bude jedno číslo (tedy součet počtu z tabulky odberatele a počtu z tabulky odberatele_B).
  12. Smažte z tabulky odberatele_B takové záznamy, pro které platí, že délka názvu odběratele bez mezer je menší, než průměrná délka všech názvů měst v tabulce odberatele.
  13. Zjistěte součet všech znaků bez mezer v textových atributech z obou tabulek. Výsledkem bude jedno číslo.

49 of 49

Děkuji za pozornost a těším se příště!��Prostor pro zpětnou vazbu

mail@mjakl.cz

Tel. 608 544 839

Web: mjakl.cz