Auswertung der Datenbasis - SQL

Im Abschnitt Grundlagen zu Datenbanken wird erklärt, was wir unter einem Datenbanksystem verstehen. Zur Kommunikation zwischen Datenbankensystemen und anderen Anwendungen hat sich allgemein die Sprache SQL (Structured Query Language) durchgesetzt. SQL lässt sich in verschiedene Sprachgruppen einteilen:

DDL - Definition und Veränderung von Relationen (tabellen)

DML - Erfassung und Pflege der Daten

QL - Anfragesprache zur Auswertung der Datenbasis

DCL - Vergabe und Organisation von Zugriffsrechten

Auswertung der Datenbasis - Operationen auf Tabellen

Bei der Auswertung der Datenbasis sollen bestimmte Daten aus bereits vorhandenen Tabellen ausgelesen werden. Dabei sind verschiedene Operationen möglich. Zur Auswertung der Datenbasis wird der SQL-Befehl SELECT verwendet:

SELECT spalte(n) FROM tabelle(n) [WHERE bedingunge(n)];

SQL-Befehle können in beliebiger Schreibweise geschrieben werden, es hat sich aber eingebürgert, die Befehle ausschließlich in Großbuchstaben zu schreiben. Die Syntax des Befehls wird in den nächsten Abschnitten erläutert.

Projektion

Eine Projektion filtert bestimmte Spalten aus einer Datenbanktabelle heraus.

Wir betrachten die Datenbanktabelle Stadt.

Name	Einwohnerzahl	Fläche	Staat
Berlin	3,769 Mio	891,8 km²	Deutschland
Hamburg	1,845 Mio	755,2 km²	Deutschland
London	8,982 Mio	1572 km²	Großbritannien
Paris	2,176 Mio	105,34 km²	Frankreich
SELECT Name, Einwohnerzahl FROM Stadt;

gibt nur die Spalten Name und Einwohnerzahl aus und blendet alle anderen Spalten aus. →

Name	Einwohnerzahl
Berlin	3,769 Mio
Hamburg	1,845 Mio
London	8,982 Mio
Paris	2,176 Mio

Wenn man alle Spalten einer Tabelle ausgeben will, so muss man diese nicht alle aufzählen, man kann sie mit dem *-Symbol abkürzen.

SELECT * FROM Stadt;

ergibt:

Name	Einwohnerzahl	Fläche	Staat
Berlin	3,769 Mio	891,8 km²	Deutschland
Hamburg	1,845 Mio	755,2 km²	Deutschland
London	8,982 Mio	1572 km²	Großbritannien
Paris	2,176 Mio	105,34 km²	Frankreich

Selektion

Bei einer Selektion werden bestimmte Zeilen aus einer Tabelle herausgefiltert, die einer bestimmten Bedingung entsprechen. Diese Bedingung wird in der WHERE-Klausel angegeben.

SELECT * FROM Stadt; WHERE Name = 'London'

ergibt:

Name	Einwohnerzahl	Fläche	Staat
London	8,982 Mio	1572 km²	Großbritannien

Selektion und Projektion können auch miteinander verbunden werden:

SELECT Staat FROM Stadt WHERE Name = 'London';

ergibt:

Staat
Großbritannien

Verbund

Ein Verbund (Join) ist eine Verbindung zwischen mehreren Tabellen einer Datenbank, die durch ein bestimmtes Attribut verbunden sind. Um zu erklären, wie ein Verbund entsteht betrachten wir unsere bekannte Tabelle Stadt und fügen noch eine weitere Tabelle Staaten hinzu:

Tabelle Stadt

Name	Einwohnerzahl	Fläche	Staat
Berlin	3,769 Mio	891,8 km²	Deutschland
Hamburg	1,845 Mio	755,2 km²	Deutschland
London	8,982 Mio	1572 km²	Großbritannien
Paris	2,176 Mio	105,34 km²	Frankreich

Tabelle Staaten

Staat	Sprache
Deutschland	Deutsch
Großbritanien	Englisch
Frankreich	Französisch

Das Attribut Staat, welches in der Tabelle Staaten Primärschlüssel ist, ist in der Tabelle Stadt Fremdschlüssel, es verbindet also die Tabellen. (Die zweite Tabelle ist bewusst klein gehalten, dass der Umfang der Seite gesprengt wird.)

Wenn man die folgende Abfrage durchführt

SELECT * FROM Stadt, Staaten;

erhält man die folgende Tabelle

Name	Einwohnerzahl	Fläche	Staat	Staat	Sprache
Berlin	3,769 Mio	891,8 km²	Deutschland	Deutschland	Deutsch
Hamburg	1,845 Mio	755,2 km²	Deutschland	Deutschland	Deutsch
London	8,982 Mio	1572 km²	Großbritannien	Deutschland	Deutsch
Paris	2,176 Mio	105,34 km²	Frankreich	Großbritanien	Englisch
Berlin	3,769 Mio	891,8 km²	Deutschland	Großbritanien	Englisch
Hamburg	1,845 Mio	755,2 km²	Deutschland	Großbritanien	Englisch
London	8,982 Mio	1572 km²	Großbritannien	Großbritanien	Englisch
Paris	2,176 Mio	105,34 km²	Frankreich	Frankreich	Französisch
Berlin	3,769 Mio	891,8 km²	Deutschland	Frankreich	Französisch
Hamburg	1,845 Mio	755,2 km²	Deutschland	Frankreich	Französisch
London	8,982 Mio	1572 km²	Großbritannien	Frankreich	Französisch
Paris	2,176 Mio	105,34 km²	Frankreich	Deutschland	Deutsch

Es wird also jede Zeile der ersten Tabelle mit jeder Zeile der zweiten Tabelle kombiniert. Uns interessieren aber nur die Zeilen, in der die Eigenschaft Staat der einen Tabelle mit der Eigenschaft Staat der zweiten Tabelle übereinstimmt. Da die Spalte Staat in beiden Tabellen auftritt, muss im SQL-Befehl der Spaltenname mit dem Tabellenname verknüpft werden:

SELECT * FROM Stadt, Staaten WHERE Stadt.Staat = Staaten.Staat;

Die Abfrage ergibt:

Name	Einwohnerzahl	Fläche	Staat	Staat	Sprache
Berlin	3,769 Mio	891,8 km²	Deutschland	Deutschland	Deutsch
Hamburg	1,845 Mio	755,2 km²	Deutschland	Deutschland	Deutsch
London	8,982 Mio	1572 km²	Großbritannien	Großbritanien	Englisch
Paris	2,176 Mio	105,34 km²	Frankreich	Frankreich	Französisch

Eine solche Abfrage nennt man Verbund oder Join. Man kann sie auch wie folgt formulieren:

SELECT * FROM Stadt JOIN Staaten ON Stadt.Staat = Staaten.Staat;

Auf das Ergebnis des Verbunds lassen sich dann wiederum Projektion und Selektion anwenden.

Filtern von Daten

Projektion, Selektion und Verbund können kombiniert werden, um bestimmte Daten aus Datenbanktabellen herauszufiltern. Um die Filterung noch mehr zu verfeinern, können innerhalb der WHERE-Klausel noch logische und Vergleichsoperatoren genutzt werden.

Logische Operatoren

Operator	Bedeutung
AND	logisches UND, ist dann wahr wenn beide Bedingungen wahr sind
OR	logisches ODER, ist dann wahr, wenn mindestens eine der Bedingungen wahr ist
NOT	logisches NICHT, ist dann wahr, wenn die Bedingung falsch ist

Beispiele

====Vergleichsoperatoren====
(Liste nicht vollständig)

Operator	Bedeutung
<>	ungleich
<	kleiner
>	größer
<=	kleiner gleich
>=	größer gleich
LIKE	Vergleich mit einem Muster, % steht für beliebig viele Zeichen, _ steht für ein Zeichen
BETWEEN	zusammenhängender Bereich, Start- und Endwert gehören nicht zum Bereich

Beispiele

Neben logischen und Vergleichsoperatoren gibt es noch weitere Operatoren

Operatoren die die Ausgabe verfeinern

Operator	Bedeutung
AS	benennt den Spaltenname in der Ausgabe um
ORDER BY Spalte ASC	ordnet die Ausgabe nach der angegebenen Spalte aufsteigend (ASC kann weggelassen werden)
ORDER BY Spalte DESC	ordnet die Ausgabe nach der angegebenen Spalte absteigend
DISTINCT	gibt mehrfach vorkommende gleiche Datensätze nur einmal aus

Beispiele

Mathematische Operatoren

Operator	Bedeutung
COUNT	gibt die Anzahl der Datensätze aus
MAX	gibt das Maximum der Datensätze aus
MIN	gibt das Minimum der Datensätze aus
AVG	gibt das arithmetische Mittel der Datensätze aus
+,-,*,/	Operatoren für die Grundrechenoperationen

Beispiele

Gruppieren der Ausgabe

Mit dem Operator GROUP BY kann die Ausgabe in Gruppen zerlegt werden über die dann wieder SQL-Befehle angewendet werden können.

Beispiel

Geschachtelte SQL-Befehle

In der WHERE-Klausel kann man wiederum einen vollständigen SQL-Befehl in Klammern verwenden.

Beispiel

Alle Beispiele zum Filtern von Daten >>

Aufgaben

Weitere SQL-Befehle