Willkommen

SQL Lernen mit der Filmdatenbank

In diesem Kurs lernst du Schritt für Schritt, wie du mit SQL Daten aus einer Datenbank abfragen kannst. Unsere Datenbank enthält Informationen über Filme, Serien, Schauspieler und Regisseure.

Was ist SQL?

SQL (Structured Query Language) ist die Sprache, mit der man Datenbanken abfragt. Mit SQL kannst du:

  • Daten aus Tabellen abrufen (SELECT)
  • Daten filtern und sortieren
  • Daten aus mehreren Tabellen kombinieren
  • Berechnungen über Daten durchführen

So funktioniert dieser Kurs

Arbeite die Kapitel der Reihe nach durch. Jedes Kapitel enthält:

  • Theorie — Erklärungen der SQL-Konzepte
  • Beispiele — Klicke auf ein Beispiel, um es im Editor auszuprobieren
  • Übungen — Schreibe eigene Abfragen. Tipps und Lösungen helfen dir weiter.
Tipp: Der SQL-Editor ist immer am unteren Rand sichtbar. Klicke auf ein Beispiel oder schreibe deine eigene Abfrage und drücke Strg+Enter zum Ausführen.

Unsere Datenbank

Die Datenbank besteht aus 9 Tabellen. In der Seitenleiste links findest du das komplette Schema. Hier eine Übersicht der wichtigsten Beziehungen:

FilmRegisseur(über RegieID)
FilmReihe(gehört zu einer Filmreihe)
Reihe / SerieLand(gedreht in einem Land)
SchauspielerFilm / Folge(über spieltInFilm / spieltInFolge)
FolgeSerie(gehört zu einer Serie)

Probiere gleich deine erste Abfrage aus:

SELECT * FROM Film
Kapitel 1

SELECT — Daten abfragen

Mit dem SELECT-Befehl holst du Daten aus der Datenbank. Es ist der wichtigste und am häufigsten verwendete SQL-Befehl.

Grundaufbau einer Abfrage

Jede SQL-Abfrage hat mindestens zwei Teile:

SELECT spalte1, spalte2, ...
FROM tabellenname
  • SELECT bestimmt, welche Spalten angezeigt werden
  • FROM bestimmt, aus welcher Tabelle die Daten kommen

Alle Spalten abfragen mit *

Das Sternchen * bedeutet „alle Spalten“. So bekommst du die komplette Tabelle:

SELECT * FROM Film
SELECT * FROM Schauspieler
SELECT * FROM Land

Bestimmte Spalten auswählen

Meistens brauchst du nicht alle Spalten. Gib einfach die gewünschten Spaltennamen an, getrennt durch Kommas:

SELECT Titel, Jahr, Bewertung FROM Film
SELECT Vorname, Nachname FROM Schauspieler
SELECT Name, Staffeln FROM Serie

Übungen 0 / 25

Zeige alle Daten der Tabelle Film an.
Zeige alle Daten der Tabelle Schauspieler an.
Zeige alle Regisseure an.
Zeige alle Daten der Tabelle Reihe an.
Zeige alle Daten der Tabelle Land an.
Zeige alle Daten der Tabelle Folge an.
Zeige alle Daten der Tabelle Serie an.
Zeige nur die Titel aller Filme.
Zeige nur die Nachnamen aller Regisseure.
Zeige nur die Namen aller Länder.
Zeige Vorname und Nachname aller Schauspieler.★★
Zeige Titel und Bewertung aller Filme.★★
Zeige Name und Einwohner aller Länder.★★
Zeige Name und Staffeln aller Serien.★★
Zeige Reihenname und Anzahl aller Filmreihen.★★
Zeige Vorname und Nachname aller Regisseure.★★
Zeige Titel und Länge aller Filme.★★
Zeige Titel und Jahr aller Filme.★★
Zeige Titel, Staffel und Nummer aller Folgen.★★
Zeige Vorname, Nachname und GebOrt aller Schauspieler.★★
Zeige Titel, Länge und Bewertung aller Filme.★★
Zeige Titel, Jahr, Länge und Bewertung aller Filme.★★★
Zeige Vorname, Nachname, GebJahr und GebOrt aller Schauspieler.★★★
Zeige Vorname, Nachname und GebJahr aller Regisseure.★★★
Zeige Name, Einwohner und Sprache aller Länder.★★★
Kapitel 2

WHERE — Daten filtern

Mit WHERE kannst du bestimmen, welche Zeilen angezeigt werden sollen. Nur Zeilen, die die Bedingung erfüllen, erscheinen im Ergebnis.

Grundaufbau mit WHERE

SELECT spalten
FROM tabelle
WHERE bedingung

Vergleichsoperatoren

Du kannst Werte vergleichen mit:

  • = — gleich
  • != oder <> — ungleich
  • <, >, <=, >= — kleiner, größer, ...
SELECT * FROM Film WHERE Jahr = 2020
SELECT * FROM Film WHERE Bewertung > 8
SELECT * FROM Schauspieler WHERE GebJahr < 1970

Textsuche mit LIKE

Mit LIKE kannst du nach Textmustern suchen. Das Prozentzeichen % steht für „beliebig viele Zeichen“:

  • LIKE 'A%' — beginnt mit A
  • LIKE '%man' — endet mit „man“
  • LIKE '%Star%' — enthält „Star“
SELECT * FROM Film WHERE Titel LIKE '%Star%'
SELECT * FROM Schauspieler WHERE Nachname LIKE 'S%'

Bedingungen kombinieren: AND, OR, NOT

Mehrere Bedingungen lassen sich verknüpfen:

SELECT * FROM Film WHERE Bewertung > 7 AND Jahr > 2015
SELECT * FROM Film WHERE Jahr = 2019 OR Jahr = 2020
SELECT * FROM Film WHERE NOT Online = 'Netflix'

BETWEEN und IN

BETWEEN prüft, ob ein Wert in einem Bereich liegt. IN prüft, ob ein Wert in einer Liste enthalten ist:

SELECT * FROM Film WHERE Jahr BETWEEN 2010 AND 2020
SELECT * FROM Land WHERE Sprache IN ('Deutsch', 'Englisch')

Übungen 0 / 25

Finde alle Filme, die im Jahr 2020 erschienen sind.
Finde alle Filme mit einer Bewertung höher als 8.
Finde alle Schauspieler, die nach dem Jahr 1970 geboren wurden.
Finde alle Länder, die weniger als 80 Millionen Einwohner haben.
Finde alle Filmreihen, die mehr oder genau 5 Filme haben.
Finde alle Serien mit mehr als 3 Staffeln.
Finde alle Folgen, die eine zweistellige Nummer haben.
Finde alle Filme, die keinen Regisseur haben (RegieID ist leer).
Finde alle Filme, die zu einer Reihe gehören (Reihe ist nicht leer).
Finde alle Schauspieler, deren Nachname mit 'B' beginnt.★★
Finde alle Filme, deren Titel 'Star' enthält.★★
Finde alle Schauspieler, deren Vorname mit 'Ma' beginnt.★★
Finde alle Filme, deren Titel mit 'ter' endet.★★
Gib alle Regisseure aus, deren Geburtsjahr mit einer 6 endet.★★
Gib alle Serien aus, deren Name genau zwölf Zeichen lang ist.★★
Gib alle Länder aus, deren Name ein Leerzeichen enthält.★★
Finde alle Filme mit einer Bewertung über 8, die auf Netflix verfügbar sind.★★
Finde alle Schauspieler, die zwischen 1990 und 2000 geboren wurden.★★
Finde alle Schauspieler mit Vornamen 'Chris', 'Christopher', 'John', 'Jon' oder 'Mike'.★★
Finde alle Folgen, die genau 60, 57 oder 54 Minuten lang sind.★★
Finde alle Schauspieler, die in den Siebzigern (1970–1979) geboren wurden.★★
Finde die Titel aller Folgen, die nicht zu 'King of Queens', 'The IT Crowd' oder 'Two and a Half Men' gehören.★★
Finde alle Folgen mit einstelliger Nummer, die nicht in der ersten Staffel sind.★★★
Finde alle Schauspieler, die vor dem Jahr 1970 geboren wurden, aber nicht in New York.★★★
Finde alle Filme aus den Jahren 2018 bis 2022, die länger als 120 Minuten sind.★★★
Kapitel 3

ORDER BY & LIMIT — Sortieren und Begrenzen

Bringe deine Ergebnisse in die richtige Reihenfolge und begrenze die Anzahl der angezeigten Zeilen.

Sortieren mit ORDER BY

Mit ORDER BY sortierst du die Ergebnisse nach einer oder mehreren Spalten:

  • ASC — aufsteigend (Standard, kann weggelassen werden)
  • DESC — absteigend
SELECT spalten FROM tabelle
ORDER BY spalte ASC|DESC
SELECT Titel, Bewertung FROM Film ORDER BY Bewertung DESC
SELECT * FROM Schauspieler ORDER BY Nachname ASC
SELECT * FROM Film ORDER BY Jahr DESC, Bewertung DESC

Ergebnisse begrenzen mit LIMIT

LIMIT begrenzt die Anzahl der zurückgegebenen Zeilen. Besonders nützlich in Kombination mit ORDER BY:

SELECT Titel, Bewertung FROM Film ORDER BY Bewertung DESC LIMIT 5
SELECT * FROM Film ORDER BY Laenge DESC LIMIT 3
Hinweis: LIMIT steht immer ganz am Ende der Abfrage!

Übungen 0 / 10

Zeige alle Filme sortiert nach Bewertung (beste zuerst).
Zeige alle Schauspieler alphabetisch nach Nachname sortiert.
Zeige die 5 am besten bewerteten Filme (Titel und Bewertung).
Zeige die 3 längsten Filme (Titel und Länge).
Zeige die 10 am besten bewerteten Filme (Titel und Bewertung).★★
Zeige die 3 ältesten Regisseure mit Vorname, Nachname und Geburtsjahr.★★
Zeige alle Filme sortiert nach Jahr (neueste zuerst), bei gleichem Jahr nach Bewertung (beste zuerst).★★
Zeige die 5 kürzesten Folgen mit Titel und Länge.★★
Zeige die 3 Serien mit den meisten Staffeln (Name und Staffeln).★★★
Zeige die 5 ältesten Schauspieler mit Vorname, Nachname und Geburtsjahr.★★★
Kapitel 4

Aggregatfunktionen & GROUP BY

Berechne Zusammenfassungen über deine Daten: zähle, summiere und bilde Durchschnitte.

Aggregatfunktionen

Diese Funktionen fassen mehrere Zeilen zu einem einzigen Ergebnis zusammen:

  • COUNT(*) — zählt die Anzahl der Zeilen
  • AVG(spalte) — berechnet den Durchschnitt
  • SUM(spalte) — berechnet die Summe
  • MIN(spalte) — findet den kleinsten Wert
  • MAX(spalte) — findet den größten Wert
SELECT COUNT(*) FROM Film
SELECT AVG(Bewertung) FROM Film
SELECT MIN(GebJahr), MAX(GebJahr) FROM Schauspieler

Gruppieren mit GROUP BY

Mit GROUP BY fasst du Zeilen zusammen, die in einer Spalte den gleichen Wert haben. Damit kannst du z.B. zählen, wie viele Filme pro Jahr erschienen sind:

SELECT spalte, COUNT(*)
FROM tabelle
GROUP BY spalte
SELECT Jahr, COUNT(*) FROM Film GROUP BY Jahr
SELECT Online, COUNT(*) FROM Film GROUP BY Online
SELECT Sprache, COUNT(*) FROM Land GROUP BY Sprache

Gruppen filtern mit HAVING

HAVING ist wie WHERE, aber für gruppierte Ergebnisse. Es filtert nach der Gruppierung:

Regel: WHERE filtert einzelne Zeilen vor der Gruppierung. HAVING filtert Gruppen nach der Gruppierung.
SELECT Jahr, COUNT(*) FROM Film GROUP BY Jahr HAVING COUNT(*) > 2
SELECT Reihe, COUNT(*) FROM Film GROUP BY Reihe HAVING COUNT(*) > 1

Übungen 0 / 20

Zähle alle Schauspieler.
Finde die höchste Bewertung bei den Filmen.
Gib die durchschnittlichen Einwohner aller Länder aus.
Finde die niedrigste RegieID in den Folgen.
Finde das Jahr, in dem der älteste Film gedreht wurde.
Finde das Geburtsjahr des jüngsten Schauspielers.
Gib die durchschnittliche Länge einer Folge aus.
Gib aus, wie lange alle Filme insgesamt dauern.
Finde den Titel des kürzesten Films.★★
Finde das Land mit den meisten Einwohnern.★★
Finde den Nachnamen des jüngsten Regisseurs.★★
Wie viele Filme gibt es pro Streaming-Plattform (Online)?★★
Wie viele Filme sind pro Jahr erschienen?★★
Wie viele Folgen hat jede Serie?★★
Welche Streaming-Plattformen haben mehr als 5 Filme?★★
Wie viele Filme hat jede Filmreihe? Zeige nur Reihen mit mehr als einem Film.★★
Welches Jahr hat die höchste durchschnittliche Filmbewertung?★★★
Finde die Titel der kürzesten und längsten Folgen.★★★
Finde den Titel und den Seriennamen der ältesten Folge.★★★
Welche Sprachen werden in mehr als einem Land gesprochen?★★★
Kapitel 5

JOINs — Tabellen verknüpfen

Die wahre Stärke von SQL: Kombiniere Daten aus mehreren Tabellen zu einem Ergebnis.

Warum JOINs?

In unserer Datenbank sind die Informationen auf mehrere Tabellen verteilt. Ein Film hat z.B. eine RegieID, aber der Name des Regisseurs steht in der Tabelle Regisseur. Um beides zusammen anzuzeigen, brauchen wir einen JOIN.

INNER JOIN

Der INNER JOIN verbindet zwei Tabellen über eine gemeinsame Spalte. Nur Zeilen, die in beiden Tabellen einen passenden Wert haben, erscheinen im Ergebnis:

SELECT spalten
FROM tabelle1
JOIN tabelle2 ON tabelle1.spalte = tabelle2.spalte
SELECT Film.Titel, Regisseur.Vorname, Regisseur.Nachname FROM Film JOIN Regisseur ON Film.RegieID = Regisseur.RegieID
SELECT Serie.Name, Land.Name FROM Serie JOIN Land ON Serie.LandID = Land.LandID
Hinweis: Wenn Spaltennamen in beiden Tabellen gleich sind (z.B. Name), musst du den Tabellennamen voranstellen: Serie.Name, Land.Name.

Mehrere JOINs

Du kannst auch mehr als zwei Tabellen verknüpfen, indem du mehrere JOINs hintereinander schreibst:

SELECT Schauspieler.Vorname, Schauspieler.Nachname, spieltInFilm.Filmtitel FROM Schauspieler JOIN spieltInFilm ON Schauspieler.ActorID = spieltInFilm.ActorID
SELECT Film.Titel, Regisseur.Nachname, Reihe.Reihenname FROM Film JOIN Regisseur ON Film.RegieID = Regisseur.RegieID JOIN Reihe ON Film.Reihe = Reihe.Reihenname

LEFT JOIN

Ein LEFT JOIN zeigt alle Zeilen der linken Tabelle, auch wenn es keinen passenden Eintrag in der rechten Tabelle gibt. Fehlende Werte werden mit NULL gefüllt:

SELECT Film.Titel, Reihe.Reihenname FROM Film LEFT JOIN Reihe ON Film.Reihe = Reihe.Reihenname
Unterschied: Bei einem INNER JOIN würden Filme ohne Reihe fehlen. Beim LEFT JOIN sind sie dabei — mit NULL bei Reihenname.

Übungen 0 / 15

Zeige alle Filme mit dem Vor- und Nachnamen ihres Regisseurs.★★
Zeige alle Serien mit dem Namen des Landes, in dem sie produziert wurden.★★
Zeige alle Schauspieler und die Filmtitel, in denen sie mitspielen.★★
Finde den Titel und die Länge aller Filme, in denen 'Kevin James' mitspielt.★★
Finde alle Schauspieler, die in einem Film mit einer Bewertung von genau 6.5 mitgespielt haben.★★
Finde alle Seriennamen, in denen ein Schauspieler mit dem Nachnamen 'Jones' mitgespielt hat.★★
Zeige alle Filme mit dem Namen des Landes ihrer Filmreihe.★★
Finde alle Folgen, in denen 'Holland Taylor' mitgespielt hat.★★
Finde die Namen aller Schauspieler, die in einer Folge aus dem Jahr 2007 mitgespielt haben.★★★
Gib alle Filmtitel aus, die nicht vom Regisseur 'Steven Spielberg' sind (über JOIN).★★★
Zeige alle Schauspieler mit Filmtitel und Bewertung der Filme, in denen sie mitspielen (zwei JOINs).★★★
Welcher Regisseur hat die meisten Filme gedreht? Zeige Name und Anzahl.★★★
Zeige alle Filme mit Regisseur-Nachname und Reihenname (auch Filme ohne Reihe sollen erscheinen).★★★
Finde Titel und Länge aller Filme von 'Frank Coraci' oder Filme unter 100 Minuten mit Bewertung über 5.★★★
Gib alle Seriennamen aus, von Serien mit mehr als 10 Staffeln oder einer Bewertung über 9.0.★★★
Kapitel 6

Fortgeschrittene Abfragen

Lerne weitere nützliche SQL-Techniken: Unterabfragen, DISTINCT und Aliase.

DISTINCT &mdash; Doppelte entfernen

DISTINCT entfernt doppelte Zeilen aus dem Ergebnis:

SELECT DISTINCT GebOrt FROM Schauspieler
SELECT DISTINCT Online FROM Film
SELECT DISTINCT Sprache FROM Land

Aliase mit AS

Mit AS gibst du Spalten oder Tabellen einen Kurznamen (Alias). Das macht Ergebnisse lesbarer und Abfragen kürzer:

SELECT Titel, Bewertung AS Note, Laenge AS Dauer FROM Film
SELECT COUNT(*) AS Anzahl_Filme FROM Film
SELECT f.Titel, r.Nachname FROM Film f JOIN Regisseur r ON f.RegieID = r.RegieID
Tipp: Tabellen-Aliase (wie f für Film) machen lange JOINs viel übersichtlicher!

Unterabfragen (Subqueries)

Eine Unterabfrage ist eine SELECT-Abfrage innerhalb einer anderen Abfrage. Sie wird in Klammern geschrieben und kann überall stehen, wo ein Wert erwartet wird:

SELECT spalten FROM tabelle
WHERE spalte > (SELECT AVG(spalte) FROM tabelle)
SELECT Titel, Bewertung FROM Film WHERE Bewertung > (SELECT AVG(Bewertung) FROM Film)
SELECT * FROM Film WHERE Laenge = (SELECT MAX(Laenge) FROM Film)
SELECT Vorname, Nachname FROM Schauspieler WHERE ActorID IN (SELECT ActorID FROM spieltInFilm)

Übungen 0 / 15

Zeige alle verschiedenen Geburtsorte der Schauspieler (ohne Doppelte).★★
Zeige alle verschiedenen Streaming-Plattformen (ohne Doppelte).★★
Zeige alle verschiedenen Sprachen der Länder (ohne Doppelte).★★
Zeige Titel, Bewertung als 'Note' und Länge als 'Dauer' aller Filme.★★
Zähle die Anzahl der Filme und nenne die Spalte 'Anzahl_Filme'.★★
Verwende Tabellen-Aliase: Zeige Filmtitel und Regisseur-Nachname mit kurzen Alias-Namen (f, r).★★
Finde alle Filme, deren Bewertung über dem Durchschnitt aller Filme liegt.★★★
Finde den längsten Film (mit einer Unterabfrage).★★★
Zeige alle Schauspieler, die in mindestens einem Film mitspielen (mit IN-Unterabfrage).★★★
Zähle alle Filme mit Bewertung über 5.0 und einem Regisseur, der vor 1980 geboren wurde.★★★
Finde alle Filmtitel mit Bewertung unter dem Durchschnitt, sowie (falls vorhanden) den Reihennamen und den Landnamen.★★★
Finde alle Schauspieler, die vor 1970 geboren wurden und deren Nachname mit 's' endet, sowie deren Filmtitel.★★★
Zähle alle unterschiedlichen Folgen, in denen Kevin James, Charlie Sheen oder Holland Taylor zu sehen sind.★★★
Finde den längsten Film jeder Filmreihe. Zeige Reihe, Titel und Länge.★★★
Zeige alle Länder, die sowohl Filmreihen als auch Serien produziert haben.★★★