7. SQL und relationale Algebra

7.1 SQL (Structured Query Language)

SQL ist 'die' Sprache, mit der die meisten relationalen Datenbanken erstellt, manipuliert und abgefragt werden. SQL ist eine sogenannte 4GL (Fourth-Generation Language). Sie ist nichtprozedural, d. h. der Fragesteller stellt eine Frage, gibt aber keinen Algorithmus zur Lösung vor. In einer 3GL wie Cobol, Pascal oder C müßte er angeben, wie die gesuchten Informationen gefunden werden können, z. B. vom Öffnen der Datei bis zum schrittweisen Durchgehen der Datensätze.

SQL ist ein ISO- und ANSI-Standard, der mehrfach spezifiziert wurde bzw. noch wird:

Neben einem bestimmten SQL-Standard unterstützen Datenbanksysteme meist Teile höherer Standards sowie eigene SQL-Erweiterungen. SQL 89 Level 2 ist auch heute noch Basis des von vielen Datenbanksystemen unterstützen SQL, bei SQL 92 sind die meisten Systeme nur Entry Level-Compliant (z. B. Oracle8).

7.2 Relationale Algebra

Mit einer geeigneten Abfragesprache können gewünschte Daten aus einer relationalen Datenbank herausgesucht werden. Dafür eignet sich z. B. SQL. Dabei können folgende Operationen der Mengenlehre benutzt werden:

7.2.1 Selection (Selektion)

Wählt Zeilen aus einer Tabelle aus, die einer bestimmten Bedingung genügen.

Beispiel:

Mitarbeiter

Nachname Vorname Geburtsdatum
Milke Lise 3.6.1934
Huber Karl 16.12.1964
Trunstein Helga 30.7.1956

Das SQL-Statement

liefert als Ergebnis alle Zeilen obiger Tabelle, die die angegebene Bedingung erfüllen. Dabei werden in der Ausgabe alle Spalten angezeigt (nach SELECT werden die Spalten aufgelistet, die angezeigt werden sollen. Das Zeichen * steht für 'alle Spalten')

Nachname Vorname Geburtsdatum
Trunstein Helga 30.7.1956

7.2.2 Projection (Projektion)

Wählt bestimmte Spalten einer Tabelle aus.

Beispiel:
Das SQL Statement

liefert z. B. als Ergebnis:

Nachname Geburtsdatum
Milke 3.6.1934
Huber 16.12.1964
Trunstein 30.7.1956

Natürlich können Selektion und Projektion auch zusammen eingesetzt werden.

7.2.3 Union (Vereinigung)

Fügt die Zeilen zweier Tabellen mit gleicher Spaltenzahl in einer Tabelle zusammen. Die Namen der jeweiligen Spalten der zwei Tabellen müssen nicht identisch sein, lediglich der Datentyp bzw. Wertebereich des Inhalts

Beispiel:

Mitarbeiter

Nachname Vorname Geburtsdatum
Milke Lise 3.6.1934
Huber Karl 16.12.1964
Trunstein Helga 30.7.1956


Kunden

Nachname Vorname Geburtsdatum
Kelz Andreas 21.7.1965
Huber Karl 16.12.1964
Ernsbach Elli 29.6.1956

Das SQL-Statement

liefert als Ergebnis:

Nachname Vorname Geburtsdatum
Milke Lise 3.6.1934
Huber Karl 16.12.1964
Trunstein Helga 30.7.1956
Kelz Andreas 21.7.65
Ernsbach Elli 29.6.1956

Doppelte Zeilen werden automatisch unterdrückt. Mit UNION ALL werden sie angezeigt. UNION gehört zum SQL 92 Entry Level.

7.2.4 Intersection (Schnittmenge)

Liefert die Zeilen, die in beiden angegebenen Tabellen enthalten sind.

Beispiel mit den zwei Tabellen "Mitarbeiter" und "Kunden":

Das SQL-Statement

liefert als Ergebnis

Nachname Vorname Geburtsdatum
Huber Karl 16.12.1964

INTERSECT steht nicht immer zur Verfügung, da es zum SQL 92 Intermediate Level gehört. Es kann aber bei Bedarf nachgebildet werden, z. B. durch ein geschachteltes SELECT-Statement:

7.2.5 Minus (Differenz)

Liefert die Zeilen der ersten Tabelle, die in der zweiten Tabelle nicht enthalten sind.

Beispiel mit den zwei Tabellen Mitarbeiter und Kunden:

Das SQL-Statement

liefert als Ergebnis

MINUS steht nicht immer zur Verfügung, da es zum SQL 92 Intermediate Level gehört. Es kann aber bei Bedarf nachgebildet werden, z. B. durch ein geschachteltes SELECT-Statement:

7.2.6 Join (Verbund)

Verbindet die Spalten zweier Tabellen zu einer Tabelle. Es gibt mehrere Varianten des Joins:

Mitarbeiter

Nachname Vorname Geburtsdatum
Milke Lise 3.6.1934
Huber Karl 16.12.1964
Trunstein Helga 30.7.1956


Projekte

Projekt Nachname Vorname
Neubau Huber Anna
Werbung Trunstein Helga
Design Kohlmeier Johann

7.2.7 Division (Quotient)

Das Konzept der Division ist eng verknüpft mit dem Kartesischen Produk T = R x S zweier Relationen R und S, so daß T/S (T geteilt durch S) die Relation R ergibt. Hat T die Anzahl t Spalten und S die Anzahl s Spalten, so hat T/S die Anzahl t - s Spalten.

Beispiel:


Dann liefert Projektarbeit/Projekte:

Wichtig:
Im Allgemeinen bedeutet die Division R = T/S nicht, daß T = R x S, da in T zusätzliche Tupel auftreten können. In obiger Tabelle könnte z. B. an beliebiger Stelle die Zeile

stehen, ohne das Ergebnis der Division zu ändern.


  Inhaltsverzeichnis
© 1996-98 Andreas Kelz