Dies ist eine alte Version des Dokuments!
Inhaltsverzeichnis
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.
Video
Aufgaben
Lade die Datenbank Geo herunter und Teste die Beispiele aus dem Video. Überlege dir eigene Beispiele und teste sie.
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 |
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 |
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 |
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 |
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.
Geschachtelte SQL-Befehle
In der WHERE-Klausel kann man wiederum einen vollständigen SQL-Befehl in Klammern verwenden.
Video