Folie 1

Werbung
Datenbanken
Rückblick:
Datenbank-Entwurfsprozess
Semantische Datenmodellierung
(vgl. Kapitel 2)
Überführung des semantischen
Datenmodells in das relationale
Modell (vgl. Kapitel 3)
Das relationale Modell wird in
eine normalisierte Form
gebracht (vgl. Kapitel 4)
Physische Realisierung von
Relationen, Views und internen
Strukturen
1
Stephan Karczewski - Datenbanken
5. Datendefinition und -manipulation
Datenbanken
Datendefinition und Datenmanipulation:
2
•
Die Datendefinition erfolgt über eine Definitionssprache, die es dem Nutzer einer
relationalen Datenbank erlaubt, die in den vorangegangenen Kapiteln erklärten
Relationen für das System zu definieren.
•
Die Datenmanipulation erfolgt über eine ähnlich einfache Manipulationssprache. Unter
Manipulation werden Ändern, Einfügen, Löschen und Lesen zusammengefasst.
•
Die Sprache Structured Query Language (SQL) ist eine universelle Sprache für
relationale Datenbanken, die die Bereiche Definition (Data Definition Language, DDL)
und Manipulation (Data Manipulation Language, DML) umfasst.
•
Die hier vorgestellte SQL-Sprache ist einfach konstruiert und trotzdem sehr mächtig.
Das zugrunde liegende Konzept der mathematischen Relation ermöglicht die einfache
Sprache.
Stephan Karczewski - Datenbanken
5. Datendefinition und -manipulation
Datenbanken
Structured Query Language – SQL:
3
•
SQL ist eine interpretative Sprache. Anfragen werden nicht nur übersetzt, sondern
gleich ausgeführt.
•
SQL-DML hat keine Kontrollstrukturen (wie z.B. Java, C++), sondern verfügt über eine
mengenwertige Bearbeitung von Daten. Relationen werden durch die SQL-DMLBefehle wiederum in Relationen überführt.
•
Die Einbettung von SQL in höhere Programmiersprachen ist nötig, um
Datenbankinhalte dynamisch in Applikationen zu integrieren. Man sprich von
Embedded SQL (ESQL).
Stephan Karczewski - Datenbanken
5. Datendefinition und -manipulation
Datenbanken
Structured Query Language – SQL (Historie):
1970
Codd: Erstes Konzept für eine relationale Sprache für Datenbanken
1974
SEQUEL (Structured English Query Language wird als Vorläufer von SQL
definiert.
1975/79
System R (IBM) wird als Prototyp für ein relationales Sprachensystem
entwickelt.
1986/87
SQL-86 ANSI/ISO Standard – erste genormte Version von SQL – SQL1
1989
SQL-89
1992
SQL-92 – SQL2 wird von ISO verabschiedet
1999
SQL:1999 – SQL3 – Erweiterung der Sprache um objekt-relationale Elemente.
2003
SQL: 2003 – ISO/IEC 9075:2003
2006
SQL:2006 – ISO/IEC 9075-14:2006 – Verwendung von SQL im Zusammenhang mit
XML
SQL ist der de facto-Standard für relationale Datenbanken.
4
Stephan Karczewski - Datenbanken
5. Datendefinition und -manipulation
Datenbanken
SQL – DDL (Data Definition Language)
5
•
DDL ist der Teil der Standardsprache relationaler Datenbanken, mit der man
Relationenschemata definiert.
•
Mit der DDL definiert man Relationenschemata, Views (Sichten) auf die Daten und
interne Strukturen von Datenbanken.
•
Es gibt CASE-Tools, mit denen der Übergang vom EERM zu relationalen Modell (inkl.
der Anwendung der SQL-DDL) automatisiert werden kann.
•
Allerdings: Die dort entstehenden Relationenschemata sind nicht notwendigerweise
normalisiert, weil außer der Schlüssel-/Fremd-Schlüssel-Definition üblicherweise
keine funktionalen Abhängigkeiten definiert werden. So kann beispielsweise eine
3NF-Verletzung nicht erkannt werden.
Stephan Karczewski - Datenbanken
5. Datendefinition und -manipulation
Datenbanken
SQL – DDL (Data Definition Language)
•
6
Zur Verwaltung von Strukturobjekten (i.d.R. Relationen-Schemata) einer Datenbank
stehen in der DDL von SQL folgende Operatoren zur Verfügung:

CREATE
zur Generierung eines Strukturobjekts

ALTER
zur Änderung eines Strukturobjekts

DROP
zum Löschen eines Strukturobjekts
•
Im Systemkatalog (Data Dictionary) werden alle Informationen zu Strukturobjekten
Daten über die Daten) und statistische Informationen abgespeichert.
•
Der Systemkatalog hat die gleiche Struktur wie ein Relationenschema, d.h. die
Informationen über die Tabellenstruktur, Attribute etc. sind in System-Relationen
abgespeichert.
Stephan Karczewski - Datenbanken
5. Datendefinition und -manipulation
Datenbanken
SQL – DDL (Data Definition Language)
CREATE
7
•
Es ist möglich, in einem Datenbank-System mehrere Datenbanken parallel zu
verwalten. Für jede Datenbank, die typischerweise eine komplexe Anwendung umfasst,
können eine Menge von Relationenschemata definiert werden.
•
Der logische Datenbankname und die Zuweisung des entsprechenden
physischen Speicherplatzes erfolgt über eine CREATE DATABASE-Anweisung.
•
Diese Anweisung wird typischerweise vom Datenbank-Administrator durchgeführt, da
nur dieser den Komplett-Überblick über vorhandene physische Speicherstrukturen hat.
•
Der Befehl lautet:
CREATE DATABASE <DB-Name>
CHARACTER SET <Zeichensatz>
NATIONAL CHARACTER SET <NAT Zeichensatz>
DATAFILE <Angabe des physischen Speicherplatzes>
…; /* weitere systemnahe Optionen */
•
Durch diesen Befehl wird eine leere Datenbank mit einem Namen und ihrem initialen
Speicherbereich definiert. Innerhalb dieses Bereiches können nun die anwendungsrelevanten Relationenschemata definiert werden, in die die Daten (als Relationen)
abgelegt werden.
Stephan Karczewski - Datenbanken
5. Datendefinition und -manipulation
Datenbanken
SQL – DDL (Data Definition Language)
CREATE
8
•
Die Generierung von Relationenschemata mit ihren Attributen erfolgt mit dem
CREATE TABLE –Befehl.
•
Der Befehl lautet:
CREATE TABLE <table-name> (<table-element>, …);
•
table-element ist wie folgt definiert:
<column-name> [default definition] <column-type> [constraint definition] /* die
Definition der Attribute mit ihren Typen und evtl. default-Werten bzw. constraints */
•
Default-Werte sind Vorbelegungswerte bei Generierung eines Objekts (eines Tupels).
•
Constraints sind wörtlich übersetzt Zwangsbedingungen, also Bedingungen, die ohne
Ausnahmen einzuhalten sind. Im Datenbankbereich sind die wesentlichen Constraints
die Schlüssel-/Fremdschlüssel-Definition oder NOT NULL-Definition.
•
PRIMARY KEY kann durch direktes Anfügen an eine Spalte definiert werden oder durch
eine spezielle Anweisung am Ende des CREATE TABLE-Befehls.
•
FOREIGN KEY (Fremdschlüssel) wird am Ende der Tabellendefinition spezifiziert und
gibt an, welches Attribut der gerade definierten Tabelle auf welches Attribut (welchen
Schlüssel) einer anderen Tabelle referenziert.
•
NOT NULL bedeutet, dass die Spalte, für die dieser Constraint gilt, nicht leer (also ohne
Wert) sein darf.
Stephan Karczewski - Datenbanken
5. Datendefinition und -manipulation
Datenbanken
SQL – DDL (Beispiel):
Rückblick: Transformation EERM  Relationales Modell:
CREATE
(1,1)
m:1-Beziehung (Beispiel):
(0,*)
8
Markt
Veranstalter
Markt (Bezeichnung, Standort, Kategorie)
Veranstalter (Name, Adresse, Bezeichnung, Typ)
8: Ansprechpartner
Markt:
Bezeichnung
Veranstalter:
Name
Standort
Adresse
Name
Kategorie
Bezeichnung
Typ
(Veranstalter-) Name wird in der Markt-Relation ergänzt und zum Fremdschlüssel.
9
Stephan Karczewski - Datenbanken
5. Datendefinition und manipulation
Datenbanken
SQL – DDL (Beispiel):
CREATE
10
•
Die EERM-Definition zeigt eine m:1-Beziehung zwischen Markt und Veranstalter. Diese soll
in der Definition der Relationen-Schemata umgesetzt werden durch eine
Schlüssel-/Fremdschlüssel-Beziehung zwischen zwei Relationen.
•
Umsetzung:
CREATE TABLE
Veranstalter
(Name
varchar(20) NOT NULL, /* Spalte darf nicht leer (NOT NULL) sein */
Adresse
varchar(20),
Bezeichnung
varchar(20),
Typ
varchar(10),
PRIMARY KEY (Name) /* alternativ: CONSTRAINT PK_NAME PRIMARY KEY (Name) */
);
CREATE TABLE
Markt
(Bezeichnung
varchar(20),
Standort varchar(20),
Name
varchar(20),
Kategorie varchar(20),
PRIMARY KEY (Bezeichnung, Standort),
/* Schlüssel besteht aus 2 Attributen */
FOREIGN KEY (Name) REFERENCES Veranstalter(Name) /* Fremdschlüssel referenziert
)
auf Veranstalter-Tabelle */
5. Datendefinition und Stephan Karczewski - Datenbanken
manipulation
Datenbanken
SQL – DDL (Data Definition Language)
Constraints
11
•
Allgemein wird die CONSTRAINT-Bedingung mit dem Schlüsselwort CONSTRAINT und
dem Namen eingeleitet. Bei PRIMARY KEY bzw. FOREIGN KEY kann man dies
weglassen, also äquivalent sind

CONSTRAINT PK_NAME PRIMARY KEY (Name) /* Langform */

PRIMARY KEY (Name)
/* Kurzform */
•
Neben den Schlüssel-/Fremdschlüssel und NULL-Constraints können auch inhaltlich
geprägte Bedingungen aufgestellt werden. So könnte man z.B. das Attribut Gehalt in
einer Personaltabelle auf einen Höchstwert begrenzen mit
CONSTRAINT check_Gehalt CHECK (Gehalt < 100000)
•
Alle constraints werden bei jeder Einfüge-, Lösch- oder Änderungs-Operationen stets
auf Einhaltung überprüft (geCHECKED). Wird ein Constraint nicht eingehalten, wird die
Operation komplett abgelehnt und nicht ausgeführt.
•
Speziell für PRIMARY KEY wird bei jedem insert-Befehl geprüft, dass der neue Wert für
den primary key nicht bereits in der Tabelle enthalten ist. Die Eindeutigkeit des
Schlüssel-Wertes wird somit garantiert.
•
Speziell für FOREIGN KEY wird zweierlei überprüft. Bei der referenzierenden Tabelle
wird beim insert und beim update überprüft, dass der neue/bearbeitete Eintrag auch
eine Referenz in der referenzierten Tabelle hat. Bei der referenzierten Tabelle wird beim
delete bzw. update darauf geachtet, dass auf diesen gelöschten/geänderten Eintrag
nicht zuvor eine Referenz bestand.
Stephan Karczewski - Datenbanken
5. Datendefinition und -manipulation
Datenbanken
SQL – DDL (Data Definition Language)
ALTER
12
•
Tabellenstrukturen können mit dem Befehl ALTER TABLE geändert werden.
•
Die wesentlichen Änderungen, die man in der Praxis vornimmt, sind:
Hinzufügen von Spalten/constraints, Ändern von Spalten/constraints,
Löschen von Spalten/constraints.
•
Hinzufügen von Spalten: ALTER TABLE <name> ADD COLUMN <cname> <ctype>,
Die neue Spalte hat NULL-Werte (oder DEFAULT-Werte).
•
Ändern von Tabellen: ALTER TABLE <name> MODIFY <cname> <ctype>,
Die Konsequenz kann sein, dass Inhalte gelöscht sind.
•
Löschen von Spalten: ALTER TABLE <name> DROP <cname>,
Die Konsequenz ist, dass auch die Inhalte gelöscht sind.
•
Beispiele:
ALTER TABLE Markt ADD COLUMN (groesse integer);
ALTER TABLE Markt MODIFY (groesse integer CHECK (groesse < 2500));
Stephan Karczewski - Datenbanken
5. Datendefinition und -manipulation
Datenbanken
SQL – DDL (Data Definition Language)
DROP
13
•
Tabellen werden mit dem Befehl DROP TABLE gelöscht.
•
Syntax: DROP TABLE <table name> <option>
•
Die Option kann restricted oder cascade sein.
•
Bei restricted wird das Löschen nur ausgeführt, wenn keine Referenzen auf die Tabelle
vorhanden sind, also kein Fremdschlüssel auf ein Attribut der Tabelle referenziert.
•
Bei cascade wird die Tabelle in jedem Fall gelöscht. Eventuelle Referenzen werden so
behandelt, dass die entprechenden FOREIGN KEY constraints entfernt werden.
•
DROP TABLE führt bei erfolgreicher Ausführung zum Löschen der Tabellenstruktur
und der Tabelleninhalte.
Stephan Karczewski - Datenbanken
5. Datendefinition und -manipulation
Datenbanken
SQL – DDL (Data Definition Language)
Datentypen
14
•
Als Datentypen für die Spezifikation dürfen nur einfache (elementare, skalare) gewählt
werden, da sonst die 1NF-Eigenschaft verletzt wird (vgl. Kap. 4).
•
Die vorhandenen Datentypen sind Hersteller-spezifisch. Z.B. verwendet Oracle die
Datentypen VARCHAR(…), NUMBER(…, …), DATE für Strings, Zahlen und Daten.
•
Neben den Standard-Datentypen kann man sogenannte DOMAINS selbst definieren. Sie
schränken die vorhandenen Datentypen ein, so dass nur gewünschte Werte zugelassen
werden können (vgl. CONSTRAINTS).
Stephan Karczewski - Datenbanken
5. Datendefinition und -manipulation
Datenbanken
SQL – DDL (Aufgabe)
Gegeben sei das folgende EERM:
(0,*)
Produkt
(0,*)
6
Markt
Produkt (Nummer, Bezeichnung, Funktion)
Markt (Bezeichnung, Standort, Kategorie)
6: wird angeboten auf (Anzahl)
Definieren Sie mit der SQL-DDL die Tabellen, die zur korrekten relationalen Abbildung
dieses EERM notwendig sind. Berücksichtigen Sie insbesondere
15
•
die Nutzung korrekter Datentypen für die Attribute,
•
die Spezifikation der Constraints (Schlüssel-, Fremdschlüssel),
•
Die korrekte Reihenfolge der Definition der Tabellen.
Stephan Karczewski - Datenbanken
5. Datendefinition und -manipulation
Datenbanken
SQL – DML (Data Manipulation Language)
16
•
Die Datenmanipulationsprache ist ebenfalls Bestandteil von SQL.
•
Unter Datenmanipulation werden die Operationen zum Ändern (INSERT, UPDATE,
DELETE) und Lesen (SELECT) von Daten zusammengefasst.
•
Die Relationenalgebra ist die mathematische Grundlage zur Manipulation von
Relationen.
•
Die Operationen der Relationenalgebra haben als Eingabewert eine (oder mehrere)
Relationen und als Ausgabewert eine Relation.
•
Insofern können Ausdrücke der Relationenalgebra verschachtelt angewendet werden.
Stephan Karczewski - Datenbanken
5. Datendefinition und -manipulation
Datenbanken
SQL – DML (Data Manipulation Language)
INSERT
•
17
Für das INSERT gibt es zwei Varianten:

Einfügen einer Zeile in eine Tabelle.

Einfügen mehrerer Zeilen in eine Tabelle, die durch ein SELECT ausgewählt
wurden.
•
Aufbau des Befehls (eine Zeile):
INSERT INTO <tabellenname> [(<spaltenname>,)] VALUES (spaltenwert,);
Die Spaltennamen können weggelassen werden, dann wird die selbe Reihenfolge von
Werten erwartet wie in der Definition der Tabelle. Werden Spaltennamen angegeben,
dann muss die gleiche Anzahl an Spaltenwerten angegeben werden.
•
Aufbau des Befehls (mehrere Zeilen):
INSERT INTO <tabellenname> [(<spaltenname>,)]<select-Statement>
Das select-statement ist ein Lesebefehl, der später noch detailliert erläutert wird. Mit
einem select-statement können beliebig viele Tupel gelesen werden. Das selectstatement muss beim INSERT das gleiche Format besitzen wie die Tabelle, in die
eingefügt werden soll bzw. wie die <spaltennamen> vorgeben.
•
Nicht angegebene <spaltennamen> werden mit dem Wert NULL belegt.
Stephan Karczewski - Datenbanken
5. Datendefinition und -manipulation
Datenbanken
SQL – DML (INSERT-Beispiel)
Gegeben sei die folgende Tabelle:
CREATE TABLE Markt
(Verkaufsmarkt
varchar(20),
Marktstandort
varchar(20),
PRIMARY KEY (Verkaufsmarkt));
Markt
Verkaufsmarkt
Einfügen eines Tupels:
Markt
INSERT INTO Markt (Verkaufsmarkt, Marktstandort)
Verkaufsmarkt
VALUES (´Rheinischer Tonmarkt´, ´Mainz´);
ist identisch mit
Rheinischer Tonmarkt
INSERT INTO Markt
VALUES (´Rheinischer Tonmarkt´, ´Mainz´);
weil in diesem Fall alle Spalten in der Reihenfolge gefüllt
werden wie im CREATE TABLE-Statement angegeben.
Markt
Einfügen eines unvollständigen Tupels:
Verkaufsmarkt
INSERT INTO Markt (Verkaufsmarkt)
Rheinischer Tonmarkt
VALUES (´Internat. Tonmarkt´);
Internat. Tonmarkt
18
Stephan Karczewski - Datenbanken
Marktstandort
Marktstandort
Mainz
Marktstandort
Mainz
-
5. Datendefinition und -manipulation
Datenbanken
SQL – DML (Data Manipulation Language)
UPDATE
19
•
Der UPDATE-Befehl ermöglicht Änderungen in Datenwerten über mehrere Zeilen und
Spalten einer Tabelle.
•
Die Änderungen erfolgen aufgrund von Bedingungen, die an bestimmte Attributwerte
gestellt werden.
•
Aufbau des Befehls:
UPDATE <tabellenname> SET <spaltenname>=<spaltenwert> [WHERE <bedingung>];
I.d.R. wird genau ein Spaltenwert geändert in den Tupeln (Zeilen), bei denen die
Bedingung erfüllt wird. Wird keine Bedingung angegeben, dann erfolgt die Änderung in
jedem Tupel (Vorsicht beim Vergessen der Bedingung!). Diese Option kann z.B. gewählt
werden, wenn eine hinzugefügte Spalte anschließend mit einem Default-Wert belegt
werden soll.
•
Soll nur eine Zeile geändert werden, dann wählt man als Bedingung den Wert des
Primärschlüssels, um sicher zu stellen, dass nicht mehr Zeilen verändert werden.
•
Sowohl hinter SET (beim Spaltenwert) als auch in der Bedingung kann ein
SELECT-Statement gewählt werden, um den Wert zu ändern.
Stephan Karczewski - Datenbanken
5. Datendefinition und -manipulation
Datenbanken
SQL – DML (UPDATE-Beispiel)
Gegeben sei die folgende Tabelle aus
dem vorherigen Beispiel mit den
angegebenen Inhalten:
20
Markt
Verkaufsmarkt
Marktstandort
Rheinischer Tonmarkt
Mainz
Internat. Tonmarkt
-
Ändern aller Tupel, bei denen der
Marktstandort keinen Wert hat (NULL):
UPDATE Markt
SET Markstandort = ´Mainz´
WHERE Markstandort IS NULL;
Markt
Ändern aller Mainzer Märkte. Sie werden
nach Darmstadt verlegt:
UPDATE Markt
SET Markstandort = ´Darmstadt´
WHERE Markstandort = ´Mainz´;
Markt
Stephan Karczewski - Datenbanken
Verkaufsmarkt
Marktstandort
Rheinischer Tonmarkt
Mainz
Internat. Tonmarkt
Mainz
Verkaufsmarkt
Marktstandort
Rheinischer Tonmarkt
Darmstadt
Internat. Tonmarkt
Darmstadt
5. Datendefinition und -manipulation
Datenbanken
SQL – DML (Data Manipulation Language)
DELETE
21
•
Der DELETE-Befehl ermöglicht das Löschen kompletter Zeilen von Tabellen.
•
Ist die Bedingung des Befehls erfüllt, wird – im Gegensatz zum UPDATE-Befehl – jede
Zeile gelöscht, die diese Bedingung erfüllt.
•
Wird keine Bedingung angegeben, dann werden alle Zeilen gelöscht. Es existiert
anschließend nur noch die Tabellenstruktur.
•
Aufbau des Befehls:
DELETE FROM <tabellenname> WHERE <spaltenname>=<spaltenwert>
Jede Zeile, in der der spaltenname den spaltenwert besitzt, wird gelöscht.
Grundsätzlich kann jede Bedingung gewählt werden, die sich auf jede Zeile anwenden
lässt. Ist die Bedingung erfüllt, wird die entsprechende Zeile gelöscht.
Stephan Karczewski - Datenbanken
5. Datendefinition und -manipulation
Datenbanken
SQL – DML (DELETE-Beispiel)
Gegeben sei die folgende Tabelle aus
dem vorherigen Beispiel mit den
angegebenen Inhalten:
Löschen aller Internat. Tonmärkte:
DELETE FROM Markt
WHERE Verkaufsmarkt = ´Internat. Tonmarkt´;
Sind Referenzen (Fremdschlüssel) auf den zu
löschenden Datensatz vorhanden, kann die
Löschung abgewiesen werden.
Markt
Verkaufsmarkt
Marktstandort
Rheinischer Tonmarkt
Darmstadt
Internat. Tonmarkt
Darmstadt
Markt
Verkaufsmarkt
Marktstandort
Rheinischer Tonmarkt
Darmstadt
Markt
Löschen aller Märkte (auch wenn es sehr
viele Einträge sind, ist das Ergebnis das
gleiche):
DELETE FROM Markt;
22
Stephan Karczewski - Datenbanken
Verkaufsmarkt
Marktstandort
5. Datendefinition und -manipulation
Datenbanken
SQL – DML (Data Manipulation Language)
SELECT
23
•
Der SELECT-Befehl bietet die Möglichkeit, komplexe Informationen aus der Datenbank
anwendungsorientiert zu extrahieren.
•
Mathematische Grundlage des SELECT-Befehls ist die Relationenalgebra. Mit dem
Konzept der relationalen Datenbank wurde diese bereits in den 1970er Jahren
begründet.
•
Die Relationenalgebra bietet mathematische Operationen, die angewendet werden auf
(eine) Relation(en) und im Ergebnis eine Relation liefern. Insofern kann man das
Ergebnis einer Operation als Input für die Anwendung einer weiteren Operation
verwenden (Verschachtelung von Ausdrücken der Relationenalgebra).
•
Der SELECT-Befehl bildet die Relationenalgebra algorithmisch ab. Dabei wird die
zugrunde liegende Mathematik erweitert um sinnvolle anwendungsbezogene
Elemente.
Stephan Karczewski - Datenbanken
5. Datendefinition und -manipulation
Datenbanken
Relationenalgebra
Verschiedene Grundoperationen werden auf Relationen definiert:
•
•
Einstellige Operationen:

Selektion von Zeilen


Projektion auf Spalten


Spalten umbenennen

Mehrstellige Operationen

Tabellen-Kreuzprodukt


Tabellen-Vereinigung


Tabellen-Schnitt


Tabellen-Differenz
\

Tabellen-Verknüpfung

Diese Grundoperationen reichen aus, um alle Ausdrücke der Relationenalgebra zu bilden.
Strenggenommen kann man die Tabellenverknüpfung noch weglassen, weil sie aus den
anderen Operationen ableiten kann. Jedoch spielt sie in der Praxis eine große Rolle.
24
Stephan Karczewski - Datenbanken
5. Datendefinition und -manipulation
Datenbanken
Relationenalgebra
Selektion 
•
Die Selektion () wählt eine Menge von Zeilen aus der Relation aus, die eine Bedingung
erfüllen.
•
Schreibweise: x(r), wobei r eine Relation ist und x eine logische Bedingung ist, die also
TRUE oder FALSE liefert und sich auf jedes Tupel bezieht.
•
Bedeutung: Ergebnis ist die Menge an Tupeln, die x erfüllt.
•
Beispiel:
Gegeben sei die folgende Relation:
Funktion=´Gebrauch´(Produkt):
Produkt:
•
25
ProdNr
Produktart
Funktion
ProdNr
Produktart
Funktion
11022
Tee-Service
Gebrauch
11022
Tee-Service
Gebrauch
10622
Kaffee-Service
Gebrauch
10622
Kaffee-Service
Gebrauch
20131
Schale
Deko
40030
Krug
Deko
Im Ergebnis werden alle die Produkte selektiert, die die Bedingung erfüllen. Wichtig: Es
werden komplette Zeilen selektiert.
Stephan Karczewski - Datenbanken
5. Datendefinition und -manipulation
Datenbanken
Relationenalgebra
Projektion 
•
Die Projektion () projiziert auf eine Menge von Spalten, die angegeben werden müssen.
•
Schreibweise: y(r), wobei r eine Relation und y eine Menge von Spalten ist.
•
Bedeutung: Ergebnis ist die ursprüngliche Menge an Tupeln, die jedoch auf die Spalten
y beschränkt ist. Aufgrund der Mengensichtweise werden doppelte Tupel gelöscht.
•
Beispiel:
Gegeben sei die folgende Relation:
Funktion(Produkt):
Produkt:
•
26
ProdNr
Produktart
Funktion
Funktion
11022
Tee-Service
Gebrauch
Gebrauch
10622
Kaffee-Service
Gebrauch
Deko
20131
Schale
Deko
40030
Krug
Deko
Im Ergebnis wird nur die Spalte Funktion ausgegeben. Da in den vier ursprünglichen
Zeilen zwei Funktionen doppelt vorkommen, werden nur zwei Zeilen ausgegeben.
Stephan Karczewski - Datenbanken
5. Datendefinition und -manipulation
Datenbanken
Relationenalgebra
Umbenennung 
•
Die Umbenennung spielt insbesondere dann eine Rolle, wenn man einen Verbund über
gleichbenannte Attribute machen möchte (insbes. Natürlicher Verbund) oder ein
Kreuzprodukt über Attribute, die gleichbenannt sind.
XB(r):
r:
27
A
B
A
X
1
2
1
2
2
3
2
3
5
4
5
4
Stephan Karczewski - Datenbanken
5. Datendefinition und -manipulation
Datenbanken
Relationenalgebra
Kreuzprodukt 
r:
28
r  s:
s:
A
B
C
D
A
B
C
D
1
2
5
4
1
2
5
4
2
3
5
2
1
2
5
2
2
3
5
4
2
3
5
2
•
Im Ergebnis-Schema werden die Spalten der beteiligten Relationenschemata
konkateniert.
•
Jede Zeile der ersten Relation wird mit jeder der zweiten kombiniert.
Stephan Karczewski - Datenbanken
5. Datendefinition und -manipulation
Datenbanken
Relationenalgebra
Vereinigung 
r:
29
Schnitt 
Differenz \
r  s:
s:
r  s:
r \ s:
A
B
A
B
A
B
A
B
A
B
1
2
5
4
1
2
1
2
2
3
2
3
1
2
2
3
5
4
•
Voraussetzung für die Vereinigung, den Schnitt und die Differenz ist, dass beide
Schemata das gleiche Format haben, d.h. sowohl Anzahl als auch Typen der Attribute
müssen identisch sein.
•
Ergebnis von  ist die Vereinigungsmenge der beiden Relationen.
•
Ergebnis von  ist die Schnittmenge der beiden Relationen. Strenggenommen könnte
man auf  verzichten, weil gilt: r  s  r \(r\s)
•
Ergebnis von \ ist die Menge der Tupel, die in r aber nicht in s sind.
Stephan Karczewski - Datenbanken
5. Datendefinition und -manipulation
Datenbanken
Relationenalgebra
Natürlicher Verbund 
•
Der natürliche Verbund verbindet zwei Relationen auf „natürliche“ Weise.
•
Schreibweise: r  s, wobei r und s Relationen sind.
•
Bedeutung: Ergebnis-Schema ist die Vereinigungsmenge der Relationenschemata.
Ergebnis-Relation nimmt nur solche Tupel auf, die in den gemeinsamen Attributen die
gleichen Werte haben.
•
Beispiel:
Gegeben seien die folgenden Relationen:
Lehrbücher:
30
Buchautoren:
ISBN
Titel
ISBN
Autor
3-2304-0619
UML Distilled
3-2304-0619
Fowler
3-8273-1282-5
Refactoring
3-2304-0619
Kendall
3-8266-0619-1
Datenbanken
3-8273-1282-5
Fowler
3-8266-0619-1
Heuer
3-8266-0619-1
Saake
Stephan Karczewski - Datenbanken
5. Datendefinition und -manipulation
Datenbanken
Relationenalgebra
Natürlicher Verbund  (Fortsetzung)
Lehrbücher  Buchautoren:
•
ISBN
Titel
Autor
3-2304-0619
UML Distilled
Fowler
3-2304-0619
UML Distilled
Kendall
3-8273-1282-5
Refactoring
Fowler
3-8266-0619-1
Datenbanken
Heuer
3-8266-0619-1
Datenbanken
Saake
Die Natürlichkeit kommt dadurch zum Ausdruck, dass die Verknüpfung genau dort
zustande kommt, wo die gleichlautenden Schlüssel-/Fremdschlüssel-Attribute
aufeinander treffen. Diese Spalten werden nur 1x benötigt, weil nur bei gleichen Werten
in diesen Spalten eine Ausgabe erfolgt. Insofern erfolgt eine Vereinigung der
Attributmenge.
•
31
Das Ergebnis ist die erwartete Relation, die inhaltlich alle Autoren mit ihren Büchern
verknüpft. Dieses Beispiel zeigt, dass die durch Normalisierung in verschiedene
Relationen getrennten Inhalte durch den natürlichen Verbund wieder
zusammengebracht werden können.
Stephan Karczewski - Datenbanken
5. Datendefinition und -manipulation
Datenbanken
Relationenalgebra
Weitere Verbünde
32
•
Der natürliche Verbund ist eine spezielle (wenn auch häufig genutzte) Form des
Verbundes. Er wird i.d.R. angewendet, wenn Tabellen über Schlüssel-/FremdschlüsselBeziehungen miteinander verbunden sind.
•
Allgemein spricht man von einem Verbund, wenn zwei Tabellen nach bestimmten
Regeln miteinander verbunden werden.
•
Schreibweise:
•
Vorgehen: Es wird das kartesische Produkt von r und s gebildet und anschließend pro
Tupel die Bedingung AB überprüft, wobei Ar und Bs und =, <, >, , , .
•
Falls  = ´=´, dann spricht man vom EQUI-Join. Der natürliche Verbund ist ein Equi
Join über gleichbenannte Attribute, wobei doppelte Attribute im Ergebnis gestrichen
werden.
•
Man spricht von der losless join property, wenn bei einem Equi Join alle Tupel der
beteiligten Relationen im Ergebnis vorkommen.
•
Das Problem nicht verwendeter Tupel (dangling tuple) kann man durch Varianten des
Equi Join vermeiden.
Stephan Karczewski - Datenbanken
r  s
AB
5. Datendefinition und -manipulation
Datenbanken
Relationenalgebra
Weitere Verbünde
full outer join: 
dient dazu (wie auch die anderen outer joins), dangling tuples zu verhindern. Beim full
outer join werden alle Tupel beider Relationen mit einem NULL-Tupel verbunden, so
dass sie nicht verloren gehen.
Beispiel:
r  s:
r:
s:
•
33
A
B
B
C
A
r.B
s.B
C
1
2
2
4
1
2
2
4
2
3
5
2
2
3
-
-
-
-
5
2
durch 
vormals
dangling tuples
•
´-´ entspricht dem NULL-Wert.
•
Sowohl die dangling tuple in r (2, 3) als auch in s (5, 2) bleiben im Ergebnis erhalten.
Stephan Karczewski - Datenbanken
5. Datendefinition und -manipulation
Datenbanken
Relationenalgebra
Weitere Verbünde
left outer join: 
verhindert dangling tuples in der ersten (linken) Relation. Diese werden mit NULLTupeln der rechten Relation verbunden.
Beispiel:
•
r:
•
s:
A
B
B
C
A
r.B
s.B
C
1
2
2
4
1
2
2
4
2
3
5
2
2
3
-
-
Right outer join: 
verhindert dangling tuples in der zweiten(rechten) Relation. Diese werden mit NULLTupeln der linken Relation verbunden.
Beispiel:
r:
34

r
s:
r
s:

s:
A
B
B
C
A
r.B
s.B
C
1
2
2
4
1
2
2
4
2
3
5
2
-
-
5
2
Stephan Karczewski - Datenbanken
5. Datendefinition und -manipulation
Datenbanken
SQL – DML (Data Manipulation Language)
SELECT
35
•
Der SELECT-Befehl hat – wie die Relationenalgebra – als Eingabe eine (oder mehrere)
Relationen und liefert wieder eine Relation.
•
Über die Mächtigkeit der Relationenalgebra hinaus, erlaubt der SELECT-Befehl noch
weitere Optionen.
•
Im folgenden werden zunächst die Ausdrücke der Relationenalgebra mit SELECTBefehlen nachgebildet.
•
Grundaufbau der SELECT-Befehls:
SELECT <Projektionsattribute> [<Aggregatfunktion>]
FROM <Relationen>
[WHERE <Selectionsbedingungen>]
[GROUP BY <Gruppierungsliste>]
[HAVING <Bedingung auf Gruppierung>]
[ORDER BY <Sortierliste>];
Stephan Karczewski - Datenbanken
5. Datendefinition und -manipulation
Datenbanken
•
•
•
36
r:
s:
t:
A
B
D
B
C
A
B
D
SQL – DML (Data Manipulation Language)
1
2
6
2
4
1
2
6
SELECT
2
3
4
5
2
4
4
4
2
3
5
Projektion

A,B(r)

SELECT DISTINCT A, B FROM r;
doppelte Tupel werden eliminiert (2, 3)
Selection

A=1(r)

´*´ bedeutet alle Attribute
SELECT * FROM r WHERE A=1;
Kreuzprodukt

rs

SELECT * FROM r, s;
Kombination jeder Zeile von r mit jeder Zeile in s
Stephan Karczewski - Datenbanken
A
B
1
2
2
3
A
B
D
1
2
6
A
B
D
B
C
1
2
6
2
4
1
2
6
5
2
2
3
4
2
4
2
3
4
5
2
2
3
5
2
4
2
3
5
5
2
5. Datendefinition und -manipulation
Datenbanken
•
•
•
•
37
r:
s:
t:
A
B
D
B
C
A
B
D
SQL – DML (Data Manipulation Language)
1
2
6
2
4
1
2
6
SELECT
2
3
4
5
2
4
4
4
2
3
5
Vereinigung

rt 
SELECT * FROM r UNION SELECT * FROM t;
Tabellen müssen gleiches Format besitzen.
A
B
D
1
2
6
2
3
4
2
3
5
4
4
4
A
B
D
1
2
6
Differenz
\
r\t

SELECT * FROM r MINUS SELECT * FROM t;
Tabellen müssen gleiches Format besitzen.
A
B
D
2
3
4
2
3
5
Natürlicher Verbund 
r  s
A
B
D
C
1
2
6
4
Schnitt

rt 
SELECT * FROM r INTERSECT
Tabellen müssen gleiches Format besitzen.
Stephan Karczewski - Datenbanken

SELECT * FROM t;
SELECT * FROM r, s WHERE r.B = s.B;
SELECT * FROM r NATURAL JOIN s;
5. Datendefinition und -manipulation
Datenbanken
•
•
•
•
38
r:
s:
t:
A
B
D
B
C
A
B
D
SQL – DML (Data Manipulation Language)
1
2
6
2
4
1
2
6
SELECT
2
3
4
5
2
4
4
4
2
3
5

full outer join
r  s
 SELECT * FROM r FULL OUTER JOIN s ON (r.B=s.B)B;
In Oracle Standard, in SQL nicht standardisiert. Dangling tuples
werden mit NULL_Werten aufgefüllt.
left outer join

r  s
 SELECT * FROM r LEFT OUTER JOIN s ON (r.B=s.B);
In Oracle Standard, in SQL nicht standardisiert. Dangling tuples der
der linken Tabelle werden mit NULL_Werten aufgefüllt.

r  s
 SELECT * FROM r RIGHT OUTER JOIN s ON (r.B=s.B);
In Oracle Standard, in SQL nicht standardisiert. Dangling tuples der
der rechten Tabelle werden mit NULL_Werten aufgefüllt.
right outer join
Stephan Karczewski - Datenbanken
A
r.B
D
s.B
C
1
2
6
2
4
2
3
4
-
-
2
3
5
-
-
-
-
-
5
2
A
r.B
D
s.B
C
1
2
6
2
4
2
3
4
-
-
2
3
5
-
-
A
r.B
D
s.B
C
1
2
6
2
4
-
-
-
5
2
5. Datendefinition und -manipulation
Datenbanken
SQL – DML (Data Manipulation Language)
SELECT
Bemerkungen:
39
•
Hinter dem SELECT kann ein ´*´ stehen. Dies bedeutet, dass alle Attribute ausgewählt
werden, unabhängig von der Anzahl der Tabellen, die hinter WHERE stehen.
•
Neben der Aufzählung der Attribute können auch Aggregat-Funktionen hinter SELECT
verwendet werden. Diese ermöglichen Aggregationen von allen Werten oder von
Gruppen von Werten, die hinter der GROUP BY-Klausel spezifiziert werden. Gruppiert
werden muss bei letzterem Fall über alle Attribute hinter SELECT.
•
Wichtig: Zählt man hinter WHERE Tabellen auf, so wird nicht automatisch ein natural
join durchgeführt, sondern ein Kreuzprodukt, welches in der Regel nicht gewünscht ist.
Den natural join kann man durch die entsprechenden Bedingungen hinter WHERE
(Gleichheit von Schlüssel- und Fremdschlüssel) erreichen. Alternativ kann man mit
NATURAL JOIN bei gleichlautenden Attributnamen agieren.
•
Das Kreuzprodukt kann man auch explizit erreichen, in dem man das Schlüsselwort
CROSS JOIN zwischen die entsprechenden Tabellennamen schreibt.
•
Man kann Attributnamen in der Ausgabe verändern, indem man einen ALIAS-Namen
verwendet. Hat man z.B. ein Attribut ´Nr´ definiert, möchte man es aber mit
´Nummer´ ausgeben, dann schreibt man in der Auflistung hinter SELECT:
…, Nr AS Nummer, …
Stephan Karczewski - Datenbanken
5. Datendefinition und -manipulation
Datenbanken
SQL – DML (Data Manipulation Language)
SELECT
Bemerkungen:
40
•
Man kann auch einfache Rechenoperationen hinter dem SELECT verwenden, z.B.
SELECT Nettopreis, Nettopreis*1,19 AS Bruttopreis FROM …. Bei diesem Beispiel ist in
der Datenbank nur der Nettopreis gespeichert. Der Bruttopreis wird dynamisch
während der Ausgabe berechnet.
•
Die Tabellennamen hinter WHERE kann man ebenfalls mit einem ALIAS-Namen
versehen. Hierzu gibt man hinter dem Namen – durch ein Leerzeichen getrennt – den
ALIAS-Namen an.
•
Das Ergebnis einer Anfrage hat keine vorgegebene Reihenfolge. Diese kann man mit
der ORDER BY-Klausel herbeiführen.
SELECT A, B FROM r ORDER BY A ASC bedeutet, dass A und B ausgegeben
werden, aufsteigend sortiert nach A (desc bedeutet absteigend).
•
Es können auch mehrere Attribute hinter ORDER BY angegeben werden.
•
Man kann hinter ORDER BY auch Zahlen angeben. Diese geben die Position der Spalte
bei der Ausgabe an. Bei dem vorigen Beispiel hätte man also auch
SELECT A, B FROM r ORDER BY 1 ASC schreiben können.
Stephan Karczewski - Datenbanken
5. Datendefinition und -manipulation
Datenbanken
SQL – DML (Data Manipulation Language)
SELECT
Die folgenden Tabellen dienen als Beispiel für die Erläuterungen zur WHERE-Bedingung.
Produkte werden auf Märkten angeboten.
Markt:
Produkt:
41
ProdNr
Produktart
Funktion
Verkaufsmarkt
Marktstandort
11022
Tee-Service
Gebrauch
Rheinischer Tonmarkt
Darmstadt
10622
Kaffee-Service
Gebrauch
Internat. Tonmarkt
Darmstadt
20131
Schale
Deko
40030
Krug
Deko
Stephan Karczewski - Datenbanken
Angebot:
ProdNr
Verkaufsmarkt
11022
Rheinischer Tonmarkt
10622
Rheinischer Tonmarkt
20131
Rheinischer Tonmarkt
11022
Internat. Tonmarkt
40030
Internat. Tonmarkt
5. Datendefinition und -manipulation
Datenbanken
SQL – DML (Data Manipulation Language)
SELECT
SELECT
FROM
WHERE
AND
*
Produkt, Markt, Angebot
Produkt.ProdNr = Angebot.ProdNr
Markt.Verkaufsmarkt = Angebot.Verkaufsmarkt;
ist der natürliche Verbund und identisch mit
SELECT
FROM
*
Produkt NATURAL JOIN Markt NATURAL JOIN Angebot;
und liefert:
42
ProdNr
Produktart
Funktion
Verkaufsmarkt
Marktstandort
11022
Tee-Service
Gebrauch
Rheinischer Tonmarkt
Darmstadt
10622
Kaffee-Service
Gebrauch
Rheinischer Tonmarkt
Darmstadt
20131
Schale
Deko
Rheinischer Tonmarkt
Darmstadt
11022
Tee-Service
Gebrauch
Internat. Tonmarkt
Darmstadt
40030
Krug
Deko
Internat. Tonmarkt
Darmstadt
Stephan Karczewski - Datenbanken
5. Datendefinition und -manipulation
Datenbanken
SQL – DML (Data Manipulation Language)
SELECT
WHERE-Bedingungen über mehrere Tabellen können auch verschachtelt sein. Man spricht
von sogenannten sub-selects:
Beispiel: Ausgabe der Produktart aller auf Internat. Tonmärkten angebotenen Produkte
3.
SELECT
FROM
WHERE
Produktart
2.
Produktart
Tee-Service
ProdNr
Produkt
Krug
11022
ProdNr IN
( SELECT ProdNr
40030
1.
FROM
Angebot
Verkaufsmarkt
WHERE Verkaufsmarkt IN
Internat. Tonmarkt
(SELECT Verkaufsmarkt
FROM
Markt
WHERE Verkaufsmarkt = ´Internat. Tonmarkt´));
Statt IN können auch andere Bedingungen =, <, >, , , ANY, ALL verwendet
werden. IN steht für =ANY. Mit ALL ist das größte Element in der Menge gemeint.
43
Stephan Karczewski - Datenbanken
5. Datendefinition und -manipulation
Datenbanken
SQL – DML (Data Manipulation Language)
SELECT
•
Mit LIKE bei Character-Variablen kann man auf Ähnlichkeit suchen. Das ´%´ steht für
beliebige Zeichen
Beispiel: Ausgabe der Produkt-Nr, deren Funktion ´Gebrauch´ ist und die auf Internat.
Märkten angeboten werden.
SELECT
FROM
WHERE
AND
44
ProduktNr
Produkt
Produktart = ´Gebrauch´
ProdNr IN
( SELECT ProdNr
FROM
Angebot
WHERE Verkaufsmarkt IN
(SELECT
FROM
WHERE
Stephan Karczewski - Datenbanken
Ergebnis:
ProdNr
20131
Verkaufsmarkt
Markt
Verkaufsmarkt LIKE ´Internat%´));
5. Datendefinition und -manipulation
Datenbanken
SQL – DML (Data Manipulation Language)
SELECT
•
SUBSTR (<char>, <start>, <laenge>) kann für Teilstring-Vergleiche verwendet werden.
SUBSTR (Marktstandort, 1, 1) = ´D´ ist TRUE für alle Märkte, die mit ´D´beginnen.
•
WHERE-Bedingungen, die auf NULL-Werte treffen führen zur Nicht-Ausgabe des
entsprechenden Tupels.
•
IS NULL kann verwendet werden, um speziell Zeilen zu behandeln, bei denen ein Wert
nicht belegt (NULL) ist.
r:
A
B
D
1
2
6
2
3
-
-
3
5
-
-
4
Beispiel 1:
SELECT * FROM r WHERE A < 3;
Beispiel 2:
SELECT B
FROM r
WHERE A IS NULL
OR D IS NULL
liefert
A
B
D
1
2
6
2
3
-
B
liefert:
3
3
-
45
Stephan Karczewski - Datenbanken
5. Datendefinition und -manipulation
Datenbanken
SQL – DML (Data Manipulation Language)
SELECT
46
•
Aggregatfunktionen können hinter SELECT verwendet werden, um für das Ergebnis
aggregierte Werte auszugeben.
•
Sie können sich beziehen auf die gesamte Ausgabemenge, dann steht hinter SELECT und
vor WHERE nur die Aggregatfunktion.
•
Sie können sich aber in Verbindung mit GROUP BY auf Teilgruppen der Ausgabe beziehen,
dann steht neben der Aggregatfunktion noch eine Menge von Attributen.
•
Aggregatfunktionen sind:

COUNT(Spalte), zählt die Anzahl der Zeilen (statt Spalte kann auch * stehen).

SUM(Spalte), summiert die Werte einer Spalte (Spalte muss numerisch sein).

AVG(Spalte), ermittelt den Durchschnitt einer Spalte (Spalte muss numerisch sein).

MIN(Spalte), ermittelt den Minimalwert einer Spalte (Spalte muss numerisch sein).

MAX(Spalte), ermittelt den Maximalwert einer Spalte (Spalte muss numerisch sein).
Stephan Karczewski - Datenbanken
5. Datendefinition und -manipulation
Datenbanken
Mitarbeiter:
MNr
Ort
Gehalt
SQL – DML (Data Manipulation Language)
1
Darmstadt
5000
SELECT
2
Frankfurt
3000
3
Frankfurt
4000
4
Darmstadt
3000
Beispiele:
•
•
SELECT COUNT(*) AS Anzahl FROM Mitarbeiter; liefert
Anzahl
4
SumGehalt
15000
SELECT SUM(Gehalt) AS SumGehalt FROM Mitarbeiter; liefert
MAX(Gehalt)
•
SELECT MAX(Gehalt) FROM Mitarbeiter; liefert
5000
MIN(Gehalt)
•
SELECT MIN(Gehalt) FROM Mitarbeiter; liefert
•
SELECT AVG(Gehalt) AS DurchschnittsGehalt FROM Mitarbeiter; liefert
3000
Durchschnittsgehalt
3750
47
Stephan Karczewski - Datenbanken
5. Datendefinition und -manipulation
Datenbanken
Mitarbeiter:
MNr
Ort
Gehalt
SQL – DML (Data Manipulation Language)
1
Darmstadt
5000
SELECT
2
Frankfurt
3000
3
Frankfurt
4000
4
Darmstadt
3000
Beispiele:
•
•
•
48
SELECT Ort, SUM(Gehalt) AS SumGehalt
FROM Mitarbeiter
GROUP BY Ort;
liefert
SELECT Ort, AVG(Gehalt) AS DurchschnittsGehalt
FROM Mitarbeiter
GROUP BY Ort;
liefert
SELECT Ort, AVG(Gehalt) AS DurchschnittsGehalt
FROM Mitarbeiter
WHERE MNr < 4
GROUP BY Ort;
liefert
Stephan Karczewski - Datenbanken
Ort
SumGehalt
Darmstadt
8000
Frankfurt
7000
Ort
Durchschnittsgehalt
Darmstadt
4000
Frankfurt
3500
Ort
Durchschnittsgehalt
Darmstadt
5000
Frankfurt
3500
5. Datendefinition und -manipulation
Datenbanken
MNr
Ort
Gehalt
SQL – DML (Data Manipulation Language)
1
Darmstadt
5000
SELECT
2
Frankfurt
3000
3
Frankfurt
4000
4
Darmstadt
3000
Beispiele:
•
•
49
Mitarbeiter:
SELECT Ort, SUM(Gehalt) AS SumGehalt
FROM Mitarbeiter
liefert
GROUP BY Ort
ORDER BY 2 ASC; /* aufsteigend nach SumGehalt */
Ort
SumGehalt
Frankfurt
7000
Darmstadt
8000
SELECT Ort, AVG(Gehalt) AS DurchschnittsGehalt
Ort
FROM Mitarbeiter
Darmstadt
GROUP BY Ort
liefert
HAVING AVG(Gehalt) > 3800
/* Bedingung auf Gruppierung */
Durchschnittsgehalt
4000
•
HAVING entspricht der Bedingung für die Gruppierung
wie WHERE für die Bedingung bei einzelnen Werten.
•
Wichtig: Bevor gruppiert wird, werden WHERE-Bedingungen ausgewertet.
Nachdem gruppiert wird, werden HAVING-Bedingungen ausgewertet.
Stephan Karczewski - Datenbanken
5. Datendefinition und -manipulation
Herunterladen