SQL - Grundlagen
Was ist SQL? SQL steht für Structured Query Language und ist die weltweit wichtigste Sprache, um mit Datenbanken zu kommunizieren. Mit ihr können aus riesigen Tabellenmengen gezielt Informationen gefiltert, Daten analysiert und komplexe Fragen effizient beantwortet werden. Im Hintergrund fast jeder modernen App und Webseite wird SQL zur Datenverwaltung eingesetzt.
In den folgenden Abschnitten wird mit einer Datenbank gearbeitet, die drei Tabellen enthält: land (Basisdaten), stadt (Städte der Welt) und wirtschaft (Daten zu Industrie, Landwirtschaft etc.).
Relationen
- land(land_id ,name, kontinent, flaeche_km2, bevoelkerung, bip_mrd_usd, bip_pro_kopf, entwicklungsstand, arbeitslosenquote)
- stadt(stadt_id, 🠙land_id, name, einwohner, ist_hauptstadt, wirtschaftszentrum)
- wirtschaft(eintrag_id, 🠙land_id, sektor, anteil_bip_proz, exporte_mrd)

Erste Schritte
SELECT ... FROM Der Blick in die Datenbank
Bevor in der Datenbank gezielt nach Datensätzen gesucht werden kann, muss bekannt sein, was überhaupt vorhanden ist. SELECT bestimmt die Spalten (Attribute), FROM die Tabelle.
Mit * können alle Spalten ausgewählt werden:
Training
- Zeige alle Spalten der Tabelle
landan. - Gib nur die Spalten
nameundeinwohneraus der Tabellestadtaus. - Zeige alle Sektoren an, die in der Tabelle
wirtschaftvorkommen. - Liste die Namen, die Fläche und die Bevölkerung aller Länder auf.
DISTINCT & LIMIT Ergebnismengen steuern
Oft sind in Spalten doppelte Einträge enthalten. Soll z. B. ermittelt werden, welche Kontinente vorkommen, ist die x-fache Anzeige von Europa nicht erwünscht. DISTINCT filtert Duplikate heraus.
Sollen nur die ersten paar Zeilen ausgegeben werden (z. B. eine Top-Liste), wird mit LIMIT die Ausgabe auf eine feste Anzahl begrenzt.
Training
- Welche verschiedenen Entwicklungsstände (
entwicklungsstand) gibt es? Zeige sie ohne Duplikate an. - Liste alle unterschiedlichen Sektoren aus der Tabelle
wirtschaftauf. - Zeige die ersten 10 Einträge der Tabelle
stadtan. - Gib die Namen von 3 beliebigen Ländern aus der Tabelle
landaus.
WHERE Die gezielte Suche
Mit WHERE werden die Zeilen nach bestimmten Bedingungen gefiltert. Alle Länder der Datenbank, die in Europa liegen, werden mit folgendem Befehl ermittelt:
Wird mit einem String verglichen, muss dieser in einfachen Anführungszeichen '...' stehen. Vergleiche sind nicht nur auf Gleichheit = möglich, sondern auch mit < (kleiner), > (größer), <= (kleiner gleich), >= (größer gleich) und != (ungleich).
Training
- Welche Länder haben mehr als 200 Millionen Einwohner?
- Zeige alle Städte, die Hauptstädte sind.
- Welche Länder haben eine Arbeitslosenquote von weniger als 3.0 %?
- Liste alle Länder auf, die nicht in
Asienliegen. - Finde alle Einträge in der Tabelle
wirtschaft, bei denen der Anteil am BIP größer als 50 % ist.
AND, OR, NOT Bedingungen kombinieren
Mit den logischen Operatoren AND, OR, NOT lassen sich mehrere Bedingungen kombinieren:
Training
- Welche Länder liegen in
EuropaUND haben einbip_pro_kopfüber 50.000? - Suche alle Städte, die entweder in Deutschland (
land_id = 1) oder in den USA (land_id = 2) liegen. - Welche Länder sind
SchwellenländerUND haben eine Fläche von über 1.000. 000 km²? - Zeige alle Wirtschaftseinträge , die
IndustrieoderRohstoffesind. - Finde Länder in
Afrika, die keineEntwicklungsländersind.
Datenanalyse und Auswertung
ORDER BY Ordnung schaffen
Daten werden standardmäßig unsortiert ausgegeben. Mit ORDER BY werden die Daten sortiert. Die Länder können beispielsweise nach der Bevölkerung (größte zuerst) sortiert werden:
Standardmäßig (ohne DESC) wird aufsteigend sortiert. Es kann aber auch explizit mit ASC angegeben werden.
Training
- Sortiere die Länder nach ihrer Fläche (kleinste zuerst).
- Erstelle eine Rangliste der Länder nach ihrer arbeitslosenquote (höchste zuerst).
AS Rechnen
SQL kann wie ein Taschenrechner arbeiten. Mit AS gibst du der Ergebnisspalte einen Namen. Berechnen wir die Bevölkerungsdichte (Einwohner pro km²) aller Länder und geben diese aus:
Training
- Gib den Namen der Länder aus, aber nenne die Spalte in der Anzeige 'Staat'. Sortiere alphabetisch absteigend.
- Zeige den Namen der Städte und deren Einwohnerzahl in Millionen an (Einwohner / 1.000.000). Sortiere absteigend nach der Einwohnerzahl in Millionen.
- Berechne für alle Länder, wie viel BIP (Mrd. USD) pro 1 Million Einwohner zur Verfügung steht.
- Überprüfe, ob das angegebene pro Kopf BIP aller Länder korrekt ist (bezogen auf das gesamte BIP und die Bevölkerungszahl). Sortiere nach der Größe der Abweichung.
- Bilde das Verhältnis zwischen BIP pro Kopf und Arbeitslosenquote für alle Länder ab und sortiere absteigend. Was könnte dieser Wert aussagen.
LIKE Muster finden
Wenn du Namen nur teilweise kennst, hilft LIKE. Das Zeichen % dient als Platzhalter für beliebigen Text.
Training
- Welche Ländernamen enden auf 'ien' (z.B. Brasilien)?
- Suche alle Städte, die das Wort 'stadt' im Namen haben.
- Finde alle Kontinente, die mit 'A' beginnen.
- Suche Länder, deren Name an der zweiten Stelle ein 'a' hat (Tipp:
_ist Platzhalter für genau einen Buchstaben).
Statistiken mit Aggregatfunktionen erstellen
Aggregatfunktionen fassen viele Zeilen zu einem einzigen Ergebniswert zusammen. Das ist perfekt für globale Statistiken:
COUNT(*): Zählt die Zeilen.SUM(spalte): Bildet die Summe.AVG(spalte): Berechnet den Durchschnitt.MAX(spalte),MIN(spalte): Findet den höchsten/niedrigsten Wert.
Wie groß ist die Gesamtbevölkerung aller in der Datenbank erfassten Länder?
Training
- Wie viele Länder sind insgesamt in der Datenbank erfasst?
- Berechne die durchschnittliche Arbeitslosenquote aller Länder.
- Wie hoch ist das Exportvolumen (
exporte_mrd) aller Sektoren in der Tabellewirtschaftzusammengerechnet? - Welche Stadt hat die meisten Einwohner?
- Kombiniere Filter und Aggregat: Wie viele Länder liegen in 'Europa'?
- Wie groß ist die Gesamtfläche aller Länder in 'Afrika'?
- Größtes pro Kopf BIP aller Entwicklungsländer?
- Kleinstes pro Kopf BIP aller Schwellenländer?
JOIN .. ON .. Tabellen verbinden
Bisher wurden Tabellen einzeln abgefragt. Oft sind Informationen aber verteilt: Einwohner stehen in stadt, Kontinente in land. Mit einem JOIN werden zwei Tabellen über einen gemeinsamen Wert verbunden — im Beispiel über die Spalte land_id (Primärschlüssel in land, Fremdschlüssel in stadt). Der JOIN wird auch als INNER JOIN bezeichnet.
SELECT ...: Spaltenauswahl. Die Punkt-Notation (alias.spalte) verhindert Verwechslungen bei gleichen Namen (z. B.s.namevs.l.name).FROM stadt s: Basis-Tabellestadtmit Aliass.JOIN land l: Verbindung mit Tabelleland(Aliasl).ON s.land_id = l.land_id: Verknüpfungsbedingung — es werden nur Zeilen kombiniert, deren Werte exakt übereinstimmen.
Training
- Liste alle Städte mit ihrem Namen und dem zugehörigen Kontinent auf. Sortiere nach Kontinent.
- Zeige alle Wirtschaftseinträge (
sektor,exporte_mrd) zusammen mit dem jeweiligen Ländernamen an. - Welche Städte sind Hauptstädte? Gib den Stadtnamen und den
entwicklungsstanddes zugehörigen Landes aus. - Finde alle Sektoren
Tourismusund zeige den Ländernamen sowie dasbip_pro_kopfdieses Landes an. - Liste alle Städte in
Europaauf. Zeige den Stadtnamen und den Ländernamen.
JOINs mit Berechnungen und Aggregaten
JOINs lassen sich gut mit Berechnungen und Aggregaten kombinieren.
Welchen Wert in Milliarden USD hat der Sektor Industrie in Deutschland? (BIP × BIP-Anteil des Sektors ÷ 100)
Training
- Berechne für den Sektor Industrie in allen europäischen Ländern den Exportwert pro Kopf (Exporte des Sektors / Bevölkerung des Landes). Multipliziere das Ergebnis mit 1.000.000.000, um den Wert in USD pro Person zu erhalten.
- Wie hoch ist das gesamte Exportvolumen (SUM(exporte_mrd)) aller Sektoren, die in Industrieländern liegen?
- Berechne den durchschnittlichen
bip_anteildes Sektors Landwirtschaft für alle Länder in Afrika. - Wie viele Städte gibt es insgesamt in Ländern, deren
bip_pro_kopfüber 60.000 liegt? - Finde die Stadt mit den meisten Einwohnern, die in einem Schwellenland liegt.
- Berechne die Summe der Einwohner aller Städte, die in Ländern mit einer Arbeitslosenquote von über 10 % liegen.
Geo Datenbank
Die verwendete SQLite-Datenbank kann auch heruntergeladen werden und beispielsweise mit SQLite-Browser bearbeitet werden.