SQL Lernen mit der Filmdatenbank
In diesem Kurs lernst du Schritt fuer Schritt, wie du mit SQL Daten aus einer Datenbank abfragen kannst. Unsere Datenbank enthaelt Informationen ueber 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 ueber Daten durchfuehren
So funktioniert dieser Kurs
Arbeite die Kapitel der Reihe nach durch. Jedes Kapitel enthaelt:
- Theorie — Erklaerungen der SQL-Konzepte
- Beispiele — Klicke auf ein Beispiel, um es im Editor auszuprobieren
- Uebungen — Schreibe eigene Abfragen. Tipps und Loesungen helfen dir weiter.
Unsere Datenbank
Die Datenbank besteht aus 9 Tabellen. In der Seitenleiste links findest du das komplette Schema. Hier eine Uebersicht der wichtigsten Beziehungen:
Probiere gleich deine erste Abfrage aus:
SELECT — Daten abfragen
Mit dem SELECT-Befehl holst du Daten aus der Datenbank. Es ist der wichtigste und am haeufigsten verwendete SQL-Befehl.
Grundaufbau einer Abfrage
Jede SQL-Abfrage hat mindestens zwei Teile:
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:
Bestimmte Spalten auswaehlen
Meistens brauchst du nicht alle Spalten. Gib einfach die gewuenschten Spaltennamen an, getrennt durch Kommas:
Uebungen
SELECT * und die Tabelle Regisseur.Name und Einwohner aus der Tabelle Land.SELECT Titel, Bewertung FROM ...Folge mit drei Spalten.WHERE — Daten filtern
Mit WHERE kannst du bestimmen, welche Zeilen angezeigt werden sollen. Nur Zeilen, die die Bedingung erfuellen, erscheinen im Ergebnis.
Grundaufbau mit WHERE
FROM tabelle
WHERE bedingung
Vergleichsoperatoren
Du kannst Werte vergleichen mit:
=— gleich!=oder<>— ungleich<,>,<=,>=— kleiner, groesser, ...
Textsuche mit LIKE
Mit LIKE kannst du nach Textmustern suchen. Das Prozentzeichen % steht fuer „beliebig viele Zeichen“:
LIKE 'A%'— beginnt mit ALIKE '%man'— endet mit „man“LIKE '%Star%'— enthaelt „Star“
Bedingungen kombinieren: AND, OR, NOT
Mehrere Bedingungen lassen sich verknuepfen:
BETWEEN und IN
BETWEEN prueft, ob ein Wert in einem Bereich liegt. IN prueft, ob ein Wert in einer Liste enthalten ist:
Uebungen
WHERE Jahr > 2015.LIKE 'B%' auf die Spalte Nachname.AND.WHERE Staffeln > 3 auf die Tabelle Serie.BETWEEN fuer das Jahr mit AND und Laenge > 120.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
ORDER BY spalte ASC|DESC
Ergebnisse begrenzen mit LIMIT
LIMIT begrenzt die Anzahl der zurueckgegebenen Zeilen. Besonders nuetzlich in Kombination mit ORDER BY:
Uebungen
Bewertung DESC und begrenze mit LIMIT 10.Laenge DESC.ORDER BY Nachname (ASC ist Standard).ORDER BY GebJahr ASC.Aggregatfunktionen & GROUP BY
Berechne Zusammenfassungen ueber deine Daten: zaehle, summiere und bilde Durchschnitte.
Aggregatfunktionen
Diese Funktionen fassen mehrere Zeilen zu einem einzigen Ergebnis zusammen:
- COUNT(*) — zaehlt die Anzahl der Zeilen
- AVG(spalte) — berechnet den Durchschnitt
- SUM(spalte) — berechnet die Summe
- MIN(spalte) — findet den kleinsten Wert
- MAX(spalte) — findet den groessten Wert
Gruppieren mit GROUP BY
Mit GROUP BY fasst du Zeilen zusammen, die in einer Spalte den gleichen Wert haben. Damit kannst du z.B. zaehlen, wie viele Filme pro Jahr erschienen sind:
FROM tabelle
GROUP BY spalte
Gruppen filtern mit HAVING
HAVING ist wie WHERE, aber fuer gruppierte Ergebnisse. Es filtert nach der Gruppierung:
Uebungen
COUNT(*) auf die Tabelle Schauspieler.AVG(Bewertung).Online und zaehle mit COUNT(*).HAVING COUNT(*) > 5.Jahr, berechne AVG(Bewertung), sortiere absteigend und nimm nur das erste Ergebnis.JOINs — Tabellen verknuepfen
Die wahre Staerke 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 ueber eine gemeinsame Spalte. Nur Zeilen, die in beiden Tabellen einen passenden Wert haben, erscheinen im Ergebnis:
FROM tabelle1
JOIN tabelle2 ON tabelle1.spalte = tabelle2.spalte
Name), musst du den Tabellennamen voranstellen: Serie.Name, Land.Name.
Mehrere JOINs
Du kannst auch mehr als zwei Tabellen verknuepfen, indem du mehrere JOINs hintereinander schreibst:
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 gefuellt:
Uebungen
Film mit Regisseur ueber RegieID.spieltInFilm und verknuepfe ueber ActorID.Serie mit Land ueber LandID.Fortgeschrittene Abfragen
Lerne weitere nuetzliche SQL-Techniken: Unterabfragen, DISTINCT und Aliase.
DISTINCT — Doppelte entfernen
DISTINCT entfernt doppelte Zeilen aus dem Ergebnis:
Aliase mit AS
Mit AS gibst du Spalten oder Tabellen einen Kurznamen (Alias). Das macht Ergebnisse lesbarer und Abfragen kuerzer:
f fuer Film) machen lange JOINs viel uebersichtlicher!
Unterabfragen (Subqueries)
Eine Unterabfrage ist eine SELECT-Abfrage innerhalb einer anderen Abfrage. Sie wird in Klammern geschrieben und kann ueberall stehen, wo ein Wert erwartet wird:
WHERE spalte > (SELECT AVG(spalte) FROM tabelle)
Uebungen
SELECT DISTINCT auf GebOrt.(SELECT AVG(Bewertung) FROM Film).WHERE ActorID IN (SELECT ...) mit der Tabelle spieltInFilm.MAX(Laenge) gruppiert nach Reihe, oder einen JOIN auf eine gruppierte Unterabfrage.IN-Unterabfragen: eine fuer Reihe.LandID und eine fuer Serie.LandID.