1. K čemu se používá SQL, rozdělení a kompletní syntax SELECT + popis klauzulí
SQL (Structured Query Language) je jazyk používaný pro práci s relačními databázemi – pro definici struktury databáze, vkládání dat, aktualizaci, mazání dat a dotazování.
SQL se dělí na tyto části:
-
DDL (Data Definition Language) – práce se strukturou databáze
(
CREATE,ALTER,DROP) -
DML (Data Manipulation Language) – práce s daty
(
SELECT,INSERT,UPDATE,DELETE) -
DCL (Data Control Language) – práce s oprávněními
(
GRANT,REVOKE) -
TCL (Transaction Control Language) – práce s transakcemi
(
COMMIT,ROLLBACK,SAVEPOINT)
Kompletní syntax příkazu SELECT:
SELECT [DISTINCT] sloupce
FROM tabulka
[JOIN typ_join ON podmínka]
[WHERE podmínka]
[GROUP BY sloupce]
[HAVING podmínka]
[ORDER BY sloupce [ASC|DESC]]
[LIMIT / OFFSET] -- dle SQL dialektu
Popis klauzulí:
-
SELECT – vybírá sloupce.
-
DISTINCT – odstraní duplicitní řádky.
-
FROM – určuje tabulku/tabulky.
-
JOIN – propojení tabulek podle vztahu.
-
WHERE – filtruje záznamy před seskupením.
-
GROUP BY – seskupení dat podle hodnot ve sloupcích.
-
HAVING – filtruje skupiny po seskupení (používá se s agregacemi).
-
ORDER BY – řazení výsledku.
-
LIMIT/OFFSET – omezení počtu výsledků.
2. DBS – jaká architektura se používá dnes v relačních databázích, kde jsou uložena data a jak je k nim umožněn přístup
Relační databázové systémy dnes nejčastěji využívají:
-
Klient–server architekturu
-
Databázový server (např. PostgreSQL, MySQL, MSSQL) spravuje data a poskytuje přístup klientům.
Požadavky:
-
bezpečnost dat
-
podpora transakcí (ACID)
-
integrita dat (omezení, referenční integrita)
-
souběžný přístup více uživatelů
Data jsou uložena:
-
fyzicky na serveru v souborech na disku (většinou binární formát)
-
přístup je řízen DB serverem, uživatelé používají SQL dotazy přes síť
3. Logický a relační model – filmová společnost
Požadované selecty:
a) Datum nejstarší projekce v evidenci:
SELECT MIN(datum_projekce) AS nejstarsi_projekce
FROM Projekce;
b) Počet filmů v evidenci podle žánru:
SELECT zanr, COUNT(*) AS pocet_filmu
FROM Film
GROUP BY zanr;
c) Filmy, které nebyly dosud promítány, seřazené podle žánru a názvu:
SELECT f.nazev, f.zanr
FROM Film f
LEFT JOIN Projekce p ON f.id = p.id_film
WHERE p.id_film IS NULL
ORDER BY f.zanr, f.nazev;
Možný model (relační schéma):
| Tabulka | Sloupce |
|---|---|
| Film | id (PK), nazev, zanr, delka |
| Projekce | id (PK), id_film (FK → Film.id), datum_projekce, sala |
4. Integrita databáze + referenční integritní omezení
Integrita databáze = soubor pravidel zajišťující, že data jsou správná, úplná a konzistentní.
Referenční integritní omezení = zajišťuje vazby mezi tabulkami pomocí cizích klíčů (FK).
Např.: nelze vložit projekci filmu, který není v tabulce Film.
Příklad:
ALTER TABLE Projekce
ADD CONSTRAINT fk_film
FOREIGN KEY (id_film) REFERENCES Film(id);
5. Normalizace tabulky – 1. až 3. NF
Tabulka (zadání):
| cislo_zam | jmeno_zam | parkoviste | umisteni | kapacita | pocet_pater | cislo_mista |
|---|
Problémy:
-
redundance dat o parkovištích (opakují se atributy parkoviště)
-
tabulka obsahuje více entit (zaměstnanec, parkoviště, parkovací místo)
Výsledek normalizace:
-
Tabulka Zamestnanec:
| id_zam (PK) | jmeno |
-
Tabulka Parkoviste:
| id_park (PK) | nazev | umisteni | kapacita | pocet_pater |
-
Tabulka ParkovaciMisto:
| id_misto (PK) | id_park (FK) | cislo_mista |
-
Vazební tabulka (kdo má které místo):
| id_zam (FK) | id_misto (FK) |
6. SQL dotaz – společnosti, které mají na své trase vozy Mercedes
Tabulky v zadání:
DopravniVuz (id, vyrobce, typ_vozu, najeto_km, kapacita, v_provozu_od)
DopravniSpolecnost (id, nazev, zeme, svetadíl, zalozeno)
Trasa (id, spolecnost_id, vuz_id, pocet_vozu)
Dotaz:
SELECT s.nazev AS spolecnost,
s.zeme,
SUM(t.pocet_vozu) AS celkovy_pocet_vozu
FROM DopravniSpolecnost s
JOIN Trasa t ON s.id = t.spolecnost_id
JOIN DopravniVuz v ON t.vuz_id = v.id
WHERE v.vyrobce = 'Mercedes'
GROUP BY s.nazev, s.zeme;