-- 1. VYTVOŘENÍ TABULEKDROP TABLE IF EXISTS film;DROP TABLE IF EXISTS druh;CREATE TABLE druh ( id INT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, nazev VARCHAR(20) NOT NULL UNIQUE);CREATE TABLE film ( id INT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, nazev VARCHAR(50) NOT NULL, delka_min INT CHECK (delka_min > 0), druh_id INT NOT NULL, FOREIGN KEY (druh_id) REFERENCES druh(id));-- 2. VLOŽENÍ MOCK DATINSERT INTO druh(nazev) VALUES ('sci-fi'), ('komedie'), ('drama'), ('horor'), ('akční');INSERT INTO film(nazev, delka_min, druh_id) VALUES ('Blade Runner 2049', 164, 1), ('The Matrix', 136, 1), ('Forrest Gump', 142, 3), ('The Hangover', 100, 2), ('Jaws', 124, 4), ('Mad Max: Fury Road', 120, 5), ('The Godfather', 175, 3), ('Ghostbusters', 105, 2), ('Pulp Fiction', 154, 3), ('Terminator 2', 137, 5), ('The Conjuring', 112, 4);-- 3. DOTAZY-- Všechny filmy s jejich druhem (LEFT JOIN)SELECT druh.nazev AS druh, film.nazev AS film, film.delka_minFROM druh LEFT JOIN film ON druh.id = film.druh_id;-- INNER JOIN (jen filmy, které mají druh)SELECT druh.nazev AS druh, film.nazev AS film, film.delka_minFROM druh INNER JOIN film ON druh.id = film.druh_id;-- LEFT JOIN s GROUP BY (např. počet filmů podle druhu)SELECT druh.nazev AS druh, COUNT(film.id) AS pocet_filmuFROM druh LEFT JOIN film ON druh.id = film.druh_idGROUP BY druh.nazev;-- 4. VYTVOŘENÍ POHLEDUCREATE OR REPLACE VIEW seznam ASSELECT druh.nazev AS druh, film.nazev AS film, film.delka_minFROM druh LEFT JOIN film ON druh.id = film.druh_id;-- Výpis pohledu seřazený podle délkySELECT * FROM seznam ORDER BY delka_min DESC;-- 5. UPDATE A DELETE-- UPDATE: změň název filmu 'The Hangover' na 'Pařba ve Vegas'UPDATE filmSET nazev = 'Pařba ve Vegas'WHERE nazev = 'The Hangover';-- UPDATE: změň délku filmu 'Pulp Fiction' na 158 minutUPDATE filmSET delka_min = 158WHERE nazev = 'Pulp Fiction';-- DELETE: smaž film 'Ghostbusters'DELETE FROM filmWHERE nazev = 'Ghostbusters';-- DELETE: smaž celý druh 'horor' (POZOR – pokud má filmy, je třeba je nejprve smazat)DELETE FROM film WHERE druh_id = (SELECT id FROM druh WHERE nazev = 'horor');DELETE FROM druh WHERE nazev = 'horor';-- 6. ZÁVĚREČNÝ VÝPIS VŠEHO-- Všechno z tabulky druhSELECT * FROM druh;-- Všechno z tabulky filmSELECT * FROM film;-- Všechno z pohledu seznamSELECT * FROM seznam ORDER BY delka_min DESC;
20.10
create table zanr(id int generated always as identity primary key,nazev varchar(20));select * from zanr;create table film(id int generated always as identity primary key,nazev varchar(20),delka int,zanr_id int,foreign key(zanr_id) references zanr(id));select * from film;-- joins-- left join .. vsechny zanr i ty, co nemaji filmselect zanr.nazev,film.nazev,film.delkafrom zanr left join film on zanr.id= film.zanr_id;-- right join .. vsechny filmy i ty, co nemaji zanrselect zanr.nazev,film.nazev,film.delkafrom zanr right join film on zanr.id= film.zanr_id;-- full outer join .. vsechny zanr i filmyselect zanr.nazev,film.nazev,film.delkafrom zanr full outer join film on zanr.id= film.zanr_id;-- inner join .. jen filmy se zanryselect zanr.nazev,film.nazev,film.delkafrom zanr inner join film on zanr.id= film.zanr_id;-- vypis filmu, ktere nemaji urceny zanrselect zanr.nazev,film.nazev,film.delkafrom zanr right join film on zanr.id= film.zanr_idwhere zanr.nazev is null;-- vypis filmu, ktere nemaji urceny zanrselect zanr.nazev,film.nazev,film.delkafrom zanr right join film on zanr.id= film.zanr_idwhere zanr.nazev is not null;-- view (!!m�sto alter se p�e p��mo v create "create or replace"create or replace view prehledasselect zanr.nazev as zanr,film.nazev as film,film.delkafrom zanr full outer join film on zanr.id= film.zanr_id;-- spusteni pohleduselect * from prehled;---- procedura-- vytvorte proceduru, ktera umo�n� vlozit nov� film -- "novy_film" se vstupnimi parametry(nazev,delka,zanr_id)create or replace procedure novy_film(p_nazev varchar,p_delka int,p_zanr_id int)asbegin insert into film(nazev,delka,zanr_id) values(p_nazev,p_delka,p_zanr_id);end;-- spusteni proceduryexecute novy_film('the moon',240,1);select * from prehled;-- procedura pro select se vstupnimi parametry-- vypis film� podle zadan�ho zanrucreate or replace procedure zanr_film(p_zanr varchar)asc1 SYS_REFCURSOR; begin open c1 for select zanr.nazev,film.nazev,film.delka from zanr inner join film on zanr.id= film.zanr_id where zanr.nazev = p_zanr; DBMS_SQL.RETURN_RESULT(c1);end;--execute zanr_film('fantasy');--