ein freies Lehrmittel auf der Basis von eduskript

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 BY sinnvoll aufsteigend oder absteigend sortieren.
  • Sie können die Anzahl der ausgegebenen Resultate mit LIMIT begrenzen.

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 in children oder als Remix in deep-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:

SpalteDatentypBeschreibung
track_idStringEindeutige Spotify-ID des Songs
artistsStringName(n) der Künstler (bei Kollaborationen durch ; getrennt)
album_nameStringName des Albums
track_nameStringTitel des Songs
popularityIntegerPopularität von 0 bis 100 (100 = sehr populär)
duration_msIntegerDauer des Songs in Millisekunden
explicitStringEnthält der Song explizite Inhalte? (True/False)
danceabilityFloatTanzbarkeit von 0.0 bis 1.0
energyFloatEnergie von 0.0 bis 1.0
keyIntegerTonart des Songs (0 = C, 1 = C#, 2 = D, usw.)
loudnessFloatLautstärke in Dezibel (typisch: -60 bis 0)
modeIntegerTongeschlecht (0 = Moll, 1 = Dur)
speechinessFloatSprachanteil von 0.0 bis 1.0
acousticnessFloatAkustik-Anteil von 0.0 bis 1.0
instrumentalnessFloatInstrumental-Anteil von 0.0 bis 1.0
livenessFloatLive-Charakter von 0.0 bis 1.0
valenceFloatFröhlichkeit von 0.0 bis 1.0 (1.0 = fröhlich, 0.0 = traurig)
tempoFloatTempo in BPM (Beats per Minute)
time_signatureIntegerTaktart (z.B. 4 = 4/4-Takt)
track_genreStringGenre des Songs
Was bedeutet «Danceability»?

Der Wert danceability beschreibt, 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 10 limitieren 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:

Loading editor...

Bestimmte Spalten auswählen

Wenn Sie nur bestimmte Spalten benötigen, geben Sie diese explizit an, z.B. so.

Loading editor...

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

OperatorBedeutung
=gleich
!= oder <>ungleich
>grösser als
<kleiner als
>=grösser oder gleich
<=kleiner oder gleich

Beispiel: Sehr populäre Songs

Loading editor...

Beispiel: Songs eines bestimmten Genres

Bei diesem Beispiel sehen Sie: Die Spalte, die wir bei WHERE nutzen, muss nicht unbedingt angezeigt werden.

Loading editor...

Mit AND und OR kombinieren

Sie können mehrere Bedingungen kombinieren:

Loading editor...

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

Loading editor...

Nach mehreren Spalten sortieren

Loading editor...

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.

Loading editor...

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.

Loading editor...

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.

Loading editor...

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.

Loading editor...

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.

Loading editor...

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?

Loading editor...
Zum Nachdenken

Wenn 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.

Loading editor...

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?