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ürname
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üsselwortdistinct
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:
- Wie viele Einwohner hat die Stadt Ingolstadt?
- Welche Orte haben mehr als 10 000 000 Einwohner?
- Welche Städte, deren Name mit B beginnt, liegen in Deutschland?
- Welche Flüsse fließen ins Schwarze Meer?
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 Spaltemin(Spalte)
: Kleinster Wert in dieser Spaltemax(Spalte)
: Größter Wert in dieser Spalteavg(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:
- Wie viele Einwohner hat das (einwohnermäßig!) größte Land der Erde?
- Wie viele Einwohner hat der kleinste in der Datenbank gespeicherte Ort?
- wie viele Orte sind in der Datenbank gespeichert, deren Name auf "stadt" endet?
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:
- Gesucht ist eine Nach Name sortierte Liste aller Kontinente
- Gesucht ist eine nach Einwohnerzahl sortierte Aufstellung aller Orte der Erde, deren Name mit N beginnt, beginnend mit dem größten Ort.
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