Bazując na bazie testowej Sakila (tutaj zip), wykonaj następujące ćwiczenia. Ułatwieniem może być widok schematu relacji tej bazy. Data ostatniej aktualizacji list: 07.10.2024.
Lista 1: zapytania na jednej tabeli
- Podaj tytuły, opisy, czas wypożyczenia, koszt wypożyczenia za dzień i całkowity koszt wypożyczenia (jako iloczyn czasu wypożyczenia i jego kosztu) dla każdego filmu. Przyjmij, że pole
rental_rate
zawiera koszt wypożyczenia za dzień (według dokumentacji bazy jest to koszt wypożyczenia na tyle dni, ile zapisano w polurental_duration
).- Wersja zgodna z dokumentacją. Podaj tytuły, opisy, czas wypożyczenia oraz koszt wypożyczenia za dzień (jako iloraz kosztu wypożyczenia na przewidzianą liczbę dni) dla każdego filmu.
- Podaj alfabetyczną listę nazwisk aktorów, każde nazwisko jeden raz.
- Wypisz wszystkie rodzaje ratingów filmów (każdy rating jednokrotnie).
- Wypisz tytuły, opisy, ratingi i długość filmów, które trwają 3 godziny lub dłużej.
- Zmodyfikuj powyższe zapytanie tak, aby czas był wyświetlany w godzinach (np. 75 minut = 1,25 godz.).
- Zmodyfikuj powyższe zapytanie tak, aby czas był wyświetlany w godzinach z dokładnością do drugiego miejsca po przecinku (np. 75 minut = 1,25 godz.).
- Zmodyfikuj powyższe zapytanie tak, aby kolumna z długością filmu w godzinach miała nazwę (alias) length_hours.
- Wypisz wszystkie informacje z tabeli
customer
o tych klientach, którzy są nieaktywni albo ich nazwisko kończy się naM
. - Wypisz wszystkie kategorie, których identyfikator jest większy niż 4, a których nazwa zaczyna się na
C
,S
lubT
. Użyj klauzuliWHERE
.- Wykonaj powyższe ćwiczenie, używając operatora
IN
do określenia zbioru literC
,S
,T
.
Uwaga. Trzeba użyć pewnej funkcji na tekstach.
- Wykonaj powyższe ćwiczenie, używając operatora
- Wypisz wszystkie filmy z ratingiem
G
,PG-13
lubNC-17
. Użyj operatoraIN
. - Wypisz listę otwartych wypożyczeń (czyli wypożyczono film, ale jeszcze go nie zwrócono).
- Wypisz wypożyczenia, które miały miejsce między 25 a 26 maja 2005 r. Skorzystaj z operatora
BETWEEN
. Zwróć uwagę, że w polurental_date
przechowywana jest zarówno data, jak i godzina (typ danych to DATETIME). - Wypisz listę dziesięciu ostatnio wypożyczonych filmów.
Lista 2: funkcje agregujące
Poniższe zadania używają funkcji agregujących.
- Ile jest aktorów, których pierwsze imię to 'Scarlett'?
- Które nazwiska aktorów występują więcej niż raz? Podaj je, sortując od najczęstszych do najrzadszych.
- Podaj ID 5 pierwszych aktorów, którzy wystąpili w największej liczbie filmów.
- Policz, ile jest klientów przypisanych do swoich "ulubionych sklepów". Podaj ID sklepu oraz liczbę takich klientów.
- Rozbuduj powyższe zapytanie, by pokazać, ilu jest klientów aktywnych, a ilu nie w każdym ze sklepów.
- Podaj 10 klientów, którzy wypożyczyli najwięcej filmów. Podaj ich identyfikator oraz liczbę wypożyczonych filmów.
- Podaj średni czas trwania wszystkich filmów w bazie.
- Podaj ten czas w godzinach (odpowiednio zmodyfikuj zapytanie!).
- Podaj ten czas w minutach z zaokrągleniem w górę (odpowiednio zmodyfikuj zapytanie!)
- Podaj ten czas w godzinach (odpowiednio zmodyfikuj zapytanie!).
- Podaj średni czas trwania wszystkich filmów w bazie (w minutach, z zaokrągleniem do 1 miejsca po przecinku) w rozbiciu na ratingi.
- Podaj sumę, średnią, zliczenie, minimum, maksimum oraz odchylenie standardowe dla płatności w rozbiciu na pracownika obsługującego płatność.
Lista 3: zapytania ze złączeniami
Poniższe zadania wymagają złączeń tabel. Konieczne jest, aby wybrać właściwy rodzaj złączenia, pasujący do treści zadania.
- Podaj identyfikatory i tytuły filmów, identyfikatory sklepów oraz datę wypożyczenia 10 ostatnio wypożyczonych filmów, ale tylko takich, które były wypożyczone przed 31.12.2005.
- Podaj identyfikatory, tytuły i opisy filmów oraz nazwy języka i oryginalnego języka (NULL, jeśli nie ma podanego) dla każdego filmu.
- Wypisz listę aktorów (nazwisko i imię jako jedno pole) i tytułów filmów, w których grali, każdy film w osobnym wierszu.
- Rozbuduj powyższe zapytanie, aby każdy aktor znajdował się na liście tylko raz, a w polu z tytułem filmu pojawiły się wszystkie te filmy, w których dany aktor grał, rozdzielone przecinkiem (wersja trochę bardziej zaawansowana: rozdzielone przecinkiem i spacją (", ")).
Uwaga. Może być potrzebna funkcjaGROUP_CONCAT
. - Dla każdego adresu wypisz: id adresu, 1. i 2. wiersz adresu, dystrykt, kod pocztowy, nazwę miasta, nazwę państwa i numer telefonu.
- Dla każdej płatności wypisz: id płatności, imię i nazwisko klienta (w jednej kolumnie), imię i nazwisko pracownika (w jednej kolumnie), tytuł wypożyczonego filmu, kwotę do zapłaty i datę zapłaty.
- Dla każdego sklepu wypisz: id sklepu, imię i nazwisko menedżera (w jednej kolumnie), pierwszy wiersz adresu, kod pocztowy, nazwę miasta i numer telefonu.
Lista 4: zapytania ze złączeniami i funkcjami agregującymi
Poniższe zapytania wymagają złączeń tabel i użycia funkcji agregujących.
- Podaj średni czas trwania wszystkich filmów w bazie w rozbiciu na kategorie.
- Dla każdego tytułu filmu podaj, ile razy był on wypożyczony, choćby nie był wypożyczony nigdy.
- Dla każdego filmu podaj jego tytuł oraz liczbę egzemplarzy tego filmu w posiadaniu wypożyczalni.
- Wypisz nazwy kategorii i liczbę filmów przypisanych do tej kategorii. Zadbaj o czytelność tabeli wynikowej.
- Podaj nazwiska i imiona (jako jedno pole) 5 pierwszych aktorów, którzy wystąpili w największej liczbie filmów.
- Wypisz listę filmów aktualnie wypożyczonych oraz liczbę wypożyczonych egzemplarzy. Pomiń filmy, których aktualnie nikt nie wypożycza.
- Podaj liczbę klientów w każdym z państw w bazie.
- Podaj nazwę kategorii oraz liczbę filmów w tej kategorii i ich średnią długość w godzinach dla każdej z kategorii. Zaokrąglij średni czas trwania filmu do jednego miejsca po przecinku.
- Podaj sumę oraz średnią płatności dla każdego miasta zarejestrowanego w bazie.
Dzie n dobry, Czy posida Pan przykładową bazę danych z kwerendami? Potrzebuje zrobić taki projket na studia, niestety nie wiem jak się za to zabrać. Z góry dziękuję za odpowiedź
Dzień dobry, niestety nie. Można jednak znaleźć przykładowe w dokumentacji MySQL: bazy Sakila czy Employees.