Daten abfragen mit SELECT
Lernziele
- Sie können Daten aus einer Datenbanktabelle mit dem
SELECT-Befehl gezielt abfragen.- Sie können Ergebnisse mit der
WHERE-Klausel nach spezifischen Kriterien filtern.- Sie können Datensätze mittels
ORDER BYsinnvoll aufsteigend oder absteigend sortieren.- Sie können die Anzahl der ausgegebenen Resultate mit
LIMITbegrenzen.
SQL (Structured Query Language) ist die Standardsprache für die Arbeit mit relationalen Datenbanken. In diesem Kapitel lernen Sie die ersten Befehle kennen, um Daten aus einer Datenbank abzufragen.
Unsere Datenbank
Um SQL zu lernen, nutzen wir eine Datenbank mit Daten aus einem Spotify-Datensatz von Kaggle. Die Datenbank enthält über 114'000 Songs mit ihren Audio-Eigenschaften wie Tanzbarkeit, Energie, Tempo und vielem mehr.
Aufbau der Datenbank
Die Datenbank besteht aus einer einzigen Tabelle namens tracks. Alle Informationen – Songtitel, Künstler, Album, Genre und die Audio-Eigenschaften – sind in dieser einen Tabelle gespeichert.
Eine Tabelle für alles – ist das sinnvoll?Kurze Antwort: Nein. Eine einzelne, flache Tabelle ist eigentlich kein gutes Datenbankdesign. In der Praxis würde man die Daten auf mehrere verknüpfte Tabellen aufteilen – genau das ist der Grundgedanke relationaler Datenbanken.
Unsere Tabelle zeigt typische Probleme einer flachen Struktur:
- Duplikate durch Genres: Der gleiche Song kann in mehreren Genres auftauchen. «Blinding Lights» von The Weeknd existiert z.B. mehrfach in der Tabelle – einmal als
pop, aber auch als Coverversion inchildrenoder als Remix indeep-house. Sogar innerhalb des gleichen Genres gibt es Duplikate.- Mehrere Künstler in einem Feld: Bei Kollaborationen stehen mehrere Künstler in einer einzigen Zelle, getrennt durch Semikolons (z.B.
Ingrid Michaelson;ZAYN). Das macht es schwierig, nach einzelnen Künstlern zu suchen.In einer gut entworfenen relationalen Datenbank hätte man separate Tabellen für Songs, Künstler, Alben und Genres – mit Verknüpfungen dazwischen. So würde jeder Song und jeder Künstler nur einmal gespeichert, und es gäbe keine Duplikate.
Für den Einstieg in SQL ist diese flache Tabelle aber genau richtig – sie ist einfach zu verstehen, und Sie können sich ganz auf die Abfragen konzentrieren. Die Probleme, die Sie dabei entdecken, zeigen Ihnen gleichzeitig, warum relationale Datenbanken mit mehreren Tabellen sinnvoll sind.
Die Tabelle tracks
Diese Tabelle speichert Informationen zu Spotify-Songs:
| Spalte | Datentyp | Beschreibung |
|---|---|---|
track_id | String | Eindeutige Spotify-ID des Songs |
artists | String | Name(n) der Künstler (bei Kollaborationen durch ; getrennt) |
album_name | String | Name des Albums |
track_name | String | Titel des Songs |
popularity | Integer | Popularität von 0 bis 100 (100 = sehr populär) |
duration_ms | Integer | Dauer des Songs in Millisekunden |
explicit | String | Enthält der Song explizite Inhalte? (True/False) |
danceability | Float | Tanzbarkeit von 0.0 bis 1.0 |
energy | Float | Energie von 0.0 bis 1.0 |
key | Integer | Tonart des Songs (0 = C, 1 = C#, 2 = D, usw.) |
loudness | Float | Lautstärke in Dezibel (typisch: -60 bis 0) |
mode | Integer | Tongeschlecht (0 = Moll, 1 = Dur) |
speechiness | Float | Sprachanteil von 0.0 bis 1.0 |
acousticness | Float | Akustik-Anteil von 0.0 bis 1.0 |
instrumentalness | Float | Instrumental-Anteil von 0.0 bis 1.0 |
liveness | Float | Live-Charakter von 0.0 bis 1.0 |
valence | Float | Fröhlichkeit von 0.0 bis 1.0 (1.0 = fröhlich, 0.0 = traurig) |
tempo | Float | Tempo in BPM (Beats per Minute) |
time_signature | Integer | Taktart (z.B. 4 = 4/4-Takt) |
track_genre | String | Genre des Songs |
Was bedeutet «Danceability»?Der Wert
danceabilitybeschreibt, wie gut sich ein Song zum Tanzen eignet. Spotify berechnet diesen Wert automatisch anhand mehrerer musikalischer Eigenschaften:
- Tempo: Die Geschwindigkeit des Songs
- Rhythmusstabilität: Wie gleichmässig der Rhythmus ist
- Beatstärke: Wie ausgeprägt der Beat ist
- Regelmässigkeit: Wie stetig die musikalischen Elemente sind
Ein Wert von 0.0 bedeutet «kaum tanzbar», ein Wert von 1.0 bedeutet «sehr tanzbar».
Die SELECT-Anweisung
Der SELECT-Befehl ist der wichtigste Befehl in SQL. Mit ihm können Sie Daten aus einer Tabelle abfragen.
Grundsyntax
SELECT spalte1, spalte2, ...
FROM tabelle;
Wichtige Hinweise
- Mehrere Spalten werden durch Kommas getrennt
- Mit
*wählen Sie alle Spalten aus- Mit
LIMIT 10limitieren Sie die Anzahl der Ergebnisse (Sie wollen nicht immer abertausende Resultate sehen – unsere Tabelle hat über 114'000 Zeilen!)- Jede SQL-Anweisung endet mit einem Semikolon
Alle Spalten auswählen
Mit dem Stern (*) können Sie alle Spalten einer Tabelle auswählen:
Bestimmte Spalten auswählen
Wenn Sie nur bestimmte Spalten benötigen, geben Sie diese explizit an, z.B. so.
Mit WHERE filtern
Mit der WHERE-Klausel können Sie die Ergebnisse filtern und nur bestimmte Datensätze auswählen.
Grundsyntax mit WHERE
SELECT spalte1, spalte2
FROM tabelle
WHERE bedingung;
Vergleichsoperatoren
| Operator | Bedeutung |
|---|---|
= | gleich |
!= oder <> | ungleich |
> | grösser als |
< | kleiner als |
>= | grösser oder gleich |
<= | kleiner oder gleich |
Beispiel: Sehr populäre Songs
Beispiel: Songs eines bestimmten Genres
Bei diesem Beispiel sehen Sie: Die Spalte, die wir bei WHERE nutzen, muss nicht unbedingt angezeigt werden.
Mit AND und OR kombinieren
Sie können mehrere Bedingungen kombinieren:
Mit ORDER BY sortieren
Mit ORDER BY können Sie die Ergebnisse sortieren lassen.
Grundsyntax
SELECT spalte1, spalte2
FROM tabelle
ORDER BY spalte [ASC|DESC];
Sortierreihenfolge
ASC= ascending = aufsteigend (Standard)DESC= descending = absteigend
Beispiel: Die populärsten Songs
Nach mehreren Spalten sortieren
Mit LIMIT begrenzen
Mit LIMIT können Sie die Anzahl der zurückgegebenen Zeilen begrenzen. Das ist besonders bei grossen Tabellen sinnvoll – unsere Tabelle hat über 114'000 Einträge!
Grundsyntax
SELECT spalte1, spalte2
FROM tabelle
LIMIT anzahl;
Aufgaben
Aufgabe 1: Erste Songs anzeigen
Zeigen Sie alle Spalten der Tabelle tracks an, aber begrenzen Sie die Ausgabe auf 5 Ergebnisse.
Aufgabe 2: Bestimmte Spalten auswählen
Wählen Sie aus der Tabelle tracks nur die Spalten track_name, artists und album_name aus und zeigen Sie die ersten 10 Ergebnisse.
Aufgabe 3: Populäre Songs finden
Finden Sie alle Songs mit einer Popularität von mehr als 80. Zeigen Sie track_name, artists und popularity an und sortieren Sie nach Popularität absteigend.
Aufgabe 4: Tanzbare Songs
Zeigen Sie alle Songs mit einer Tanzbarkeit (danceability) von mehr als 0.9. Zeigen Sie track_name, artists und danceability an, sortiert nach Tanzbarkeit absteigend. Begrenzen Sie auf 15 Ergebnisse.
Aufgabe 5: Explizite Inhalte filtern
Finden Sie alle Songs, die als explizit markiert sind (explicit = 'True') und eine Popularität über 70 haben. Zeigen Sie track_name, artists und popularity an, sortiert nach Popularität absteigend. Begrenzen Sie auf 10 Ergebnisse.
Aufgabe 6: Duplikate entdecken
Suchen Sie nach allen Einträgen mit dem Titel «Blinding Lights». Zeigen Sie track_name, artists, track_genre und popularity an. Fällt Ihnen etwas auf?
Zum NachdenkenWenn Sie Aufgabe 6 gelöst haben, sehen Sie ein typisches Problem flacher Datenbanken: Der gleiche Song taucht mehrfach auf – in verschiedenen Genres und sogar mehrfach innerhalb desselben Genres. In einer relationalen Datenbank mit separaten Tabellen für Songs und Genres würde jeder Song nur einmal existieren.
Aufgabe 7: Welches Genre ist am tanzbarsten?
Finden Sie die 10 tanzbarsten Songs aus dem Genre reggaeton. Zeigen Sie track_name, artists und danceability an, sortiert nach Tanzbarkeit absteigend.
Zusammenfassung
Was Sie gelernt haben
- Mit SELECT können Sie Daten aus Tabellen abfragen
- Mit WHERE filtern Sie Ergebnisse nach Bedingungen
- Mit ORDER BY sortieren Sie Ergebnisse auf- oder absteigend
- Mit LIMIT begrenzen Sie die Anzahl der Ergebnisse
- Eine flache Tabelle führt zu Duplikaten und Inkonsistenzen – deshalb nutzt man in der Praxis relationale Datenbanken mit mehreren verknüpften Tabellen
Im nächsten Kapitel lernen Sie, wie Sie mit Aggregatfunktionen wie COUNT, AVG und GROUP BY spannende Fragen beantworten können – zum Beispiel: Welches Genre hat die höchste durchschnittliche Tanzbarkeit?