Na drugim laboratorium powtórzymy proces importowania bazy danych oraz przećwiczymy tworzenie zapytań w SQL
Ocena składa się z dwóch elementów
Punkty | Ocena |
---|---|
<50% | 2 |
50-60% | 3 |
60-70% | 3.5 |
70-80% | 4 |
80-90% | 4.5 |
>90% | 5 |
Importujemy ją do mysql
"scieżka_do_pliku\mysql.exe" -t < ratings.sql
Proszę sobie przypomnieć dlaczego powyższe polecenie nie działa. Jaki jest błąd? Jak to naprawic?
Powtarzamy procedurę z zeszłego tygodnia. Wybieramy new source, typ bazy to mysql
Dane do połączenia
Jak wygląda nasza baza danych? Jeśli otworzymy panel z bazami (Alt-1) to możemy kliknąć prawym przyciskiem myszy na naszą bazę i wybrać Diagram. Alternatywnie możemy użyć skrótu klawiszowego Ctrl-Alt-Shift-U.
Znajdź wszystkie lata, z których pochodzą filmy, które otrzymały co najmniej jedną ocenę 4 lub 5, i posortuj je rosnąco
Dzielimy zapytanie na mniejsze części
SELECT * FROM Rating
WHERE stars BETWEEN 4 AND 5;
Wynik tego zapytania jest tabelą. Aby połączyć ją z Movie, trzeba ją zaliasować (nadać nazwę). Podobnie robiliśmy wcześniej z kolumnami
SELECT * FROM (Movie INNER JOIN
(SELECT * FROM Rating
WHERE stars BETWEEN 4 AND 5) AS HighRating
ON Movie.mID = HighRating.mID)
Później łatwo jest już wybrać lata (bez duplikatów) i uszeregować je.
SELECT DISTINCT year FROM (Movie INNER JOIN
(SELECT * FROM Rating
WHERE stars BETWEEN 4 AND 5) AS HighRating
ON Movie.mID = HighRating.mID)
ORDER BY year;
Ratingi wystawione plus/minus dwa dni od 20 stycznia 2011
SELECT * FROM Rating
WHERE ABS(DATEDIFF(ratingDate, MAKEDATE(2011,20)))<=2;
Wszystkie osoby, które oceniły film Gone with the Wind
SELECT DISTINCT Reviewer.name FROM (Reviewer INNER JOIN
(SELECT rID FROM Movie INNER JOIN Rating ON Movie.mID=Rating.mID
WHERE Movie.title="Gone with the Wind") AS RatingGWTW ON Reviewer.rID = RatingGWTW.rID);
Jako rozwiązanie proszę przesłać (do końca dzisiejszych zajęć) plik o tytule: {numer_indeksu}_laboratorium3.sql np. 271828_laboratorium3.sql
Plik ma być w następującym formacie
#zadanie 1
ZAPYTANIE SQL1
#zadanie2
ZAPYTANIE SQL2
...
#zadanie6
ZAPYTANIE SQL6
Państwa zapytania będą wykonywane w sposób automatyczny. Jeśli nie będą Państwo przestrzegali powyższego schematu to będą Państwu odejmowane punkty. W szczególności źle nazwany plik nie będzie sprawdzany. Przykład poprawnego pliku
Znajdź tytuły wszystkich filmów reżyserowanych przez Steven Spielberga i wypisz je małymi literami.
Znajdź filmy, dla których średnia liczba gwiazdek jest większa niż \(3.5\). W wyniku podaj nazwę filmu i średnią liczbę gwiazdek posortowane rosnąco ze względu na liczbę gwiazdek.
Znajdź maksymalną liczbę gwiazdek jakie otrzymały poszczególne filmy. W wyniku podaj nazwę filmu i maksymalną liczbę gwiazdek. Wyniki posortuj po nazwie filmu. Nie uwzględniaj filmów, które nie były ani razu ocenianie.
Znajdz imiona i nazwiska (name) oceniających (reviewers), dla których istnieje ocena (krotka w Rating) bez daty jej wystawienia
Napisz zapytanie, które zwróci ratingi w bardzie czytelnej postaci, tj w następującym formacie: nazwa oceniającego, nazwa filmu, ocena, data oceny
Posortuj dane po nazwie oceniającego, dalej po nazwie filmu i na końcu po ocenie.
Znajdź nazwy filmów, które nie mają żadnego ratingu