Zum Hauptinhalt springen
Version: 28Wa

IMDb mit SQL

Die 👉 IMDb (Akronym für Internet Movie Database) ist eine Online-Datenbank zu Filmen, Fernsehserien, Videoproduktionen, Computerspielen und Personen, die daran mitgewirkt haben. Im Dezember 2023 gab es Einträge zu über 17,8 Millionen Titeln. Sie verteilen sich unter anderem auf über 667.000 verschiedene Spielfilmproduktionen, über 285.000 Videofilme, über 143.000 Fernsehfilme, mehr als 254.000 Fernsehserien, fast 8 Millionen Serienepisoden und mehr als 7,2 Millionen Podcast-Episoden. Zudem sind über 13,1 Millionen Film- und Fernsehschaffende aufgeführt. -- Wikipedia1

Nach Namen Suchen

Mit dem Schlüsselwort LIKE kann nach einem bestimmten Muster gesucht werden. % steht dabei für beliebige Zeichen.

Beispiel: Es sollen alle Personen ausgegeben werden, deren Name mit Georg beginnt.

SELECT * FROM persons WHERE name LIKE 'Georg%';

... oder alle Personen, deren Name ein grosses Z enthält.

SELECT * FROM persons WHERE name LIKE '%Z%';
Gross- und Kleinschreibung

Der LIKE Befehl beachtet die Gross- und Kleinschreibung! Damit man nicht (wie in Python) zuerst den zu durchsuchenden Text in kleine Buchstaben transformieren muss, gibt es das insensitive Like: ILIKE. Damit wird die Gross- und Kleinschreibung ignoriert.

SELECT * FROM persons WHERE name ILIKE '%z%';

gibt alle Personen mit einem grossen- oder kleinen z im Namen zurück.

Ohne ILIKE

Ohne den Befehl ILIKE könnte die Abfrage so aussehen:

SELECT * FROM persons WHERE name LIKE '%z%' OR name LIKE '%Z%';

oder

SELECT * FROM persons WHERE LOWER(name) LIKE '%z%' OR name LIKE '%Z%';
1. Nach Namen Suchen
Datenbank
IMDB
👉 https://db-sql.ch/connections/3567ba88-a01d-4c46-9912-e802d128d2eb/imdb

Listen Sie alle Personen auf, die

  • mit Ihren Namen beginnen? (Achtung: Beim Namen John soll der Name Johnny nicht ausgegeben werden)
  • mit Ihrem Namen enden?
  • ihren Namen enthalten?
Laden...
Laden...

Spalten benennen

Die Spaltennamen lassen sich bei der Abfrage verändern oder neu definieren:

SELECT name as Spitzname, tierart as Tier, lieblingsfutter as Frisst
FROM haustiere
2. Unterschied finden
Datenbank
legomania
👉 https://db-sql.ch/connections/3567ba88-a01d-4c46-9912-e802d128d2eb/legomania
  1. Wo liegt der Unterschied zwischen den beiden Queries? Führen Sie beide Queries aus und halten Sie den Unterschied fest.
  2. Funktioniert es auch mit einfachen Anführungszeichen '?
SELECT name as Spitzname, tierart as Tier, lieblingsfutter as Frisst
FROM haustiere;
SELECT name as "Spitzname", tierart as "Tier", lieblingsfutter as "Frisst"
FROM haustiere;
Laden...

Texte verändern

CONCAT(text1, text2, ...) oder text1 || text 2

Mit dem Schlüsselwort CONCAT können Texte zusammengefügt werden:

SELECT CONCAT('Hallo ', name) FROM persons;
-- oder äquivaltent
SELECT 'Hallo ' || name FROM persons;

Substring und Replace

SUBSTRING(text, start, [length])

Mit dem Schlüsselwort SUBSTRING können Textausschnitte ausgegeben werden, wobei der start Index angibt, welches der erste Buchstaben ist. Achtung - hier hat der erste Buchstabe im Gegensatz zu Python den Index 1! Optional kann mit dem Parameter length die Länge des Ausschnitts angegeben werden.

SELECT SUBSTRING('Hallo', 2); -- > 'allo'
SELECT SUBSTRING('Hallo', 2, 3); -- > 'all'
SELECT SUBSTRING('Hallo', 1, 3); -- > 'Hal'
-- oder mit Spalteninhalten
SELECT SUBSTRING(name, 1, 5) FROM persons;

REPLACE(text, old, new)

Mit dem Schlüsselwort REPLACE können Textteile ersetzt werden

-- "Reto Holz" wird zu "Reto_Holz"
SELECT REPLACE(name, ' ', '_') FROM persons;

Weitere Operatoren und Funktionen

3. IMDB-URLS
Datenbank
IMDB
👉 https://db-sql.ch/connections/3567ba88-a01d-4c46-9912-e802d128d2eb/imdb
  1. Welche unterschiedlichen Filmtypen gibt es? Listen Sie alle auf.
  2. Zeigen Sie alle Attribute der ersten 100 Kurzfilme aus dem Jahr 2026 an.
  3. Die angezeigte ID (bspw. tt31013067) findet man auch in der URL der IMDB-Seite. Erstellen Sie eine Abfrage, welche nebst allen Attributen noch zusätzlich die URL für die ersten 100 Kurzfilme ausgibt, die im Jahr 2026 erschienen sind.
    Die URL hat folgendes Format: https://www.imdb.com/title/<ID>/
Laden...
Laden...

Aggregierte Abfragen

Oft sollen Ergebnisse in einer zusammengefassten Form ausgegeben werden. So ist bspw. oft von Interesse, wie viele Datensätze in einer Tabelle vorhanden sind, oder wie hoch der Durchschnittswert einer Spalte ist. Hierfür gibt es die sogenannten aggregierten Abfragen.

4. Aggregierte Abfragen
Datenbank
legomania
👉 https://db-sql.ch/connections/3567ba88-a01d-4c46-9912-e802d128d2eb/legomania
  1. COUNT
    COUNT(*) Was macht diese Abfrage?
    SELECT COUNT(*) FROM legodudes;
    Laden...
Laden...

Die Aggregationsfunktionen lassen sich nun auch als verschachtelte WHERE-Klauseln verwenden, bspw. um alle Legodudes auszugeben, die die höchste Lieblingszahl haben:

SELECT *
FROM legodudes
WHERE lieblingszahl = (SELECT MAX(lieblingszahl) FROM legodudes);
Merke

In der WHERE-Klausel können auch verschachtelte Abfragen verwendet werden, sofern diese nur einen einzigen Wert zurückgeben.

5. Ältester Legodude
Datenbank
legomania
👉 https://db-sql.ch/connections/6750d31f-6978-4e24-b044-e2dd9763bd4f/legomania

Geben Sie den jüngsten Legodude aus, indem Sie eine verschachtelte Unterabfrage verwenden.

Laden...
Laden...

Group By

Oft interessiert aber nicht nur die Anzahl der Datensätze, sondern die Anzahl der Datensätze pro Kategorie.

Hierfür gibt es den GROUP BY-Befehl.

GROUP BY

Mit GROUP BY lassen sich Datensätze nach einer oder mehrerer Spalten gruppieren. Die Aggregatfunktionen werden dann auf die einzelnen Gruppen angewendet.

SELECT land, COUNT(*)
FROM legodudes
GROUP BY land;
/* land | count
------------+-------
Irland | 1
Österreich | 1
Schweden | 1
USA | 3
Schweiz | 1 */
Wichtig

Für jede Spalte, die nicht in der GROUP BY-Klausel steht, muss eine Aggregatfunktion verwendet werden!

6. Spielfilme pro Jahr
Datenbank
imdb
👉 https://db-sql.ch/connections/3567ba88-a01d-4c46-9912-e802d128d2eb/imdb

In welchem Jahr (start_year) wurden wie viele Spielfilme (movies) veröffentlicht? Erstellen Sie eine Tabelle, welche die Anzahl der Spielfilme pro Jahr anzeigt.

Laden...

Zusatz:

  • Ordnen Sie die Tabelle nach dem Startjahr absteigend.
  • Zeigen Sie nur Einträge an, bei welchen das Startjahr bekannt (= nicht NULL) ist.
  • Beschriften Sie die Spalten mit Jahr und Anzahl Spielfilme.
Laden...

Footnotes

  1. Quelle: Wikipedia 👉 https://de.wikipedia.org/wiki/IMDb