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

Übungen 0 / 3

Probiere aus: SELECT * FROM Film.
Probiere aus: SELECT Titel FROM Film.
Probiere aus: SELECT Vorname, Nachname FROM Schauspieler.
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

Zählen von Daten (COUNT)

Lerne, wie du herausfindest, wie viele Einträge deine Tabellen haben und wie du Duplikate beim Zählen ignorierst.

Zeilen und Werte zählen

Die COUNT() Funktion ist oft die erste, die man braucht:

  • COUNT(*) — zählt einfach alle Zeilen in einer Tabelle.
  • COUNT(DISTINCT spalte) — zählt nur die unterschiedlichen Werte in einer Spalte. Duplikate werden ignoriert.
SELECT COUNT(*) FROM Film
SELECT COUNT(DISTINCT Sprache) FROM Land

Übungen 0 / 20

Wie viele Schauspieler sind in der Datenbank gespeichert?
Wie viele Serien gibt es insgesamt?
Wie viele Folgen sind in der Datenbank?
Wie viele unterschiedliche Sprachen sind in der Tabelle Land gespeichert?★★
Wie viele unterschiedliche Geburtsorte gibt es bei den Schauspielern?★★
Wie viele verschiedene Geburtsjahre gibt es bei den Regisseuren?★★
Zähle alle Serien, die in den USA (LandID 1) gedreht wurden.★★
Wie viele Schauspieler spielen in Hangover 3 mit?★★★
Wie viele Schauspieler wurden in New York geboren?★★★
Wie viele Folgen wurden nach 2015 gedreht?★★★
Wie viele Filme gibt es von Superman oder Star Wars?★★★
Wie viele Schauspieler sind nach oder in 1970 geboren und haben einen Vornamen, der mit M anfängt?★★★
Wie viele Filme sind besser bewertet als 8.0 und dauern länger als zwei Stunden?★★★
Wie viele Regisseure mit verschiedenen Nachnamen sind vor 1950 geboren?★★★
Wie viele verschiedene Regisseure haben Serienfolgen vor dem Jahr 2005 gedreht?★★
Wie viele Schauspieler haben einen Vornamen, der mehr als 4 Buchstaben lang ist?★★★★
Wie viele verschiedene Regisseure haben nach 2016 eine Folge gedreht, die kürzer ist als 50 Minuten?★★★★
Zähle die Anzahl aller verschiedenen Schauspieler, die eine Hauptrolle hatten.★★★★
In wie vielen Folgen, die mit dem Wort 'Die' anfangen, spielt der Schauspieler mit der Nummer 30 mit?★★★★
Wie viele Serien haben eine Bewertung von weniger als 8,5 und zwischen 6 und 10 Staffeln?★★★★
Kapitel 5

Kleinste und größte Werte (MIN & MAX)

Finde die Extreme in der Datenbank.

Minimum und Maximum

Mit diesen Funktionen durchsuchst du eine Spalte nach dem höchsten oder niedrigsten Wert. Das Tolle daran: Sie funktionieren nicht nur bei Zahlen, sondern auch bei Jahreszahlen und sogar bei Texten (alphabetisch sortiert)!

  • MIN(spalte) — findet den kleinsten Wert (z. B. das älteste Jahr, die kleinste Zahl, das erste Wort im Alphabet).
  • MAX(spalte) — findet den größten Wert (z. B. das jüngste Jahr, die größte Zahl, das letzte Wort im Alphabet).
SELECT MIN(GebJahr) FROM Schauspieler
SELECT MAX(Bewertung) FROM Film
SELECT MIN(Name) FROM Land

Übungen 0 / 18

Was ist die höchste Bewertung, die ein Film erhalten hat?
In welchem Jahr wurde der älteste Film gedreht?
Finde das Geburtsjahr des jüngsten Schauspielers.
Was ist die längste Laufzeit einer Folge?
Finde die geringste Einwohnerzahl eines Landes.
Welcher Schauspieler (alphabetisch nach Vorname sortiert) steht ganz als Erstes im Telefonbuch?★★
Was ist die höchste Bewertung einer Serie, die aus den USA (LandID 1) stammt?★★
In welchem Jahr wurde der älteste Schauspieler geboren, der in 'London' geboren wurde?★★
Was ist die maximale Länge eines Films, der im Jahr 2020 erschienen ist?★★
Welche ist die höchste Staffelnummer, die in der Tabelle Folge vorkommt?★★
Finde die geringste Länge eines Films, der besser als 8.0 bewertet ist.★★★
Was ist das jüngste Geburtsjahr eines Regisseurs, dessen Nachname mit 'S' beginnt?★★★
Was ist die längste Laufzeit einer Folge aus der allerersten Staffel einer Serie?★★★
Finde die maximale Anzahl an Filmen, die in einer einzigen Reihe vorkommen.★★★
Welches Land (Name alphabetisch als letztes) hat Englisch als Sprache?★★★
Was ist die schlechteste (niedrigste) Bewertung eines Films, der länger als 150 Minuten dauert und nach 2010 gedreht wurde?★★★★
Was ist das älteste Geburtsjahr eines Schauspielers, dessen Vorname aus exakt 4 Buchstaben besteht?★★★★
Was ist die maximale Folgennummer einer Folge, die kürzer als 45 Minuten ist und von dem Regisseur mit der ID 5 gedreht wurde?★★★★
Kapitel 6

Durchschnitt (AVG) und Summe (SUM)

Berechne Durchschnittswerte und Gesamtsummen direkt in deiner Datenbank.

Summe berechnen

Wenn in einer Spalte Zahlen sind, kannst du mit SUM (Summe) alle zahlen zusammen zählen.

  • COUNT(spalte) — Zählt die Anzahl der Spalten!
  • SUM(spalte) — Addiert alle Werte der Spalte zu einer Gesamtsumme zusammen.
  • SUM(DISTINCT spalte) — Addiert nur die unterschiedlichen Werte zusammen.
SELECT SUM(GebJahr) FROM Regisseur
SELECT SUM(Einwohner) FROM Land WHERE Sprache='Deutsch'
SELECT SUM(DISTINCT Laenge) From Film WHERE Titel LIKE 'S%'

Durchschnitt berechnen

Wenn du mit Zahlen arbeitest, kannst du mit AVG (Average) den Durchschnitt berechnen.

  • AVG(spalte) — Berechnet den mathematischen Mittelwert aller Zahlen in dieser Spalte.
  • AVG(DISTINCT spalte) — Berechnet nur den Durchschnitt aller unterschiedlichen Zahlen.
SELECT AVG(Bewertung) FROM Film
SELECT AVG(DISTINCT GebJahr) FRom Schauspieler
SELECT AVG(Laenge) FROM Folge WHERE Staffel = 1

Übungen 0 / 21

Wie viele Einwohner leben insgesamt in allen erfassten Ländern?
Was ist die durchschnittliche Länge aller Folgen?
Wie hoch ist die Bewertung der Staffeln aller Serien zusammengerechnet?
Wie viele Filme gehören zu einer Reihe?★★
Berechne das durchschnittliche Geburtsjahr aller Schauspieler.★★
Zeige den Durchschnitt aller unterschiedlichen Produktionsjahre der Tabelle Folge an.★★
Was ist die durchschnittliche Bewertung aller amerikanischen Serien (LandID 1)?★★
Wie viele Minuten Filmmaterial gibt es insgesamt von der Reihe 'Star Wars'?★★
Was ist die durchschnittliche Länge der Folgen aus dem Jahr 2019?★★
Wie viele Einwohner haben die Länder insgesamt, in denen man 'Englisch' spricht?★★★
Was ist die durchschnittliche Bewertung von Filmen, die länger als 150 Minuten sind?★★★
Berechne die Summe der Längen aller Folgen, die der Regisseur mit der Nummer 5 gedreht hat.★★★
Was ist das durchschnittliche Geburtsjahr der Regisseure, deren Nachname mit 'S' beginnt?★★★
Wie viele Minuten dauern alle Filme zusammen, die eine Bewertung von über 8.5 haben?★★★
Zeige das durschschnittliche Geburtsjahr aller Regisseure an, die vor 1970 geboren wurden.★★★
Was ist die durchschnittliche Länge der Folgen in der ersten Staffel (Staffel 1)?★★★
Berechne die durchschnittliche Bewertung der Filme, die zwischen 1990 und 2000 gedreht wurden.★★★★
Wie ist die durschnittliche Staffelanzahl aller Serien zusammen, deren Bewertung schlechter als 7.5 ist?★★★★
Was ist das durchschnittliche Geburtsjahr der Schauspieler, die in 'London' oder 'New York' geboren wurden?★★★★
Berechne die Summe der Längen aller Folgen, deren Name mit 'Die' beginnt und die nach 2015 gedreht wurden.★★★★
Berechne die durchschnittliche Actor Nummer aller Schauspieler, die als Nebenrolle in Hangover 3 mitgespielt haben.★★★★
Kapitel 7

Unterabfragen (Subqueries)

Lerne, wie du Abfragen ineinander verschachtelst, um komplexe Filterbedingungen zu erstellen.

Was ist eine Unterabfrage?

Eine Unterabfrage ist eine SELECT-Anweisung innerhalb einer anderen SELECT-Anweisung. Sie wird meistens in der WHERE-Klausel verwendet, um einen Wert zu berechnen, den man vorher nicht genau kennt.

  • Die innere Abfrage (Subquery) wird zuerst ausgeführt.
  • Ihr Ergebnis wird an die äußere Abfrage übergeben.
  • Wichtig: Die innere Abfrage muss in Klammern stehen.
SELECT Titel FROM Film WHERE RegieID = (SELECT RegieID FROM Regisseur WHERE Nachname = 'Nolan')
SELECT Vorname, Nachname FROM Schauspieler WHERE GebOrt = (SELECT GebOrt FROM Schauspieler WHERE ActorID = 5)

Unterabfragen mit Aggregaten

Besonders mächtig werden Unterabfragen in Kombination mit Funktionen wie MAX, MIN oder AVG. So kannst du Datensätze mit dem Durchschnitt oder Extremwerten vergleichen.

SELECT Titel FROM Film WHERE Laenge = (SELECT MAX(Laenge) FROM Film)
SELECT Name FROM Serie WHERE Bewertung > (SELECT AVG(Bewertung) FROM Serie)

Übungen 0 / 20

Zeige alle Filme, die im gleichen Jahr wie 'Knives Out' erschienen sind.
Welche Serien kommen aus dem gleichen Land wie die Serie 'Breaking Bad'?
Finde alle Schauspieler, die am gleichen Ort wie Bradley Cooper geboren wurden.★★
Welche Filme sind länger als der Film Jurassic Park?★★
Finde alle Schauspieler, die im gleichen Jahr geboren wurden wie Charlie Sheen.★★
Welche Länder haben mehr Einwohner als 'Deutschland'?★★
Zeige alle Serien, die eine bessere Bewertung haben als Stranger Things.★★
Welche Filme sind länger als die durchschnittliche Länge aller Filme?★★★
Finde alle Schauspieler, die jünger sind als der Durchschnitt aller Schauspieler.★★★
Welche Regisseure sind älter als der Schauspieler Mike Tyson?★★★
Zeige alle Serien aus dem Land: United Kingdom.★★★
Welche Filme gehören zu einer Reihe, die insgesamt mehr als 5 Filme umfasst?★★★
Finde Folgen, die länger sind als der Durchschnitt aller Folgen aus dem Jahr 1999.★★★
Zeige Vor- und Nachname des Regisseurs, der den absolut längsten Film gedreht hat.★★★★
Welches Land hat die wenigsten Einwohner? Zeige nur den Namen an.★★★★
Welche Filme haben eine bessere Bewertung als die durchschnittliche Bewertung aller Serien?★★★★
Zeige alle Regisseure, deren Geburtsjahr kleiner ist als das kleinste Geburtsjahr aller Schauspieler.★★★★
Welche Serien haben eine höhere Bewertung als der Durchschnitt aller Bewertungen der Star-Wars-Filme?★★★★
Zeige alle Folgen der am schlechtesten bewerteten Serie an.★★★★
Finde den Titel des Films, dessen Bewertung höher ist als der Durchschnitt aller Filme, die vom Regisseur des Films 'Hangover' gedreht wurden.★★★★★
Kapitel 8

Tabellen verknüpfen (Natürlicher Verbund)

Lerne, wie du Daten aus mehreren Tabellen zusammenführst, um komplexere Zusammenhänge abzufragen.

Der Natürliche Verbund

Bisher haben wir Daten immer nur aus einer einzigen Tabelle abgefragt. In echten Datenbanken sind Informationen aber meist auf mehrere Tabellen verteilt, um Wiederholungen zu vermeiden. Mit einem NATURAL JOIN (Natürlicher Verbund) kannst du zwei Tabellen automatisch miteinander verbinden. Das funktioniert immer dann, wenn beide Tabellen eine Spalte mit dem exakt gleichen Namen haben (wie zum Beispiel die Spalte LandID in den Tabellen Serie und Land oder RegieID bei Film und Regisseur).

  • FROM tabelle1 NATURAL JOIN tabelle2 — Verbindet die beiden Tabellen anhand ihrer gleichnamigen Spalte nahtlos miteinander.
  • Nach dem Verknüpfen kannst du auf die Spalten beider Tabellen zugreifen, als wären sie eine einzige große Tabelle.
  • Du kannst den Verbund problemlos mit WHERE, AVG() oder anderen bekannten Funktionen kombinieren.
SELECT Titel, Vorname, Nachname FROM Film NATURAL JOIN Regisseur
SELECT Titel, Laenge FROM Film NATURAL JOIN Regisseur WHERE Nachname = 'Spielberg'

Übungen 0 / 22

Zeige alle Filme und die dazugehörigen Regisseure an (verknüpfe Film und Regisseur).
Verknüpfe die Tabelle Folge mit dem jeweiligen Regisseur.
Verknüpfe die Schauspieler mit der Tabelle, die zeigt, in welchen Filmen sie mitspielen.
Zeige alle Filmreihen zusammen mit den Informationen zum jeweiligen Land an.
Zeige alle Filme und ihre Regisseure an, die nach dem Jahr 2015 erschienen sind.★★
Welche Schauspieler spielen in Filmen eine Hauptrolle?★★
Zeige alle Folgen und ihre Regisseure an, die in der ersten Staffel erschienen sind.★★
Welche Filmreihen stammen aus einem Land, in dem man 'Englisch' spricht?★★
Finde alle Verknüpfungen von Schauspielern und Filmen, bei denen der Schauspieler in 'New York' geboren wurde.★★
Zeige alle Filme und ihre Regisseure an, bei denen der Regisseur den Nachnamen 'Spielberg' hat.★★
Zeige nur den Filmtitel sowie den Vor- und Nachnamen des dazugehörigen Regisseurs an.★★★
Zeige den Vornamen, Nachnamen und den jeweiligen Filmtitel aller Schauspieler an.★★★
Zeige den Reihennamen und den Namen des Landes an, aus dem die Reihe stammt.★★★
Zeige den Titel der Folge und den Nachnamen des Regisseurs an, wenn die Folge kürzer als 22 Minuten ist.★★★
Welche Filmtitel gehören zu Schauspielern, die vor 1960 geboren sind? Zeige Vorname, Nachname und Filmtitel an.★★★
Wie hoch ist die durchschnittliche Bewertung aller Filme von Steven Spielberg?★★★★
Wie viele Folgen hat die Regisseurin Pamela Fryman gedreht?★★★★
Wie viele Einwohner leben in den Land, aus dem die Filmreihe Superman stammt?★★★★
Was ist das Geburtsjahr des ältesten Schauspielers, der im Film 'Hangover' mitspielt?★★★★
Wie lange dauern alle Folgen zusammen, die vom Regisseur mit dem Nachnamen 'Ackerman' gedreht wurden?★★★★
Wie heißt der Titel des Films, der von dem jüngsten in der Datenbank erfassten Regisseur gedreht wurde?★★★★★
Zeige die Vornamen und Nachnamen aller Schauspieler an, die in einem Film mitspielen, der länger als 130 Minuten ist.★★★★★
Kapitel 9

Tabellen verknüpfen (INNER JOIN mit ON)

Lerne, Tabellen gezielt über selbst gewählte Spalten zu verknüpfen – auch wenn die Spaltennamen unterschiedlich sind.

INNER JOIN – der explizite Verbund

Der NATURAL JOIN aus Kapitel 8 ist praktisch, aber er hat eine Einschränkung: Er funktioniert nur, wenn beide Tabellen eine Spalte mit exakt demselben Namen haben. Was aber, wenn die Spalten inhaltlich zusammenpassen, aber unterschiedlich heißen? Zum Beispiel: In der Tabelle Folge heißt die Spalte Serie, in der Tabelle Serie heißt der Primärschlüssel aber Name. Ein NATURAL JOIN würde hier nicht funktionieren. Genau für diesen Fall gibt es den INNER JOIN mit ON: Du gibst selbst an, welche Spalten verknüpft werden sollen.

  • FROM tabelle1 INNER JOIN tabelle2 ON tabelle1.spalte = tabelle2.spalte — Verbindet die Tabellen anhand der von dir angegebenen Spalten.
  • Das Schlüsselwort INNER kann weggelassen werden — JOIN allein bedeutet dasselbe.
  • Du kannst Spaltennamen mit dem Tabellennamen qualifizieren: Film.RegieID statt nur RegieID. Das ist besonders wichtig, wenn beide Tabellen eine gleichnamige Spalte haben.
  • Der INNER JOIN gibt nur Zeilen zurück, bei denen in beiden Tabellen ein passender Wert existiert. Datensätze ohne Treffer (z. B. Filme ohne Regisseur) fallen heraus.
SELECT Titel, Vorname, Nachname FROM Film JOIN Regisseur ON Film.RegieID = Regisseur.RegieID
SELECT Folge.Titel, Serie.Name FROM Folge JOIN Serie ON Folge.Serie = Serie.Name
SELECT Vorname, Nachname, Filmtitel FROM Schauspieler JOIN spieltInFilm ON Schauspieler.ActorID = spieltInFilm.ActorID

Übungen 0 / 23

Verbinde die Tabellen Film und Regisseur über die RegieID.
Verbinde die Tabellen Folge und Regisseur über die RegieID.
Verbinde die Tabellen Folge und Serie über den Seriennamen.
Verbinde die Tabellen Schauspieler und spieltInFilm über die ActorID.
Verbinde die Tabellen Reihe und Land über die LandID.
Suche alle Filme vom Regisseur Steven Spielberg.★★
Suche alle Serien, die in Deutschland (LandID = 2) produziert wurden.★★
Zeige alle Folgen, die zur Serie 'The IT Crowd' gehören.★★
Zeige alle Schauspieler an, die in einer Hauptrolle (Hauptrolle = 1) in einem Film mitgespielt haben.★★
Zeige alle Filmreihen an, die aus einem englischsprachigen Land stammen.★★
Zeige nur den Filmtitel sowie den Vor- und Nachnamen des Regisseurs an.★★★
Zeige den Titel der Folge, den Namen der Serie und die Staffelnummer an.★★★
Suche die Vornamen und Nachnamen aller Schauspieler, die in der Folge 'Valentinstag' auftreten.★★★
Zeige den Reihennamen und den Namen des Landes an, aus dem die jeweilige Filmreihe stammt.★★★
Zeige den Titel und die Länge aller Folgen der zweiten Staffel, zusammen mit dem Namen der zugehörigen Serie.★★★
Wie viele Folgen hat Regisseur Graham Linehan insgesamt gedreht?★★★★
Was ist die durchschnittliche Bewertung aller Serien, die aus einem englischsprachigen Land stammen?★★★★
Wie viele Schauspieler spielen im Film 'Hangover' mit? Zeige die Anzahl an.★★★★
Verbinde Regisseur mit Film und Folge: Zeige alle Regisseure an (Vorname, Nachname), die sowohl mindestens einen Film als auch mindestens eine Folge gedreht haben.★★★★
Wie viele Folgen der Serie 'King of Queens' sind in der Datenbank enthalten?★★★★
Zeige den Titel und die Bewertung des Films mit der höchsten Bewertung von Steven Spielberg an.★★★★★
Zeige die Vornamen und Nachnamen aller Schauspieler an, die in einem Film einer deutschen Filmreihe mitgespielt haben.★★★★★
Zeige Vorname und Nachname aller Regisseure, die einen Film gedreht haben, dessen Bewertung über dem Durchschnitt aller Filme liegt.★★★★★
Kapitel 10

Drei oder mehr Tabellen verbinden

Verknüpfe mehrere Tabellen in einer einzigen Abfrage, um komplexe Zusammenhänge auf einmal sichtbar zu machen.

Mehrere JOINs hintereinander

Manchmal reicht es nicht, zwei Tabellen zu verbinden. Wenn du zum Beispiel wissen willst, aus welchem Land die Reihe eines Films stammt, musst du drei Tabellen verknüpfen: FilmReiheLand. Das funktioniert, indem du einfach mehrere JOIN ... ON ... Blöcke hintereinander schreibst. Jeder neue JOIN baut auf dem Ergebnis des vorherigen auf.

SELECT Film.Titel, Land.Name FROM Film JOIN Reihe ON Film.Reihe = Reihe.Reihenname JOIN Land ON Reihe.LandID = Land.LandID
SELECT Vorname, Nachname, Film.Titel FROM Schauspieler JOIN spieltInFilm ON Schauspieler.ActorID = spieltInFilm.ActorID JOIN Film ON spieltInFilm.Filmtitel = Film.Titel

Übungen 0 / 13

Verbinde die Tabellen Film, Reihe und Land miteinander.
Verbinde die Tabellen Folge, Serie und Land miteinander.
Zeige alle Filme an, die zu einer Filmreihe aus Deutschland gehören.★★
Zeige alle Folgen an, die zu einer Serie aus dem United Kingdom gehören.★★
Zeige alle Filme an, in denen Kevin James mitgespielt hat.★★
Zeige den Filmtitel, den Reihennamen und den Namen des Herkunftslandes für alle Filme, die zu einer Filmreihe gehören.★★★
Suche die Titel und Bewertungen aller Filme, in denen Charlie Sheen mitgespielt hat.★★★
Zeige die Vor- und Nachnamen der Regisseure aller Folgen, die zu einer Serie mit der Bewertung 7.3 gehören.★★★
Zeige den Folgentitel, den Seriennamen und den Nachnamen des Regisseurs für alle Folgen der ersten Staffel an.★★★
Suche die Vor- und Nachnamen aller Schauspieler, die in einer Serie mitgespielt haben, die in Deutschland produziert wurde.★★★★
Wie hoch ist die durchschnittliche Bewertung aller Filme, in denen Schauspieler mitgespielt haben, die in 'New York' geboren wurden?★★★★
Zeige den Filmtitel, den Vor- und Nachnamen des Regisseurs sowie den Namen des Herkunftslandes für alle Filme der Reihe 'Star Wars' an.★★★★★
Zeige die Vor- und Nachnamen aller Schauspieler, die in einem Film mitgespielt haben, der zu einer Filmreihe aus Deutschland gehört.★★★★★
Kapitel 11

Äußerer Verbund (LEFT JOIN)

Lerne, wie du alle Datensätze einer Tabelle ausgibst – auch dann, wenn es in der verknüpften Tabelle keinen passenden Eintrag gibt.

Das Problem mit dem INNER JOIN

Ein INNER JOIN gibt nur die Zeilen zurück, bei denen in beiden Tabellen ein passender Wert vorhanden ist. Das klingt sinnvoll – hat aber einen Haken: Datensätze ohne Treffer verschwinden einfach aus dem Ergebnis. In unserer Datenbank haben einige Filme keinen Regisseur eingetragen (der Wert ist NULL). Ein Film INNER JOIN Regisseur würde diese Filme komplett ausblenden. Mit einem LEFT JOIN (auch: LEFT OUTER JOIN) bleiben dagegen alle Zeilen der linken Tabelle im Ergebnis – auch die ohne Treffer. Für die fehlenden Spalten der rechten Tabelle steht dann NULL.

  • FROM tabelle1 LEFT JOIN tabelle2 ON ... — Alle Zeilen aus tabelle1 bleiben erhalten. Zeilen ohne Treffer in tabelle2 erhalten dort den Wert NULL.
  • LEFT JOIN und LEFT OUTER JOIN sind gleichbedeutend — das Wort OUTER kann weggelassen werden.
  • Mit WHERE spalte IS NULL findest du gezielt die Zeilen, bei denen kein Treffer gefunden wurde — zum Beispiel alle Filme ohne Regisseur.
  • Mit WHERE spalte IS NOT NULL filterst du dagegen nur die Zeilen mit einem Treffer — das Ergebnis entspricht dann einem INNER JOIN.
SELECT Titel, Vorname, Nachname FROM Film LEFT JOIN Regisseur ON Film.RegieID = Regisseur.RegieID
SELECT Serie.Name, Folge.Titel FROM Serie LEFT JOIN Folge ON Folge.Serie = Serie.Name
SELECT Titel FROM Film LEFT JOIN Regisseur ON Film.RegieID = Regisseur.RegieID WHERE Regisseur.Vorname IS NULL

Übungen 0 / 18

Verbinde Film und Regisseur mit einem LEFT JOIN, sodass alle Filme angezeigt werden – auch die ohne Regisseur.
Verbinde Schauspieler und spieltInFilm mit einem LEFT JOIN, sodass alle Schauspieler erscheinen – auch die, die in keinem Film mitspielen.
Verbinde Serie und Folge mit einem LEFT JOIN, sodass alle Serien erscheinen – auch die, für die keine Folgen eingetragen sind.
Zeige alle Filmreihen und ihre zugehörigen Filme an – auch Reihen, für die noch kein Film eingetragen ist.★★
Zeige alle Filme zusammen mit ihrer Filmreihe an – auch Filme, die keiner Reihe angehören.★★
Zeige alle Serien mit einer Bewertung über 8.0 und ihre Folgen an – auch wenn für eine Serie keine Folgen eingetragen sind.★★
Zeige alle Filme, die vor dem Jahr 2000 erschienen sind, zusammen mit ihrem Regisseur – auch wenn kein Regisseur eingetragen ist.★★
Zeige den Titel jedes Films sowie den Vor- und Nachnamen des Regisseurs an. Filme ohne Regisseur sollen ebenfalls erscheinen.★★★
Zeige den Namen jeder Serie, den Folgentitel und die Staffelnummer an. Serien ohne Folgen sollen ebenfalls erscheinen.★★★
Zeige den Vor- und Nachnamen aller Schauspieler sowie den Titel der Filme, in denen sie mitspielen, an. Schauspieler ohne Filmeinsatz sollen ebenfalls erscheinen.★★★
Zeige den Reihennamen und den Titel der zugehörigen Filme an. Filmreihen ohne eingetragene Filme sollen ebenfalls erscheinen.★★★
Welche Filme haben keinen Regisseur in der Datenbank eingetragen? Zeige nur deren Titel an.★★★★
Welche Serien haben keine Folgen in der Datenbank? Zeige nur deren Namen an.★★★★
Welche Schauspieler spielen in keinem Film mit? Zeige Vor- und Nachname an.★★★★
Welche Schauspieler spielen in keiner Folge mit? Zeige Vor- und Nachname an.★★★★
Zeige den Titel aller Filme, die keiner Filmreihe angehören, zusammen mit dem Vor- und Nachnamen des Regisseurs. Filme ohne Regisseur sollen dabei ebenfalls erscheinen.★★★★★
Zeige für jede Serie den Seriennamen und – falls vorhanden – den Titel der allerersten Folge (Staffel 1, Nummer 1).★★★★★
Zeige Vor- und Nachname aller Schauspieler, die zwar in mindestens einer Folge, aber in keinem einzigen Film mitspielen.★★★★★
Kapitel 12

RIGHT JOIN, CROSS JOIN und die richtige Wahl

Lerne den RIGHT JOIN als Spiegelung des LEFT JOIN kennen, entdecke den CROSS JOIN und übe, in komplexeren Aufgaben selbst den richtigen Verbund zu wählen.

RIGHT JOIN – der Spiegel des LEFT JOIN

Ein RIGHT JOIN funktioniert genau wie ein LEFT JOIN – nur spiegelverkehrt: Alle Zeilen der rechten Tabelle bleiben erhalten, auch wenn es in der linken keinen passenden Eintrag gibt. Fehlende Werte auf der linken Seite erscheinen als NULL.

In der Praxis wird RIGHT JOIN selten verwendet, weil man jede RIGHT JOIN-Abfrage durch einfaches Tauschen der Tabellen als LEFT JOIN schreiben kann – mit identischem Ergebnis. Trotzdem ist es wichtig, ihn zu kennen, weil er in vorhandenem Code vorkommt und weil er dir hilft, JOIN-Richtungen sicher zu denken.

SELECT Titel, Vorname, Nachname FROM Film RIGHT JOIN Regisseur ON Film.RegieID = Regisseur.RegieID
SELECT Titel, Vorname, Nachname FROM Regisseur LEFT JOIN Film ON Film.RegieID = Regisseur.RegieID

CROSS JOIN – das Kreuzprodukt

Ein CROSS JOIN verbindet jede Zeile der ersten Tabelle mit jeder Zeile der zweiten – ohne jede Bedingung. Das Ergebnis ist das kartesische Produkt: Hat Tabelle A 30 Zeilen und Tabelle B 3 Zeilen, entstehen 90 Ergebniszeilen. Es gibt kein ON. Der CROSS JOIN ist in der Praxis selten nützlich, erzeugt aber schnell riesige Ergebnismengen und ist gut geeignet, um alle denkbaren Kombinationen sichtbar zu machen.

SELECT Film.Titel, Land.Name FROM Film CROSS JOIN Land
SELECT Schauspieler.Nachname, Land.Name FROM Schauspieler CROSS JOIN Land

FULL OUTER JOIN – ein kurzer Hinweis

Ein FULL OUTER JOIN würde alle Zeilen beider Tabellen ausgeben – auch dann, wenn auf keiner Seite ein Treffer existiert. MySQL unterstützt diesen JOIN leider nicht direkt. Er lässt sich jedoch mit UNION aus einem LEFT und einem RIGHT JOIN zusammensetzen – das ist aber ein fortgeschrittenes Thema.

Übungen 0 / 20

Zeige alle Regisseure und die Titel ihrer Filme an. Verwende einen RIGHT JOIN. Regisseure ohne Film in der Datenbank sollen ebenfalls erscheinen.
Schreibe die Abfrage aus Aufgabe 1 so um, dass du statt des RIGHT JOIN einen LEFT JOIN verwendest. Das Ergebnis soll identisch sein.
Erstelle ein CROSS JOIN zwischen den Tabellen Film und Land. Zeige alle Kombinationen an.
Zeige alle Schauspieler und die Folgen, in denen sie mitspielen, mit einem RIGHT JOIN. Schauspieler ohne Folge sollen ebenfalls erscheinen.★★
Zeige alle Serien mit einer Bewertung über 8.0 und ihre Folgen mit einem RIGHT JOIN. Serien ohne Folgen sollen ebenfalls erscheinen.★★
Erstelle ein CROSS JOIN zwischen Schauspieler und Land. Wie viele Zeilen hat das Ergebnis?★★
Zeige alle Regisseure, die nach 1960 geboren wurden, zusammen mit den Folgen, die sie gedreht haben. Regisseure ohne Folge sollen ebenfalls erscheinen. Entscheide selbst, welchen JOIN du verwendest.★★
Zeige den Vor- und Nachnamen aller Regisseure sowie den Titel der Filme, die sie gedreht haben. Regisseure ohne Film sollen mit NULL erscheinen. Entscheide selbst, welchen JOIN und welche Tabellenreihenfolge du verwendest.★★★
Zeige alle Serien und den Titel ihrer ersten Folge (Staffel 1, Nummer 1) an. Serien ohne eingetragene erste Folge sollen ebenfalls erscheinen. Entscheide selbst, welchen JOIN du verwendest.★★★
Erstelle mit einem CROSS JOIN alle Kombinationen aus Filmreihen (Reihe) und Ländern. Zeige nur Reihenname und Ländername an.★★★
Zeige alle Schauspieler und die Filme, in denen sie mitspielen. Schauspieler ohne Filmrolle sollen ebenfalls erscheinen. Zeige nur Vorname, Nachname und Filmtitel. Entscheide selbst, welchen JOIN du verwendest.★★★
Welche Regisseure haben keinen einzigen Film in der Datenbank gedreht? Zeige Vorname und Nachname an.★★★★
Welche Regisseure haben weder einen Film noch eine Folge in der Datenbank gedreht? Zeige Vorname und Nachname an.★★★★
Welche Schauspieler spielen weder in einem Film noch in einer Folge mit? Zeige Vorname und Nachname an.★★★★
Zeige alle Filmreihen an, für die aktuell weniger Filme in der Datenbank stehen als in der Spalte 'Anzahl' angegeben ist. Nutze dafür einen LEFT JOIN und IS NULL, um Reihen zu finden, bei denen mindestens ein Film fehlt. (Hinweis: Das geht in einem ersten Schritt über Reihen ohne zugeordnete Filme.)★★★★
Zeige alle möglichen Kombinationen aus Regisseur und Land (CROSS JOIN). Filtere das Ergebnis anschließend so, dass nur Kombinationen mit dem Land 'Deutschland' erscheinen. Zeige Vorname, Nachname und Ländername an.★★★★
Zeige alle Schauspieler, die zwar in Filmen, aber in keiner einzigen Folge mitspielen. Zeige Vorname und Nachname. Entscheide selbst, welche JOINs du benötigst.★★★★★
Zeige alle Regisseure, die mindestens eine Folge, aber keinen einzigen Film gedreht haben. Zeige Vorname und Nachname.★★★★★
Ermittle per CROSS JOIN alle denkbaren Kombinationen aus Schauspieler und Film. Zeige dann nur jene Kombinationen an, für die in spieltInFilm kein Eintrag existiert – also Schauspieler-Film-Paare, die es in der Datenbank noch nicht gibt. Zeige Vorname, Nachname und Filmtitel.★★★★★
Zeige alle Serien und – falls vorhanden – den Namen des Landes sowie den Titel einer zugehörigen Folge an. Serien ohne Folgen sollen erscheinen. Entscheide selbst, welche JOINs und welche Reihenfolge du verwendest.★★★★★