DB cw2

You might also like

Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 6

Bazy danych i systemy informacyjne

semestr zimowy 2023/24

Lista nr 2
(cwiczenia)´

Cel: kontynuacja treningu umieje˛tnosci tworzenia zapyta´ n SQL oraz opanowanie zapyta´ n´
algebry relacji.
Zadanie: maja˛c dane ponizsze tabele˙
Aktor
Id Imie Nazwisko RokUrodzenia KrajPochodzenia
int varchar (30) varchar(30) int varchar (40)
Rezyser
Id Imie Nazwisko RokUrodzenia LiczbaFilmow
int varchar (30) varchar(30) int int
Film
Tytul RokPremiery Rezyser AdaptacjaKsiazki KategoriaWiekowa Budzet Przychod
varchar (60) int int bool varchar(10) int int
Obsada
Film RokProdukcji Aktor
varchar(60) int int
Pisarz
Id Imie Nazwisko RokUrodzenia
int varchar (30) varchar(30) int
Ksiazka
ISBN Autor Tytul RokWydania Wydawnictwo Seria Jezyk
varchar(17) int varchar(60) int int varchar(60) varchar(30)
Wydawnictwo
Id Nazwa RokZalozenia
int varchar (30) int
dla kazdego z poni˙ zszych punktów podaj odpowiednie zapytanie SQL oraz wyra˙ zenia˙
algebry relacji.

1. Wypisz pary filmów o tych samych tytułach – schemat wynikowy (Tytuł,


RokPremiery_1, RokPremiery_2).
SELECT F1.Tytul, F1.RokPremiery AS RokPremiery_1, F2.RokPremiery AS
RokPremiery_2
FROM Film F1
JOIN Film F2 ON F1.Tytul = F2.Tytul AND F1.Id <> F2.Id; // <> nie równe
2. Wypisz tytuł filmu, rok jego premiery oraz imie˛ i nazwisko rezysera dla filmów,˙
w których rezyser był obsadzony równie˙ z jako aktor.˙
SELECT F.Tytul, F.RokPremiery, R.Imie AS ImieRezysera, R.Nazwisko AS
NazwiskoRezysera
FROM Film F
JOIN Rezyser R ON F.AdaptacjaKsiazki = 0
JOIN Obsada O ON F.Tytul = O.Film AND F.RokPremiery = O.RokProdukcji
WHERE O.Aktor = R.Id;
3. Wypisz wszystkich rezyserów be˛da˛cych jednocze˙ snie aktorami (filmy dowolne
-´ wyrezyserowane przez siebie ba˛dz´ nie).˙
SELECT DISTINCT A.Imie AS ImieRezysera, A.Nazwisko AS NazwiskoRezysera
FROM Aktor A
JOIN Obsada O ON A.Id = O.Aktor
JOIN Rezyser R ON A.Id = R.Id;
4. Wypisz rezyserów, którzy wyre˙ zyserowali wie˛ksza˛ ni˙ z przecie˛tnie liczbe˛
filmów˙ (wie˛ksza niz˙ srednia po całej kolumnie). Wyniki posortuj po liczbie lat re
´ zysera˙ (od najmłodszych do najstarszych).
SELECT * FROM Rezyser
WHERE LiczbaFilmow > (SELECT AVG(LiczbaFilmow) FROM Rezyser)
ORDER BY RokUrodzenia;
5. Wypisz bez powtórzen wszystkie wyste˛puja˛ce w bazie imiona.´ Wyniki
posortuj maleja˛co.
SELECT DISTINCT Imie
FROM Aktor
UNION SELECT Imie
FROM Rezyser
UNION SELECT Imie
FROM Autor
GROUP BY Imie
ORDER BY Imie ASC;
6. Wypisz filmy, z których przychód był najwie˛kszy.
SELECT Tytul
FROM Film
WHERE Przychod = (SELECT MAX(Przychod) FROM Film);
7. Wypisz wszystkie ksia˛zki wydane przez Wydawnictwo Muza po 1990 roku.
Wyniki˙ posortuj rosna˛co po je˛zyku napisania ksia˛zki a w obre˛bie tego samego
je˛zyka rosna˛co˙ po nazwisku autora.
SELECT K.Tytul, K.Jezyk, K.Autor
FROM Ksiazka K
JOIN Wydawnictwo W ON K.Wydawnictwo = W.Nazwa
WHERE W.Nazwa = 'Muza' AND K.RokWydania > 1990
ORDER BY K.Jezyk ASC, K.Autor ASC;
8. Wypisz nazwy serii oraz ksia˛zki wchodza˛ce w ich skład. Wyniki posortuj według˙
nazwy serii, a wewna˛trz serii chronologicznie po roku wydania.
SELECT K.Seria , K.Tytul, K.RokWydania
FROM Ksiazka K
ORDER BY K.Seria ASC, K.RokWydania ASC;
9. Dla kazdej narodowo˙ sci wypisz liczbe˛ aktorów pochodza˛cych z danego kraju.
Nie´ uwzgle˛dniaj aktorów, którzy zostali obsadzeni w mniej niz 2 filmach.˙
SELECT A.KrajPochodzenia, COUNT(O.Aktor) AS LiczbaAktorow
FROM Aktor A
JOIN Obsada O ON A.Id = O.Aktor
GROUP BY A.KrajPochodzenia
HAVING COUNT(DISTINCT O.Film) >= 2
10. Wypisz filmy, w których zagrała najwie˛ksza liczba aktorów.
SELECT F.Tytul, COUNT(DISTINCT O.Aktor) AS LiczbaAktorow
FROM Film F
JOIN Obsada O ON F.Tytul = O.Film AND F.RokPremiery = O.RokProdukcji
GROUP BY F.Tytul
ORDER BY LiczbaAktorow DESC
LIMIT 1;
11. Wypisz filmy, po których premierze powstała ksia˛zka o tym samym tytule.
Schemat˙ wynikowy powinien wygla˛dac (Tytuł, RokPremiery, RokWydania,
LiczbaLatRoznicy).´
SELECT
F.Tytul AS Tytuł,
F.RokPremiery,
K.RokWydania,
K.RokWydania - F.RokPremiery AS LiczbaLatRoznicy
FROM
Film F
JOIN
Ksiazka K ON F.Tytul = K.Tytul
WHERE
K.RokWydania > F.RokPremiery
ORDER BY
F.Tytul;
12. Znajdz´ adaptacje filmowe ksia˛zek, które przyniosły najwie˛kszy zysk wzgle˛dem
ory-˙ ginalnego budzetu (Zysk = Przychod - Budzet).˙
SELECT
F.Tytul AS TytułFilmu,
K.Tytul AS TytułKsiążki,
(F.Przychod - F.Budzet) AS Zysk
FROM
Film F
JOIN
Ksiazka K ON F.Tytul = K.Tytul
WHERE
F.AdaptacjaKsiazki = 1 // TRUE
ORDER BY
Zysk DESC;
13. Znajdz´ filmy, które przyniosły strate˛ finansowa˛ (przychód mniejszy od
budzetu).˙ Wyniki posortuj maleja˛co wzgle˛dem planowanego budzetu.˙
SELECT Tytul, Budzet, Przychod
FROM Film
WHERE Przychod < Budzet
ORDER BY Budzet DESC;
14. Znajdz´ filmy, które maja˛taki sam tytuł jak istnieja˛ca ksia˛zka, jednak nie
sa˛adaptacja˛.˙ Wyniki posortuj maleja˛co wzgle˛dem roku premiery filmu.
Uwaga: Schemat wyniku powinien zawierac jedynie tytuł filmu.´
SELECT DISTINCT
F.Tytul AS TytułFilmu
FROM
Film F
WHERE
F.Tytul IN (SELECT K.Tytul FROM Ksiazka K)
AND F.AdaptacjaKsiazki = 0
ORDER BY
F.RokPremiery DESC;
15. Wypisz wszystkie filmy oraz lata ich premier, w których obsadzeni zostali
jednoczesnie´ Viggo Mortensen oraz Elijah Wood. Wyniki posortuj maleja˛co
wzgle˛dem Przychodu.
SELECT
F.Tytul AS TytułFilmu,
F.RokPremiery
FROM
Film F
JOIN
Obsada O1 ON F.Tytul = O1.Film
JOIN
Obsada O2 ON F.Tytul = O2.Film
WHERE
(O1.Aktor = 'Viggo Mortensen' AND O2.Aktor = 'Elijah Wood')
AND F.Przychod IS NOT NULL
ORDER BY
F.Przychod DESC;
16. Znajdz´ pisarza, który jest młodszy od wszystkich aktorów i rezyserów z bazy.˙
SELECT
P.Imie AS ImiePisarza,
P.Nazwisko AS NazwiskoPisarza
FROM
Pisarz P
WHERE
P.RokUrodzenia < ALL (SELECT A.RokUrodzenia FROM Aktor A)
AND P.RokUrodzenia < ALL (SELECT R.RokUrodzenia FROM Rezyser R);
17. Wypisz filmy, w których nie został obsadzony ani jeden aktor z USA.
SELECT F.Tytul, F.RokPremiery
FROM Film F
WHERE NOT EXISTS (
SELECT 1
FROM Obsada O
JOIN Aktor A ON O.Aktor = A.Id
WHERE O.Film = F.Tytul AND A.KrajPochodzenia = 'USA'
);
18. Znajdz´ rezysera, który nakre˛cił film o najwie˛kszym bud˙ zecie po swoich
60tych˙ urodzinach.
19. Wypisz pary aktorów, którzy nie mieli okazji zagrac wspólnie w jednym filmie,´
natomiast kazdy z nich z osobna zagrał w filmie z Julia˛Roberts.˙
20. Wypisz pisarzy, którzy zagrali w adaptacji swojej ksia˛zki (zgodno˙ s´c po tytule i´
AdaptacjaKsiazki z tabeli Film na true).
21. Wybierz pisarzy, którzy napisali najwie˛cej ksia˛zek, nie be˛da˛cych cze˛˙ scia˛´
zadnej serii˙ (wartos´c NULL w kolumnie Seria tabeli Ksiazka).´
22. Wybierz filmy powstałe po Titanic, które uzyskały najwie˛kszy zysk w przeliczeniu
przychod−budzet na pojedynczego zaangazowanego aktora˙
.
liczbaAktorow
23. Wybierz filmy, które sa˛z kategorii wiekowej 18+, a w których obsadzony został co
najmniej jeden aktor ponizej 18 roku˙ zycia.˙

You might also like