Abfragen in einer Relation mit Bedingungen
Oben siehst du einen Teil einer fertigen Filmdatenbank, die sich auf den Film und seine Mitwirkenden konzentriert. Gib zu folgenden Anfragen ein passendes SQL-Statement an

Gib den Namen aller Personen aus, die mindestens einen Oscar gewonnen haben.
Lösung anzeigen
Du möchtest nur eine Spalte im SELECT-Teil, nämlich Name.
Da Oscarauszeichnungen eine Ganzzahl ist, kannst du >0 schreiben. Du kannst aber auch >=1 schreiben.
SELECT Name
FROM FILMPERSON
WHERE Oscarauszeichnungen > 0;Gib den Titel und die Länge aller Filme an, die länger als 80 aber kürzer als 120 Minuten sind.
Lösung anzeigen
Du möchtest mehrere Spalten im SELECT-Statement. Trenne sie durch ein Komma.
Den Zahlbereich musst du als zwei Bedingungen schreiben, die du mit AND verbindest.
SELECT Titel, Laenge
FROM FILM
WHERE Laenge > 80 AND Laenge < 120;Lösung mit BETWEEN
Wenn du BETWEEEN kennst, geht die Abfrage auch so:
SELECT Titel, Laenge
FROM FILM
WHERE Laenge BETWEEN 81 AND 119;Allerdings musst du hier auch die Grenzen anpassen.
Gib die IDs aller Filme aus, die das Genre "Komödie", "Science Fiction" oder "Action" habe. Filtere doppelte IDs heraus, falls ein Film mehr als eines der Genres hat.
Lösung anzeigen
Du findest das Genre in der Tabelle ist_von_Genre.
Da nur mindestens eine der Bedingungen erfüllt sein müssen und nicht alle drei, brauchst du ein OR-Statement.
Doppelte FilmIDs filterst du mithilfe von DISTINCT im SELECT-Statement heraus.
SELECT DISTINCT FilmID
FROM ist_von_Genre
WHERE Genre="Komödie"
OR Genre="Science Fiction"
OR Genre="Action";Lösung mit IN
Deutlich kürzer wird es, wenn man es mitIN löst:
SELECT DISTINCT FilmID
FROM ist_von_Genre
WHERE Genre IN("Komödie","Science Fiction", "Action");Finde die Titel aller Filme, die zwischen 2010 und 2020 herausgekommen sind (Das Datum hat die Form 'yyyy-mm-dd').
Lösung anzeigen
Hier müssen wieder zwei Bedingungen gleichzeitig gelten, deshalb verwendest du AND.
Mit Datumsangaben kann wie mit Zahlen verglichen und gerechnet werden, deshalb kannst du >= und <= verwenden.
SELECT Titel
FROM FILM
WHERE Erscheinungsdatum >= '2010-01-01'
AND Erscheinungsdatum <= '2020-12-31';Lösung mit BETWEEN
Auch hier kann man die Lösung mit BETWEEN schreiben:
SELECT Titel
FROM FILM
WHERE Erscheinungsdatum
BETWEEN '2010-01-01' AND '2020-31-12';Gebe alle Namen von Personen aus, die nicht "Stan Lee" heißen. Filtere eventuelle doppelte Namen heraus.
Lösung anzeigen
Mit NOT prüfst du, ob ein Attributwert nicht dem nachfolgenden Wert entspricht.
Vergiss nicht, DISTINCT zu verwenden, um Doppelungen herauszufiltern, die es ohne den Schlüssel geben kann.
SELECT Name
FROM FILMPERSON
WHERE NOT Name="Stan Lee"Gib alle Filmtitel an, die zwar für einen Oscar nominiert waren, aber keinen bekommen haben.
Lösung anzeigen
Beide Bedingungen müssen gleichzeitig gelten. Verwende deshalb AND.
SELECT Titel
FROM FILM
WHERE Oscarnominierungen > 0
AND Oscars = 0;Gib die Namen aller Filmpersonen an, die genau eine Oscarnominierung mehr haben als Oscarauszeichnungen, aber dabei auch mindestens zweimal nominiert waren.
Lösung anzeigen
Du kannst mit Zahlen und Datumsangaben rechnen, also auch Differenzen bilden!
SELECT Name
FROM FILMPERSON
WHERE Oscarauszeichnungen = Oscarnominierungen - 1
AND Oscarnominierungen > 1;