Zum Hauptinhalt springen

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)
Relationen

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
  1. Zeige alle Spalten der Tabelle land an.
  2. Gib nur die Spalten name und einwohner aus der Tabelle stadt aus.
  3. Zeige alle Sektoren an, die in der Tabelle wirtschaft vorkommen.
  4. 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
  1. Welche verschiedenen Entwicklungsstände (entwicklungsstand) gibt es? Zeige sie ohne Duplikate an.
  2. Liste alle unterschiedlichen Sektoren aus der Tabelle wirtschaft auf.
  3. Zeige die ersten 10 Einträge der Tabelle stadt an.
  4. Gib die Namen von 3 beliebigen Ländern aus der Tabelle land aus.

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
  1. Welche Länder haben mehr als 200 Millionen Einwohner?
  2. Zeige alle Städte, die Hauptstädte sind.
  3. Welche Länder haben eine Arbeitslosenquote von weniger als 3.0 %?
  4. Liste alle Länder auf, die nicht in Asien liegen.
  5. 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
  1. Welche Länder liegen in Europa UND haben ein bip_pro_kopf über 50.000?
  2. Suche alle Städte, die entweder in Deutschland (land_id = 1) oder in den USA (land_id = 2) liegen.
  3. Welche Länder sind Schwellenländer UND haben eine Fläche von über 1.000. 000 km²?
  4. Zeige alle Wirtschaftseinträge , die Industrie oder Rohstoffe sind.
  5. Finde Länder in Afrika, die keine Entwicklungsländer sind.

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
  1. Sortiere die Länder nach ihrer Fläche (kleinste zuerst).
  2. 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
  1. Gib den Namen der Länder aus, aber nenne die Spalte in der Anzeige 'Staat'. Sortiere alphabetisch absteigend.
  2. Zeige den Namen der Städte und deren Einwohnerzahl in Millionen an (Einwohner / 1.000.000). Sortiere absteigend nach der Einwohnerzahl in Millionen.
  3. Berechne für alle Länder, wie viel BIP (Mrd. USD) pro 1 Million Einwohner zur Verfügung steht.
  4. Ü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.
  5. 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
  1. Welche Ländernamen enden auf 'ien' (z.B. Brasilien)?
  2. Suche alle Städte, die das Wort 'stadt' im Namen haben.
  3. Finde alle Kontinente, die mit 'A' beginnen.
  4. 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
  1. Wie viele Länder sind insgesamt in der Datenbank erfasst?
  2. Berechne die durchschnittliche Arbeitslosenquote aller Länder.
  3. Wie hoch ist das Exportvolumen (exporte_mrd) aller Sektoren in der Tabelle wirtschaft zusammengerechnet?
  4. Welche Stadt hat die meisten Einwohner?
  5. Kombiniere Filter und Aggregat: Wie viele Länder liegen in 'Europa'?
  6. Wie groß ist die Gesamtfläche aller Länder in 'Afrika'?
  7. Größtes pro Kopf BIP aller Entwicklungsländer?
  8. 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.name vs. l.name).
  • FROM stadt s: Basis-Tabelle stadt mit Alias s.
  • JOIN land l: Verbindung mit Tabelle land (Alias l).
  • ON s.land_id = l.land_id: Verknüpfungsbedingung — es werden nur Zeilen kombiniert, deren Werte exakt übereinstimmen.
Training
  1. Liste alle Städte mit ihrem Namen und dem zugehörigen Kontinent auf. Sortiere nach Kontinent.
  2. Zeige alle Wirtschaftseinträge (sektor, exporte_mrd) zusammen mit dem jeweiligen Ländernamen an.
  3. Welche Städte sind Hauptstädte? Gib den Stadtnamen und den entwicklungsstand des zugehörigen Landes aus.
  4. Finde alle Sektoren Tourismus und zeige den Ländernamen sowie das bip_pro_kopf dieses Landes an.
  5. Liste alle Städte in Europa auf. 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
  1. 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.
  2. Wie hoch ist das gesamte Exportvolumen (SUM(exporte_mrd)) aller Sektoren, die in Industrieländern liegen?
  3. Berechne den durchschnittlichen bip_anteil des Sektors Landwirtschaft für alle Länder in Afrika.
  4. Wie viele Städte gibt es insgesamt in Ländern, deren bip_pro_kopf über 60.000 liegt?
  5. Finde die Stadt mit den meisten Einwohnern, die in einem Schwellenland liegt.
  6. 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.