Inhaltsverzeichnis

SQL

Die Sprache SQL (Structured Query Language, im englischen Sprachraum oft ausgesprochen als "Sequel") gibt es seit den 1970'er Jahren. Sie hat sich als Standardsprache zum Erstellen, Ändern und Abfragen relationaler Datenbanken etabliert. Im Folgenden wiederholen wir, wie sich mit Hilfe von SQL Informationen aus einer mit gefüllten Tabelle entnehmen lassen.

Grundlegende SQL-Abfragen

Grundlegender Aufbau einer SQL-Abfrage:

SELECT spalte1, spalte2, ... FROM tabelle
WHERE Bedingung
  • Statt der kommaseparierten Liste von Spalten kann auch ein Stern (*) eingesetzt werden. Er steht dann für "alle Spalten"
  • In der Bedingung können die Operatoren =, <, >, <=, >=, <> (ungleich) verwendet werden um Zahlen oder Zeichenketten (lexikalisch!) zu vergleichen.
  • Zwei Zeichenketten können auch mit dem Operator like verglichen werden. Dann wirken die Zeichen % und _ (Unterstrich) als Wildcards:
    • Das Prozentzeichen % steht für beliebig viele (auch: 0) beliebige Zeichen
    • Der Unterstrich _ steht für genau ein beliebiges Zeichen.
      Beispiel: where name like '_a%' findet alle Datensätze, bei denen der Spaltenwert für name als zweiten Buchstaben ein kleines a hat.
    • Oft gibt es bei einer Abfrage mehrere identische Ergebniszeilen, z.B. bei select meer from fluss. Mit dem Schlüsselwort distinct kannst Du erreichen, dass mehrfache identische Ergebniszeilen jeweils nur ein Mal vorkommen: select distinct meer from fluss

Schreibe in der obigen Datenbank SQL-Abfragen, um folgende Fragen zu beantworten:

  1. Wie viele Einwohner hat die Stadt Ingolstadt?
  2. Welche Orte haben mehr als 10 000 000 Einwohner?
  3. Welche Städte, deren Name mit B beginnt, liegen in Deutschland?
  4. Welche Flüsse fließen ins Schwarze Meer?

Hier geht's zur Lösung

Aggregatfunktionen

Aggregatfunktionen (von lat. aggregare: "zusammenfassen") fassen die Daten mehrerer Datensätze zu einem Wert zusammen, z.B. gibt die folgende Abfrage die Summe der Einwohnerzahlen aller Länder aus, deren Name mit D beginnt.

SELECT SUM(einwohner) FROM land
WHERE name LIKE 'D%'

Bem.: Wundere Dich nicht über das niedrige Ergebnis: Die Einwohnerzahlen der Länder sind in der Tabelle Land übrigens in der Einheit "Millionen" gespeichert.

Folgende Aggregatfunktionen gibt es in SQL:

  • sum(Spalte): Summe der Werte in dieser Spalte
  • min(Spalte): Kleinster Wert in dieser Spalte
  • max(Spalte): Größter Wert in dieser Spalte
  • avg(Spalte) (Mittelwert dieser Spalte, engl. "average")

Eine besondere Rolle spielt die Aggregatfunktion count(Spalte): Sie gibt die Anzahl der Werte in dieser Spalte zurück. Üblicherweise wird nur count(*) verwendet, das die Anzahl der Datensätze zurückgibt.

Schreibe in der obigen Datenbank SQL-Abfragen, um folgende Fragen zu beantworten:

  1. Wie viele Einwohner hat das (einwohnermäßig!) größte Land der Erde?
  2. Wie viele Einwohner hat der kleinste in der Datenbank gespeicherte Ort?
  3. wie viele Orte sind in der Datenbank gespeichert, deren Name auf "stadt" endet?

Hier geht's zur Lösung

Sortierung von Ergebnissen

Durch den Zusatz order by kann man die Datensätze in der Ergebnistabelle sortieren lassen, z.B. gibt die folgende Abfrage eine Tabelle mit den Namen und Einwohnerzahlen aller Orte zurück, deren Name mit D beginnt, wobei die Datensätze nach dem Ortsnamen sortiert werden:

SELECT name, einwohner FROM land
WHERE name LIKE 'D%'
ORDER BY name

Will man in umgekehrter Reihenfolge sortieren, so setzt man noch desc (engl.: "descending") dahinter. Steht nichts hinter dem order-Zusatz, so ist asc (engl. "ascending") gemeint:

SELECT name, einwohner FROM land
WHERE name LIKE 'D%'
ORDER BY name DESC

Schreibe in der obigen Datenbank SQL-Abfragen, um folgende Fragen zu beantworten:

  1. Gesucht ist eine Nach Name sortierte Liste aller Kontinente
  2. Gesucht ist eine nach Einwohnerzahl sortierte Aufstellung aller Orte der Erde, deren Name mit N beginnt, beginnend mit dem größten Ort.

Hier geht's zur Lösung

Gruppierung der Ergebnisse

Der Zusatz group by Spalte gruppiert alle Datensätze mit demselben Wert in der angegebenen Spalte. Nach select kann man in diesem Fall sinnvollerweise natürlich nur noch den Wert dieser Spalte sowie Aggregate (z.B. die Summe) der anderen Spalten angeben.
Beispiel: Gib die Summe der Einwohnerzahlen aller Länder der einzelnen Kontinente zusammen mit dem Kürzel des Kontinents aus:

SELECT SUM(einwohner), knr FROM land
GROUP BY knr

Will man nur bestimmte Kontinente haben (z.B. alle, deren Kürzel mit A beginnt), so kann man diese Bedingung in einem having-Zusatz angeben:

SELECT SUM(einwohner), knr FROM land
GROUP BY knr
HAVING knr LIKE 'A%'

Schreibe in der obigen Datenbank SQL-Abfragen, um folgende Fragen zu beantworten:

  • Gesucht ist eine Liste der Meere jeweils zusammen mit der Länge des längsten Flusses, der in das Meer fließt

Hier geht's zur Lösung