In diesem Abschnitt beschäftigen wir uns mit den Operatoren des Relationenmodells, mit denen neben den rein statischen Eigenschaften des ER-Modells auch dynamische Eigenschaften modelliert werden können. Die Operatoren können auf Relationen angewendet werden und erzeugen dabei neue Relationen. Wie wir aus der Mathematik wissen, lassen sich Operatoren und Operanden (Relationen) zu komplizierten Ausdrücken verknüpfen, mit denen die Berechnung neuer Relationen beschrieben werden kann. Man spricht daher auch von der Relationenalgebra. Sie ist eine präzise Sprache zur Formulierung von Anfragen. Diese ist jedoch unabhängig von der Sprache eines bestimmten DBMS, d. h. man kann hier also Anfragen sprachunabhängig formulieren, egal in welchem DBMS man die Relationen später implementieren will.

Operatoren der Relationenalgebra

OperatorSchreibweiseBedeutung
Durchschnitt R \cap S Schnittmenge der Mengen R und S
Vereinigung R \cup S Vereinigungsmenge der Mengen R und S
DifferenzR \setminus SDifferenz von Mengen
ProduktR \times S kartesisches Produkt zweier Mengen
Selektion\sigma_{Bedingung} (R)Auswahl von Tupeln gemäß einer Bedingung (Auswahl von Zeilen)
Projektion\pi_{Attribut} (R)Auswahl von Attributen (Auswahl von Spalten)
JoinR \bowtie S Verknüpfung zweier Relationen zu einer neuen mit den Attributen beider Tabellen über gemeinsames Attribut
Umbenennung\rho_{alt \to neu} (R)Umbennenung eines Attributes

Zur Erklärung und Verdeutlichung der Wirkungsweise der Operatoren betrachten wir Beispiele mit folgenden Relationen:

Kurs1

KursNrThemaJahrgangsstufe
13Analysis12/I
25Short Stories12/I
3Datenbanken11/I

Kurs2

KursNrThemaJahrgangsstufe
11Mechanik I11/I
12Mechanik I11/I
25Short Stories12/I
3Datenbanken11/I

KursLR

KursNrLehrerRaum
11Müller I123
12Schulze124
27Bauer14
15Maier14
17Maier17
3Zange211

Im folgenden werden die oben genannten Operatoren definiert und jeweils an einem Beispiel (mit den gegebenen Relationen) erläutert. Zur Übung und zum besseren Vergleich zwischen den gegebenen Relationen und den durch die Anwendung der Operatoren entstandenen Relationen werden die Beispiele jeweils auf einer extra Seite geöffnet.

Operator Durchschnitt

DeDurchschnitt R \cap S zweier Relationen R und S ist die Menge aller Tupel, die sowohl in R als auch in S enthalten sind.
Dieser Operator kann nur bei identischen Spaltenköpfen in S und R angewendet werden.

Beispiel: \text{Kurs1} \cap \text{Kurs2}

Operator Vereinigung

Die Vereinigung R \cup S zweier Relationen R und S ist die Menge aller Tupel, die in R oder S oder in beiden Relationen enthalten sind.
Dieser Operator kann nur bei identischen Spaltenköpfen in S und R angewendet werden.

Hinweis: Da Relationen Mengendarstellungen sind, wird jedes Element nur einmal aufgezählt, auch wenn es mehrfach vorkommen sollte.

Beispiel: \text{Kurs1} \cup \text{Kurs2}

Operator Differenz

Die Differenz R \ S zweier Relationen R und S ist die Menge aller Tupel, die in R aber nicht gleichzeitig in S enthalten sind.
Dieser Operator kann nur bei identischen Spaltenköpfen in S und R angewendet werden.

Beispiel: \text{Kurs1} \setminus \text{Kurs2}

Operator kartesisches Produkt

Seien R und S Relationen mit Grad n1 und n2. Das kartesische Produkt  R \times S ist die Menge aller (n1*n2)-Tupel, deren n1-Komponenten ein Tupel in R und deren n2 Komponenten ein Tupel aus S darstellen – es wird jedes Tupel aus R mit jedem Tupel aus S kombiniert.

Beispiel: \text{Kurs1} \times \text{KursLR}

Operator Selektion

Sei B eine Bedingung. Diese Bedingung kann Konstanten und Attribute als Operanden, sowie Vergleichsoperatoren (<, ≤, =, ≠, ≥, >) und logische Operatoren (and, or, not) enthalten. Dann ist die Selektion \sigma_{B} (R) die Menge aller Tupel in R, die die Bedingung B erfüllen. Bei der Selektion werden Zeilen ausgewählt.

Eine Selektion bewirkt, dass in einer Relation einige Zeilen gestrichen werden und nur die übrig bleiben, die die angegebene Bedingung erfüllen. Im Spezialfall dient die Selektion, einen einzelnen Satz zu selektieren, indem ein eindeutiges Merkmal angegeben wird, z.B. der Primärschlüssel. Sollte dieses Merkmal in der Relation nicht vorhanden sein, ist das Ergebnis eine leere Relation.

Beispiel:
Alle Kurse der Relation KursLR mit einer KursNr größer als 15 sollen selektiert werden:
\sigma_{KursNr > 15} (\text{KursLR})

Operator Projektion

Sei R eine Relation vom Grad n. Dann ist \pi_{i_1, ..., i_m} (R) die Projektion von R auf die Komponenten i1, …, im. Die entstehende Relation ist vom Grad m. Bei einer Projektion werden Spalten ausgewählt.

Bei der Projektion werden einige Spalten ausgeblendet; nur die angegebenen Spalten bleiben übrig. Danach werden eventuell mehrfach auftretende identische Zeilen bis auf eine entfernt, da eine Relation eine Menge darstellt und keine Duplikate enthalten darf.

Beispiel:
Gesucht ist die Relation, welche das Thema und die Jahrgangsstufe aller möglichen Kurse aus Kurs1 und Kurs2 angibt:
\pi_{Thema, Jahrgangsstufe} (\text{Kurs1} \cup \text{Kurs2})

Operator Join

DEN Join gibt es nicht; es werden (in der Literatur) eine größere Anzahl von Joins unterschieden. Wir beschränken uns hier auf einige (für die Schule) relevanten Typen.

NATURAL JOIN, INNER JOIN, EQUI-JOIN, JOIN

Ein Join verbindet zwei Tabellen über gleichnamige Spalten bei gleichen Attributwerten.

Der Natural Join R \bowtie S der Tabellen R und S wird für Tabellen mit gleichen Attributen wie folgt berechnet:

  1. Man bildet das kartesische Produkt R \times S .
  2. Für jedes Attribut, das sowohl in R als auch in S vorkommt, selektiert man die Tupel, für die die Werte der gleichnamigen Attribute übereinstimmen.
  3. Eine der gleichen Spalten wird wegprojiziert.

Der natürliche Verbund ist äußerst wichtig, um Relationen, die aus entwurfstheoretischen Gründen zerlegt wurden, während der Abfrage wieder zu kombinieren. Die Zerlegung findet in der Regel über Schlüsselattribute statt. Dementsprechend findet der Join in aller Regel über ein gemeinsames Schlüsselattribut in den beiden zu verknüpfenden Tabellen statt.

Zu beachten ist, dass der Natural Join zwei Tabellen über alle gleichnamigen Attribute verknüpft, es werden also dann nur die Verknüpfungen gefunden, die in beiden Spalten identische Werte aufweisen. Möchte man in so einem Fall nur ein Attribut für die Verknüpfung verwenden, nutzt man entweder den Equi-Join mit Angabe des Attributes oder man benennt eines der Attribute um.

Beispiel: \text{Kurs2} \bowtie \text{KursLR}

OUTER JOINs

Der Left Outer Join  R ⟕ S der Tabellen R und S verknüpft die Datensätze aus R und S analog dem Natural Join. Dabei werden allerdings auch die Datensätze aus R (der linken Tabelle) eingeschlossen, für die kein entsprechender Datensatz in S (der rechten Tabelle) existiert. (linke Inklusionsverknüpfung)

Beispiel: R ⟕ S

Der Right Outer Join  R  ⟖ S der Tabellen R und S verknüpft die Datensätze aus R und S analog dem Natural Join. Dabei werden allerdings auch die Datensätze aus S (der rechten Tabelle) eingeschlossen, für die kein entsprechender Datensatz in R (der linken Tabelle) existiert. (rechte Inklusionsverknüpfung)

Beispiel: R  ⟖ S

Der Full Outer Join  R  ⟗ S der Tabellen R und S verknüpft die Datensätze aus R und S analog dem Natural Join. Dabei werden allerdings auch die Datensätze aus R und S eingeschlossen, für die kein entsprechender Datensatz in der jeweils anderen Tabelle existiert. Dieser Join stellt eine Verknüpfung des Left Outer Join und des Right Outer Join dar.

Beispiel: R ⟗ S

WEITERE JOIN-TYPEN

Neben den oben diskutierten Join-Typen findet man in verschiedenen Quellen weitere Typen, die hier der Vollständigkeit halber genannt werden sollen.

Cross Join
… entspricht dem kartesischen Produkt

Union Join, Union…
funktioniert ähnlich dem Full Outer Join, allerdings werden die Datensätze nicht über Bedingungen verknüpft.

Theta Join, Non-Equi-Join…
ist eine Verallgemeinerung des Inner Join. Während beim Inner Join die Gleichheit des Inhalts zweier Attribute verglichen wird, wird beim Theta Join der Inhalt der Attribute i und j mit einer beliebigen Formel Theta(i,j) verglichen, etwa i = j (i gleich j; InnerJoin), i < j (i kleiner j), i <= j (i kleiner oder gleich j), i > j (i größer j) usw.

Self-Join
Der Self-Join ist ein beliebiger Join, bei dem nicht zwei verschiedene Tabellen benutzt werden, sondern zweimal dieselbe Tabelle.

Schlagwörter: