This commit is contained in:
Luca Conte 2023-10-02 13:15:19 +02:00
parent 45c0ab2696
commit 3c62b45941
1 changed files with 78 additions and 0 deletions

78
a1.2/a1.2.sql Normal file
View File

@ -0,0 +1,78 @@
-- DBS2.1.2.a::
-- Suchen Sie alle Informationen aus der Tabelle MOVIE für Kinofilme aus dem Jahr 1989.
-- Kinofilme sind Einträge in der MOVIE-Tabelle mit Type=C.
-- Erwartete Spalten: id, title, year
SELECT id, title, year FROM moviedb.MOVIE WHERE Year=1989 AND Type='C';
-- DBS2.1.2.b::
-- Finden Sie die Titel (TITLE) aller Kinofilme (d.h. Type=C), sowie die darin
-- auftretenden Charaktere (CHARACTER) und Namen (NAME) des Schauspielers
-- der Schauspielerin des Charakters.
-- Geben Sie nur die Informationen für Filme aus, die entweder vor dem Jahr 1930
-- oder nach dem Jahr 2020 gedreht wurden.
-- Verwenden Sie UNION/UNION ALL, um die beiden Teilmengen (vor 1930 bzw. nach 2020)
-- zusammenzusetzen.
-- Duplikate im Ergebnis sind erlaubt.
-- Erwartete Spalten: title, character, name
SELECT m.TITLE, p.CHARACTER, a.NAME
FROM moviedb.MOVIE m
JOIN moviedb.PLAYS p ON (p.MOVIE = m.ID)
JOIN moviedb.PERSON a ON (a.ID = p.PLAYER)
WHERE Type='C' AND m.YEAR < 1930
UNION ALL
SELECT m.TITLE, p.CHARACTER, a.NAME
FROM moviedb.MOVIE m
JOIN moviedb.PLAYS p ON (p.MOVIE = m.ID)
JOIN moviedb.PERSON a ON (a.ID = p.PLAYER)
WHERE Type='C' AND m.YEAR > 2020;
-- DBS2.1.2.c::
-- Finden Sie die Titel (TITLE) aller Kinofilme (d.h. Type=C), sowie die darin
-- auftretenden Charaktere (CHARACTER) und Namen (NAME) des Schauspielers
-- der Schauspielerin des Charakters.
-- Geben Sie nur die Informationen für Filme aus, die entweder vor dem Jahr 1930
-- oder nach dem Jahr 2020 gedreht wurden.
-- Verwenden Sie diesmal kein UNION/UNION ALL, um die beiden Teilmengen
-- (vor 1930 bzw. nach 2020) zusammenzusetzen.
-- Duplikate im Ergebnis sind erlaubt.
-- Erwartete Spalten: title, character, name
SELECT m.TITLE, p.CHARACTER, a.NAME
FROM moviedb.MOVIE m
JOIN moviedb.PLAYS p ON (p.MOVIE = m.ID)
JOIN moviedb.PERSON a ON (a.ID = p.PLAYER)
WHERE Type='C' AND (m.YEAR < 1930 OR m.YEAR > 2020);
-- DBS2.1.2.d::
-- Finden Sie die Titel (TITLE) aller Kinofilme (Type=C), für die es keinen Regisseur in der Datenbank gibt.
-- Formulieren Sie die Anfrage dabei ohne die Verwendung von EXISTS.
-- Es sollen keine Duplikate im Ergebnis enthalten sein.
-- Erwartete Spalten: title
SELECT DISTINCT m.TITLE
FROM moviedb.MOVIE m
LEFT JOIN moviedb.DIRECTS d ON (m.ID = d.MOVIE)
WHERE m.TYPE='C' AND d.MOVIE IS NULL;
-- DBS2.1.2.e::
-- Finden Sie die Titel (TITLE) aller Kinofilme (Type=C), für die es keinen Regisseur in der Datenbank gibt.
-- Formulieren Sie die Anfrage diesmal mit EXISTS. Es sollen keine Duplikate im Ergebnis enthalten sein.
-- Falls sie EXISTS nicht kennen, recherchieren Sie ggf. die Verwendung dieser Klausel.
-- Erwartete Spalten: title
SELECT DISTINCT m.TITLE
FROM moviedb.MOVIE m
WHERE m.TYPE = 'C' AND NOT EXISTS (SELECT 1 FROM moviedb.DIRECTS d WHERE d.MOVIE = m.id);
-- DBS2.1.2.f::
-- Geben sie alle Kinofilme des Jahres 1960 (Type=C; Spalten MID für MOVIE.ID und TITLE) mit ihren Regisseuren
-- (PID für PERSON.ID und NAME) und Ratings (RATING) aus. Sortieren Sie das Ergebnis nach Regisseur
-- und pro Regisseur nach Rating absteigend, bei gleichem Regisseur und Rating nach Movie-ID aufsteigend.
-- Erwartete Spalten: mid, title, pid, name, rating
SELECT m.ID AS MID, m.TITLE, p.ID AS PID, p.NAME, r.RATING
FROM moviedb.MOVIE m
JOIN moviedb.RATING r ON (m.ID = r.MOVIE)
JOIN moviedb.DIRECTS d ON (m.ID = d.MOVIE)
JOIN moviedb.PERSON p ON (d.DIRECTOR = p.ID)
WHERE m.TYPE = 'C' AND YEAR=1960
ORDER BY p.NAME, r.RATING DESC, m.ID ASC;