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. XB(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 AB überprüft, wobei Ar und Bs 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 AB 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 rs 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 rt 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 rt 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