Datenbanken

Datenbank­operationen

 aufwärts

Die wichtigsten Operationen auf Datenbank­tabellen sind: Projektion, Selektion, kartesisches Produkt und Verbund. Alle vier Operationen werden in SQL in der einheit­lichen Notation

SELECT column-names
FROM table-names
WHERE condition

formuliert. Hierbei sind column-names eine oder mehrere Spalten­überschriften, table-names eine oder mehrere Tabellen und condition eine Bedingung. Ergebnis einer Datenbank­operation ist in jedem Fall wiederum eine Tabelle.

Projektion

Definition:  Eine Projektion ist die Auswahl gewisser Spalten einer Tabelle.

R[i] ergibt eine Tabelle, die aus den Einträgen der i-ten Spalte der Tabelle R besteht. Statt einer Spalten­nummer wird i.a. die Spalten­überschrift angegeben: R[spalte]. Es können auch mehrere Spalten in beliebiger Reihenfolge angegeben werden: R[spalte0, ..., spalten-1].

Beispiel:  

Gegeben sei folgende Tabelle Stud:

Stud matrnrnamegebdat
101520Meier06.01.1985
203040Müller10.05.1981
506070Meier08.05.1985
102030Schulze06.01.1985

 

Das Ergebnis der Projektion auf die beiden Spalten name und matrnr (in dieser Reihenfolge) ist die folgende Tabelle:

Stud[name, matrnr]namematrnr
Meier101520
Müller203040
Meier506070
Schulze102030

Schreibweise in SQL:

SELECT name, matrnr 
FROM Stud

Der WHERE-Teil des SQL-Kommandos kann entfallen, wenn die Bedingung true ist. Dies ist hier der Fall.

 

Tabellen als Ergebnis einer Projektion

Das Ergebnis des SQL-Kommandos

SELECT name
FROM Stud

ist die Tabelle

name
Meier
Müller
Meier
Schulze

 

Diese Tabelle stellt nicht, wie dies eigentlich gedacht ist, eine Relation im mathe­matischen Sinne dar, denn eine Relation ist eine Menge, und eine Menge darf nur verschiedene Elemente enthalten. In dieser Ergebnis­tabelle tritt aber das Element 'Meier' doppelt auf. Insofern weicht hier die SQL-Projektion von der mathematisch korrekten Projektion ab, deren Ergebnis wie folgt ist:

Stud[name]name
Meier
Müller
Schulze

 

Das mathematisch korrekte Ergebnis lässt sich durch Angabe von DISTINCT erzielen:

SELECT DISTINCT name
FROM Stud

Selektion

Definition:  Eine Selektion ist die Auswahl gewisser Zeilen einer Tabelle.

R[b] ist eine Tabelle, die aus allen Zeilen der Tabelle R besteht, die der Bedingung b genügen.

Beispiel:  

Zugrunde­gelegt sei die Tabelle Stud aus dem vorigen Beispiel. Eine Selektion nach der Bedingung name ≠ 'Meier' ergibt folgende Ergebnis­tabelle:

Stud[name ≠ 'Meier']matrnrnamegebdat
203040Müller10.05.1981
102030Schulze06.01.1985

Schreibweise in SQL:

SELECT *
FROM  Stud
WHERE name<>'Meier'

Der * steht in SQL für "alle Spalten der Tabelle".

Kartesisches Produkt

Definition:  Das kartesische Produkt R × S zweier Tabellen R und S ergibt eine Tabelle, deren Zeilen aus allen Kombinationen von Zeilen aus R und S bestehen.

Beispiel:  

 R a b c
123
456
 
 S c d
37
48
69
 
 R × S  a  bR.cS.c  d
12337
12348
12369
45637
45648
45669

Schreibweise in SQL:

SELECT *
FROM R, S

In den seltensten Fällen wird man das kartesische Produkt als alleinige Operation anwenden. Dagegen spricht schon die Größe der Ergebnis­tabelle. Sinnvoll ist das kartesische Produkt nur im Zusammenhang mit einer gleich­zeitigen Selektion. Die sich daraus ergebende Operation ist der Verbund.

Verbund (Join)

Definition:  Ein Verbund zwischen zwei Tabellen R und S ist eine Selektion von gewissen Zeilen des kartesischen Produkts R × S, die einer bestimmten Bedingung genügen. D.h. es werden nur bestimmte Kombinationen von Zeilen von R bzw. S gebildet.

R[b]S ist eine Tabelle mit allen Zeilen aus R × S, die der Bedingung b genügen. R[b]S ist also eine andere Schreibweise für (R × S)[b].

Beispiel:  R[R.c=S.c]S liefert alle Zeilen des kartesischen Produkts, in denen der Wert von c in Tabelle R gleich dem Wert von c in Tabelle S ist.

 R  a b c
123
456
 
 S  c d
37
48
69
 
 R[R.c=S.c]S   a  bR.cS.c  d
12337
45669

Schreibweise in SQL:

SELECT *
FROM R, S
WHERE R.c=S.c

Statt der Bedingung R.c=S.c kann natürlich auch eine völlig andere Bedingung für den Verbund formuliert werden. Am häufigsten ist allerdings eine Bedingung wie im Beispiel, dass die Werte in zwei bestimmten Spalten über­einstimmen.

Join-Schreibweise

Der Verbund lässt sich auch mit dem SQL-Befehl JOIN formulieren. Der Verbund aus dem vorigen Beispiel wird in SQL dann wie folgt erzeugt:

SELECT *
FROM R JOIN S
ON R.c=S.c

Das Ergebnis ist dieselbe Tabelle wie oben.

Im Beispiel tragen die beiden Spalten, über die der Verbund gebildet wird, dieselbe Spalten­überschrift, nämlich c. In einem solchen speziellen Fall lässt sich das SQL-Kommando mithilfe von USING vereinfachen:

SELECT *
FROM R JOIN S
USING (c)

Das Ergebnis unter­scheidet sich vom vorherigen Ergebnis dadurch, dass die Spalte c nur einmal aufgeführt wird.

Anwendung

Am häufigsten wird der Verbund zur Verknüpfung von Tabellen benutzt, die durch Beziehungen miteinander verbunden sind. Als Beispiel sei hier folgendes Entity-Relationship-Diagramm zugrunde­gelegt:

Entity-Relationship-Diagramm

Die Umsetzung dieses Konzeptes ergibt dann beispielweise folgende Tabellen:

Stud matrnrnamegebdat
101520Meier06.01.1985
203040Müller10.05.1981
506070Meier08.05.1985
102030Schulze06.01.1985
 
Hört matrnrveranstnr
10152083200
10152087500
20304083200
50607087400
  
Veranst nrbezartdauer
83200INF3V2
87400INF4V2
87500INF2LL2
82500DTV4
 

Die Tabellen Stud und Veranst haben als Schlüssel die Attribute matrnr bzw. nr. Die Beziehung Hört wird durch eine Tabelle realisiert, in der diese Attribute als Fremd­schlüssel aufgeführt werden. Zum Beispiel hört der Student mit der Matrikel­nummer 10 15 20 die Veranstaltungen Nr. 83200 und 87500.

Um nun aber die Namen derjenigen Studenten heraus­zufinden, die etwa die Veranstaltung INF3 besuchen, müssen die Tabellen miteinander verknüpft werden. Aus der Tabelle Hört allein geht dies nicht hervor; es muss in diesem Fall ein Verbund von drei Tabellen hergestellt werden. Kombiniert werden jeweils die Zeilen der drei Tabellen, in denen die Matrikel­nummer und die Veranstaltungs­nummer über­einstimmen. Eingeschränkt wird das ganze auf die Zeilen, in denen die Bezeichnung der Veranstaltung INF3 lautet.

Das SQL-Kommando lautet:

SELECT name
FROM Stud, Hört, Veranst
WHERE Stud.matrnr=Hört.matrnr
AND veranstnr=Veranst.nr
AND bez='INF3'

Das Ergebnis ist die Tabelle:

   name
Meier
Müller

 

Mithilfe des SQL-Befehls JOIN lässt sich die Abfrage wie folgt formulieren:

SELECT name
FROM Stud JOIN Hört USING (matrnr)
JOIN Veranst ON veranstnr=Veranst.nr
WHERE bez='INF3'

 

Weiter mit:   [Schlüssel und Normalform]  oder   up

 

homeH.W. Lang   Hochschule Flensburg   lang@hs-flensburg.de   Impressum   ©   Created: 08.11.1999   Updated: 09.06.2016
Valid HTML 4.01 Transitional


Campus Flensburg

Informatik in Flensburg studieren...

 

Neu gestaltetes Studienangebot:

Bachelor-Studiengang
Angewandte Informatik

mit Schwerpunkten auf den Themen Software, Web, Mobile, Security und Usability.

Ihr Abschluss
nach 7 Semestern:
Bachelor of Science

 

Ebenfalls ganz neu:

Master-Studiengang
Angewandte Informatik

Ein projektorientiertes Studium auf höchstem Niveau mit den Schwerpunkten Internet-Sicherheit, Mobile Computing und Human-Computer Interaction.

Ihr Abschluss
nach 3 Semestern:
Master of Science

 

Weitere Informatik-Studienangebote an der Hochschule Flensburg:

Medieninformatik

Wirtschaftsinformatik