diff --git a/a1.3/a1.3.sql b/a1.3/a1.3.sql new file mode 100644 index 0000000..e9cccfe --- /dev/null +++ b/a1.3/a1.3.sql @@ -0,0 +1,80 @@ +-- DBS2.1.3.a:: +-- Berechnen Sie die Summe aller Budgets (SUMME) sowie das minimale (MIN) und +-- maximale Budget (MAX) für alle Kinofilme (Type=C) des Jahres 1989, bei denen das Budget +-- in USD angegeben ist. (eine Anfrage!). Hinweis: verwenden Sie ... like '%USD%' ... +-- Erwartete Spalten: summe, min, max + +SELECT SUM(b.BUDGET), MIN(b.BUDGET), MAX(b.BUDGET) +FROM moviedb.MOVIE m +JOIN moviedb.BUDGET b ON (m.ID = b.MOVIE) +WHERE m.TYPE='C' AND m.YEAR=1989 AND b.CURRENCY_SYMBOL LIKE '%USD%' +GROUP BY YEAR; + +-- DBS2.1.3.b:: +-- Ermitteln Sie alle Genres, die in Kinofilmen aus dem Jahr 1960 eingesetzt wurden zusammen mit der Anzahl von +-- Kinofilmen (Type C), in denen sie in dem Jahr verwendet wurden. (Jedes Genre sollte nur einmal auftauchen!). +-- Erwartete Spalten: genre, anzahl + +SELECT g.GENRE, COUNT(m.ID) AS ANZAHL +FROM moviedb.MOVIE m +JOIN moviedb.GENRE g ON (g.MOVIE = m.ID) +WHERE m.YEAR = 1960 AND m.TYPE = 'C' +GROUP BY g.GENRE; + +-- DBS2.1.3.c:: +-- Ermitteln Sie alle Genres, die in Kinofilmen aus dem Jahr 1960 eingesetzt wurden zusammen mit der Anzahl von +-- Kinofilmen (Type C), in denen sie in dem Jahr verwendet wurden. (Jedes Genre sollte nur einmal auftauchen!). +-- Schränken Sie die Abfrage so ein, dass nur Genres aufgelistet werden, zu denen es in 1960 mindestens +-- 100 Kinofilme gab. +-- Erwartete Spalten: genre, anzahl + +SELECT g.GENRE, COUNT(m.ID) AS ANZAHL +FROM moviedb.MOVIE m +JOIN moviedb.GENRE g ON (g.MOVIE = m.ID) +WHERE m.YEAR = 1960 AND m.TYPE = 'C' +GROUP BY g.GENRE +HAVING COUNT(m.ID) >= 100; + +-- DBS2.1.3.d:: +-- Ermitteln Sie alle Genres, die in Kinofilmen aus dem Jahr 1960 eingesetzt wurden zusammen mit der Anzahl von +-- Kinofilmen (Type C), in denen sie in dem Jahr verwendet wurden. (Jedes Genre sollte nur einmal auftauchen!). +-- Schränken Sie die Abfrage so ein, dass nur Genres aufgelistet werden, zu denen es in 1960 mindestens +-- 100 Kinofilme gab. +-- Sortieren Sie das Ergebnis nach Häufigkeit absteigend. +-- Erwartete Spalten: genre, anzahl + +SELECT g.GENRE, COUNT(m.ID) AS ANZAHL +FROM moviedb.MOVIE m +JOIN moviedb.GENRE g ON (g.MOVIE = m.ID) +WHERE m.YEAR = 1960 AND m.TYPE = 'C' +GROUP BY g.GENRE +HAVING COUNT(m.ID) >= 100 +ORDER BY COUNT(m.ID) DESC; + +-- DBS2.1.3.e:: +-- Finden Sie ID und Titel aller Kinofilme (Type=C), die mind. einen Nachfolger haben, und die mindestens einmal +-- parodiert wurden. Ein Film hat einen Nachfolger, wenn die ID in der Tabelle FOLLOWS in der Spalte MOVIE +-- verwendet wird. Ein Film wurde parodiert, wenn die ID in der Tabelle SPOOFS in der Spalte SPOOFED verwendet +-- wird. Ein Film soll nur maximal einmal im Ergebnis sein, auch wenn er mehrere Nachfolger und Parodien hat. +-- Erwartete Spalten: id, title + +SELECT DISTINCT m.ID, m.TITLE +FROM moviedb.MOVIE m +JOIN moviedb.FOLLOWS f ON (m.ID = f.MOVIE) +JOIN moviedb.SPOOFS s ON (m.ID = s.SPOOFED) +WHERE m.TYPE = 'C'; + +-- DBS2.1.3.f:: +-- Finden Sie ID und Titel aller Kinofilme, die entweder mind. einen Nachfolger haben, oder mindestens einmal +-- parodiert wurden, für die aber nicht beides zutrifft. +-- Ein Film soll maximal einmal im Ergebnis sein. +-- Hinweis: Es gibt unterschiedliche Lösungsmöglichkeiten. Denken Sie über Full Outer Joins nach, oder alternativ +-- über Mengenoperationen. +-- Erwartete Spalten: id, title + +SELECT DISTINCT m.ID, m.TITLE +FROM moviedb.MOVIE m +LEFT JOIN moviedb.FOLLOWS f ON (m.ID = f.MOVIE) +LEFT JOIN moviedb.SPOOFS s ON (m.ID = s.SPOOFED) +WHERE m.TYPE = 'C' AND (f.MOVIE IS NULL AND s.SPOOFED IS NOT NULL OR f.MOVIE IS NOT NULL AND s.SPOOFED IS NULL); +