DBMS (4IT218)
- Meta
- Konzultacni hodiny s externistou na Brumlovce do 17:00
- Cviceni na sebe navazuji
-
- cast semestru datove modelovani
- Nejist a nepit, alespon nic krome vody
- Budeme pracovat v Oracle SW
- SQL Developer nejdriv
Ctrl+F7je formatovani
- Power Designer a Data Modeler potom
- SQL Developer nejdriv
- Prvni polovina semestru zakoncena testem
- Bez internetu
- Connection:
Cvika
Prvni cviko (2026-02-17)
- Tabulky neexistuji, jsou to relacni tabulky nebo relace
- Jsou to vztahy mezi nimi, ne relace
- Relacni tabulka ma atributy (vlastne sloupce)
- Databaze jsou magicky, potrebuji jasny nazev tabulky jenom kdyz je nazev sloupce na vic nez jedne z nich
SELECT * FROM zam WHERE titul = 'RNDR';
- “Vypište čísla oddělení, ve kterých pracují zaměstnanci.”
SELECT DISTINCT cis_odd
FROM zam
WHERE cis_odd IS NOT NULL;
-
LIKEse pouziva s%vyraz% -
Podle cvikare je
*“divoky znak” -
Spojovani tabulek je joining
- Prosty joining zobrazuje zaznamy, kde je hodnota na obou stranach
- Levy join
SELECT DISTINCT zam.cis_odd, oddel.nazev
FROM zam join oddel ON zam.cis_odd = oddel.cis_odd
WHERE zam.titul = 'ING';
/* Obdobne muzeme pouzit USING, protoze maji oba edge stejny column name */
SELECT DISTINCT cis_odd, oddel.nazev
FROM zam
JOIN oddel USING (cis_odd)
WHERE zam.titul = 'ING';
ANYje pro cokoliv, tady ho pouzivame pro preskoceni joinovani
SELECT
cis_odd,
nazev
FROM
oddel
WHERE
cis_odd = ANY (
SELECT
zam.cis_odd
FROM
zam
WHERE
titul LIKE 'ING'
);
INkontroluje vyskyt v mnozine:
SELECT
cis_odd,
nazev
FROM
oddel
WHERE
cis_odd IN (
SELECT
zam.cis_odd
FROM
zam
WHERE
titul LIKE 'ING'
);
- Kartezsky soucin je nebezpecny —> dokaze precist m x n radku (tabulky m, n), takze davat podminky:
- Seskupovaci funkce:
GROUP BY
SELECT
cis_odd,
COUNT(cis_odd) AS user_count
FROM
zam
WHERE
titul = 'ING'
GROUP BY
cis_odd;
- Levy join:
SELECT
oddel.cis_odd,
oddel.nazev,
z.titul
FROM
oddel
LEFT JOIN (
SELECT
titul,
cis_odd
FROM
zam
WHERE
titul LIKE 'ING'
) z ON z.cis_odd = oddel.cis_odd;
S GROUP BY a prumerem platu:
SELECT
nazev,
COUNT(os_cis) AS pocet_ing,
AVG(plat) AS prum_plat
FROM
oddel
LEFT JOIN (
SELECT
titul,
cis_odd,
plat,
os_cis
FROM
zam
WHERE
titul LIKE 'ING'
) USING ( cis_odd )
GROUP BY
cis_odd,
nazev
ORDER BY
cis_odd;