27.12.2012 Aufrufe

Datenmodelle, Datenbanksprachen und Datenbank - Oldenbourg ...

Datenmodelle, Datenbanksprachen und Datenbank - Oldenbourg ...

Datenmodelle, Datenbanksprachen und Datenbank - Oldenbourg ...

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

Gottfried Vossen<br />

<strong>Datenmodelle</strong>,<br />

<strong><strong>Datenbank</strong>sprachen</strong><br />

<strong>und</strong> <strong>Datenbank</strong>managementsysteme<br />

5. Auflage<br />

<strong>Oldenbourg</strong>


<strong>Datenmodelle</strong>,<br />

<strong><strong>Datenbank</strong>sprachen</strong><br />

<strong>und</strong> <strong>Datenbank</strong>managementsysteme<br />

von<br />

Prof. Dr. Gottfried Vossen<br />

5. überarbeitete <strong>und</strong> erweiterte Auflage<br />

<strong>Oldenbourg</strong> Verlag München Wien<br />

Gottfried Vossen, <strong>Datenmodelle</strong>, <strong><strong>Datenbank</strong>sprachen</strong> <strong>und</strong> <strong>Datenbank</strong>managementsysteme.<br />

ISBN 978-3-486-27574-2. <strong>Oldenbourg</strong> Wissenschaftsverlag München 2008.


Inhaltsverzeichnis<br />

Auszug ... xiv<br />

... aus dem Vorwort zur ersten Auflage xiv<br />

... aus dem Vorwort zur zweiten Auflage xv<br />

... aus dem Vorwort zur dritten Auflage xvi<br />

Vorwort zur fünften Auflage xix<br />

I Einführung 1<br />

1 Motivationen, Historisches, Abgrenzungen 3<br />

1.1 Daten-intensive Anwendungen <strong>und</strong> deren Anforderungen . . . . . . . . 3<br />

1.2 <strong>Datenbank</strong>en <strong>und</strong> Informationssysteme . . . . . . . . . . . . . . . . . . 6<br />

1.3 Entwicklung von <strong>Datenbank</strong>systemen <strong>und</strong> <strong>Datenmodelle</strong>n . . . . . . . 7<br />

1.3.1 Filesysteme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8<br />

1.3.2 Generische Sicht eines <strong>Datenbank</strong>systems . . . . . . . . . . . . 10<br />

1.3.3 Netzwerk- <strong>und</strong> hierarchische <strong>Datenbank</strong>en . . . . . . . . . . . . 12<br />

1.3.4 Relationale <strong>Datenbank</strong>en . . . . . . . . . . . . . . . . . . . . . 15<br />

1.3.5 Objektrelationale <strong>Datenbank</strong>en . . . . . . . . . . . . . . . . . . 18<br />

1.3.6 XML-<strong>Datenbank</strong>en . . . . . . . . . . . . . . . . . . . . . . . . . 21<br />

1.4 Bibliographische Hinweise <strong>und</strong> Ergänzungen . . . . . . . . . . . . . . . 22<br />

1.5 Übungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23<br />

2 Aufbau von <strong>Datenbank</strong>en <strong>und</strong> <strong>Datenbank</strong>systemen 25<br />

2.1 Datenunabhängigkeit . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25<br />

2.2 Die ANSI/SPARC-Schemaebenen . . . . . . . . . . . . . . . . . . . . . 26<br />

2.3 Sprachebenen <strong>und</strong> -klassen . . . . . . . . . . . . . . . . . . . . . . . . 29<br />

2.4 Ein Schichtenmodell für <strong>Datenbank</strong>systeme . . . . . . . . . . . . . . . 32<br />

2.5 Bibliographische Hinweise, Ergänzungen, Querbezüge . . . . . . . . . . 39<br />

2.6 Übungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41<br />

Gottfried Vossen, <strong>Datenmodelle</strong>, <strong><strong>Datenbank</strong>sprachen</strong> <strong>und</strong> <strong>Datenbank</strong>managementsysteme.<br />

ISBN 978-3-486-27574-2. <strong>Oldenbourg</strong> Wissenschaftsverlag München 2008.


vi Inhalt<br />

II Klassische Konzepte:<br />

ER- <strong>und</strong> relationales Datenmodell. SQL 43<br />

3 <strong>Datenbank</strong>-Entwurf mit dem Entity-Relationship-Modell 45<br />

3.1 Der <strong>Datenbank</strong>-Lebenszyklus . . . . . . . . . . . . . . . . . . . . . . . 46<br />

3.2 Aspekte der Qualitätssicherung . . . . . . . . . . . . . . . . . . . . . . 49<br />

3.2.1 Qualitätskriterien für den <strong>Datenbank</strong>entwurf . . . . . . . . . . 49<br />

3.2.2 Die Gr<strong>und</strong>züge ordnungsmäßiger Modellierung . . . . . . . . . 51<br />

3.3 Phasen des Entwurfsprozesses . . . . . . . . . . . . . . . . . . . . . . . 52<br />

3.3.1 Anforderungsanalyse <strong>und</strong> -spezifikation . . . . . . . . . . . . . 54<br />

3.3.2 Konzeptioneller Entwurf . . . . . . . . . . . . . . . . . . . . . . 55<br />

3.3.3 Logischer Entwurf . . . . . . . . . . . . . . . . . . . . . . . . . 57<br />

3.3.4 Physischer Entwurf . . . . . . . . . . . . . . . . . . . . . . . . . 57<br />

3.3.5 Weitere Entwurfsschritte . . . . . . . . . . . . . . . . . . . . . . 58<br />

3.4 Allgemeine Abstraktionskonzepte . . . . . . . . . . . . . . . . . . . . . 59<br />

3.5 Das Entity-Relationship-Modell . . . . . . . . . . . . . . . . . . . . . . 60<br />

3.5.1 Entities <strong>und</strong> Attribute . . . . . . . . . . . . . . . . . . . . . . . 61<br />

3.5.2 Relationships . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69<br />

3.5.3 IS-A-Beziehungen . . . . . . . . . . . . . . . . . . . . . . . . . 75<br />

3.5.4 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . 80<br />

3.6 Konzeptioneller Entwurf mit dem ER-Modell . . . . . . . . . . . . . . 81<br />

3.7 Bibliographische Hinweise <strong>und</strong> Ergänzungen . . . . . . . . . . . . . . . 88<br />

3.8 Übungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90<br />

4 Das relationale Datenmodell 95<br />

4.1 Relationen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95<br />

4.2 Datenabhängigkeiten. Relationenschemata . . . . . . . . . . . . . . . . 98<br />

4.3 Transformation eines ER-Diagramms in das Relationenmodell . . . . . 104<br />

4.4 <strong>Datenbank</strong>-Definition mit SQL . . . . . . . . . . . . . . . . . . . . . . 109<br />

4.4.1 <strong>Datenbank</strong>schema-Definition . . . . . . . . . . . . . . . . . . . 110<br />

4.4.2 Tabellen-Definition . . . . . . . . . . . . . . . . . . . . . . . . . 111<br />

4.4.3 Integritätsbedingungen . . . . . . . . . . . . . . . . . . . . . . . 112<br />

4.4.4 Weitere Definitionsaspekte . . . . . . . . . . . . . . . . . . . . 114<br />

4.5 Fallstudie Medienhandel . . . . . . . . . . . . . . . . . . . . . . . . . . 116<br />

4.6 Bibliographische Hinweise <strong>und</strong> Ergänzungen . . . . . . . . . . . . . . . 124<br />

4.7 Übungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126<br />

5 Gr<strong>und</strong>lagen von SQL 127<br />

5.1 SQL von 1980 bis 2003 . . . . . . . . . . . . . . . . . . . . . . . . . . . 127<br />

5.2 <strong>Datenbank</strong>-Updates . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128<br />

5.3 <strong>Datenbank</strong>-Anfragen . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130<br />

5.3.1 Einführung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130<br />

5.3.2 Zur Syntax von SELECT . . . . . . . . . . . . . . . . . . . . . . 131<br />

5.3.3 Exkurs in die Relationenalgebra . . . . . . . . . . . . . . . . . 134<br />

5.3.4 Semantik von SELECT am Beispiel von RA-Ausdrücken . . . . . 135<br />

5.3.5 Verb<strong>und</strong>-Operatoren in SQL . . . . . . . . . . . . . . . . . . . 137<br />

5.4 Beispiele für SQL-Anfragen . . . . . . . . . . . . . . . . . . . . . . . . 140<br />

5.4.1 Selektionen <strong>und</strong> Projektionen . . . . . . . . . . . . . . . . . . . 141<br />

Gottfried Vossen, <strong>Datenmodelle</strong>, <strong><strong>Datenbank</strong>sprachen</strong> <strong>und</strong> <strong>Datenbank</strong>managementsysteme.<br />

ISBN 978-3-486-27574-2. <strong>Oldenbourg</strong> Wissenschaftsverlag München 2008.


Inhalt vii<br />

5.4.2 Verb<strong>und</strong>anfragen . . . . . . . . . . . . . . . . . . . . . . . . . . 142<br />

5.4.3 Aggregatfunktionen <strong>und</strong> Unteranfragen . . . . . . . . . . . . . 144<br />

5.4.4 Abschließende Bemerkungen . . . . . . . . . . . . . . . . . . . 146<br />

5.5 Rekursive Anfragen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148<br />

5.6 Bibliographische Hinweise <strong>und</strong> Ergänzungen . . . . . . . . . . . . . . . 149<br />

5.7 Übungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149<br />

5.8 Anhang: Beispieltabellen der Fallstudie Medienhandel . . . . . . . . . 153<br />

6 Integrität in relationalen <strong>Datenbank</strong>en 161<br />

6.1 Arten von Integritätsbedingungen . . . . . . . . . . . . . . . . . . . . . 161<br />

6.2 Funktionale Abhängigkeiten . . . . . . . . . . . . . . . . . . . . . . . . 165<br />

6.2.1 Definition. Implikation . . . . . . . . . . . . . . . . . . . . . . . 166<br />

6.2.2 Ableitung. Das Membership-Problem . . . . . . . . . . . . . . . 169<br />

6.2.3 Anwendungen des Membership-Algorithmus. Schlüssel . . . . . 175<br />

6.2.4 (Abhängigkeits-) Basen . . . . . . . . . . . . . . . . . . . . . . 178<br />

6.2.5 Allgemeine Implikation . . . . . . . . . . . . . . . . . . . . . . 181<br />

6.3 Inklusionsabhängigkeiten . . . . . . . . . . . . . . . . . . . . . . . . . . 183<br />

6.4 Allgemeine Assertions . . . . . . . . . . . . . . . . . . . . . . . . . . . 185<br />

6.5 Aktive Integritätskontrolle über Trigger . . . . . . . . . . . . . . . . . 188<br />

6.6 Bibliographische Hinweise, Ergänzungen, Querbezüge . . . . . . . . . . 193<br />

6.7 Übungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198<br />

7 Relationale Sprachen: Relationenalgebra, Kalküle, Datalog 201<br />

7.1 Die Relationenalgebra . . . . . . . . . . . . . . . . . . . . . . . . . . . 201<br />

7.1.1 Relationale Operationen <strong>und</strong> ihre Rechenregeln . . . . . . . . . 202<br />

7.1.2 Ausdrücke der Relationenalgebra . . . . . . . . . . . . . . . . . 208<br />

7.1.3 Eigenschaften der Relationenalgebra . . . . . . . . . . . . . . . 210<br />

7.1.4 Algebraische Optimierung . . . . . . . . . . . . . . . . . . . . . 212<br />

7.2 Relationenkalküle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214<br />

7.2.1 Der Relationen-Tupelkalkül . . . . . . . . . . . . . . . . . . . . 215<br />

7.2.2 Der Relationen-Domainkalkül . . . . . . . . . . . . . . . . . . . 220<br />

7.3 View-Updates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221<br />

7.4 Gr<strong>und</strong>lagen von Datalog . . . . . . . . . . . . . . . . . . . . . . . . . . 226<br />

7.4.1 Motivationen . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226<br />

7.4.2 Logik als Anfragesprache . . . . . . . . . . . . . . . . . . . . . 228<br />

7.4.3 Intensionale <strong>und</strong> extensionale <strong>Datenbank</strong>en . . . . . . . . . . . 229<br />

7.4.4 Rekursion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230<br />

7.4.5 Integritätsbedingungen . . . . . . . . . . . . . . . . . . . . . . . 232<br />

7.4.6 Datalog-Programme <strong>und</strong> deren Interpretation . . . . . . . . . . 232<br />

7.4.7 Ausdruckskraft von Datalog . . . . . . . . . . . . . . . . . . . . 235<br />

7.5 Konzepte der Theorie von Anfragesprachen . . . . . . . . . . . . . . . 236<br />

7.5.1 Konjunktive Anfragen . . . . . . . . . . . . . . . . . . . . . . . 236<br />

7.5.2 Vollständigkeit von Anfragesprachen . . . . . . . . . . . . . . . 237<br />

7.5.3 Ausdruckskraft <strong>und</strong> Komplexität von Anfragesprachen . . . . . 239<br />

7.6 Bibliographische Hinweise <strong>und</strong> Ergänzungen . . . . . . . . . . . . . . . 243<br />

7.7 Übungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246<br />

Gottfried Vossen, <strong>Datenmodelle</strong>, <strong><strong>Datenbank</strong>sprachen</strong> <strong>und</strong> <strong>Datenbank</strong>managementsysteme.<br />

ISBN 978-3-486-27574-2. <strong>Oldenbourg</strong> Wissenschaftsverlag München 2008.


viii Inhalt<br />

8 Qualitätsorientierter <strong>Datenbank</strong>entwurf 251<br />

8.1 Universalrelationen <strong>und</strong> Update-Anomalien . . . . . . . . . . . . . . . 251<br />

8.2 Zweite, dritte <strong>und</strong> Boyce-Codd-Normalform . . . . . . . . . . . . . . . 253<br />

8.3 Dekomposition <strong>und</strong> Synthese . . . . . . . . . . . . . . . . . . . . . . . 259<br />

8.4 Mehrwertige <strong>und</strong> Verb<strong>und</strong>-Abhängigkeiten . . . . . . . . . . . . . . . . 269<br />

8.5 Vierte <strong>und</strong> fünfte Normalform . . . . . . . . . . . . . . . . . . . . . . . 273<br />

8.6 Bibliographische Hinweise <strong>und</strong> Ergänzungen . . . . . . . . . . . . . . . 275<br />

8.7 Übungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277<br />

III Moderne Konzepte:<br />

Objekt-Basierung <strong>und</strong> XML-Dokumente 279<br />

9 Objekt-relationale <strong>Datenbank</strong>en 281<br />

9.1 Evolution von <strong>Datenmodelle</strong>n . . . . . . . . . . . . . . . . . . . . . . . 282<br />

9.1.1 Grenzen relationaler <strong>Datenmodelle</strong> . . . . . . . . . . . . . . . . 282<br />

9.1.2 Höhere <strong>Datenmodelle</strong> . . . . . . . . . . . . . . . . . . . . . . . 283<br />

9.1.3 Daten-, Funktions- <strong>und</strong> Prozessentwurf . . . . . . . . . . . . . 285<br />

9.2 Objekt-Orientierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288<br />

9.2.1 Das Paradigma . . . . . . . . . . . . . . . . . . . . . . . . . . . 288<br />

9.2.2 Objekt-Orientierung <strong>und</strong> <strong>Datenbank</strong>en . . . . . . . . . . . . . . 292<br />

9.2.3 Unterscheidung von Typen <strong>und</strong> Klassen . . . . . . . . . . . . . 295<br />

9.2.4 Objekt-Orientierung im relationalen Datenmodell . . . . . . . . 299<br />

9.3 <strong>Datenbank</strong>modellierung mit der UML . . . . . . . . . . . . . . . . . . 301<br />

9.3.1 Klassen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303<br />

9.3.2 Assoziationen . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303<br />

9.3.3 Aggregationen <strong>und</strong> Kompositionen . . . . . . . . . . . . . . . . 305<br />

9.3.4 Generalisierung <strong>und</strong> Spezialisierung . . . . . . . . . . . . . . . 305<br />

9.3.5 Weitere Modellierungsmöglichkeiten . . . . . . . . . . . . . . . 306<br />

9.3.6 Fallstudie Medienhandel . . . . . . . . . . . . . . . . . . . . . . 307<br />

9.4 Objekt-relationale Definitionskonzepte in SQL . . . . . . . . . . . . . . 310<br />

9.4.1 Basisdatentypen <strong>und</strong> Typkonstruktoren . . . . . . . . . . . . . 310<br />

9.4.2 Benutzerdefinierte Typen <strong>und</strong> Typhierarchien . . . . . . . . . . 312<br />

9.4.3 Tabellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315<br />

9.5 Fallstudie Medienhandel . . . . . . . . . . . . . . . . . . . . . . . . . . 317<br />

9.6 SQL-Anfragen an objekt-relationale <strong>Datenbank</strong>en . . . . . . . . . . . . 321<br />

9.7 Bibliographische Hinweise <strong>und</strong> Ergänzungen . . . . . . . . . . . . . . . 326<br />

9.8 Übungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 327<br />

9.9 Anhang: Beispieltabellen der Fallstudie Medienhandel . . . . . . . . . 330<br />

10 Einführung in XML 337<br />

10.1 Elemente, Tags <strong>und</strong> Attribute . . . . . . . . . . . . . . . . . . . . . . . 338<br />

10.2 Validierung von XML-Dokumenten: DTDs <strong>und</strong> XML Schema . . . . . 345<br />

10.3 Normalisierungsaspekte . . . . . . . . . . . . . . . . . . . . . . . . . . 349<br />

10.4 Verarbeitung von XML-Dokumenten . . . . . . . . . . . . . . . . . . . 351<br />

10.4.1 XPath . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 352<br />

10.4.2 XSLT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 355<br />

10.5 Bibliographische Hinweise <strong>und</strong> Ergänzungen . . . . . . . . . . . . . . . 363<br />

Gottfried Vossen, <strong>Datenmodelle</strong>, <strong><strong>Datenbank</strong>sprachen</strong> <strong>und</strong> <strong>Datenbank</strong>managementsysteme.<br />

ISBN 978-3-486-27574-2. <strong>Oldenbourg</strong> Wissenschaftsverlag München 2008.


Inhalt ix<br />

10.6 Übungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 364<br />

10.7 Anhang: XML-Spezifikationen für die Fallstudie Medienhandel . . . . 365<br />

10.7.1 Document Type Definition . . . . . . . . . . . . . . . . . . . . 365<br />

10.7.2 XML Schema Definition . . . . . . . . . . . . . . . . . . . . . . 367<br />

11 SQL <strong>und</strong> Programmiersprachen 375<br />

11.1 Web-Anbindung von <strong>Datenbank</strong>en . . . . . . . . . . . . . . . . . . . . 376<br />

11.1.1 Gr<strong>und</strong>legendes . . . . . . . . . . . . . . . . . . . . . . . . . . . 376<br />

11.1.2 Scripting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 378<br />

11.1.3 MySQL-Anbindung per PHP . . . . . . . . . . . . . . . . . . . 380<br />

11.2 Eingebettetes SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 386<br />

11.2.1 Arten der Einbettung . . . . . . . . . . . . . . . . . . . . . . . 386<br />

11.2.2 JDBC <strong>und</strong> SQLJ . . . . . . . . . . . . . . . . . . . . . . . . . . 388<br />

11.3 Bibliographische Hinweise <strong>und</strong> Ergänzungen . . . . . . . . . . . . . . . 394<br />

11.4 Übungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 394<br />

12 XQuery <strong>und</strong> SQL/XML 397<br />

12.1 XQuery . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 397<br />

12.1.1 Ausdrücke . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 398<br />

12.1.2 FLWOR-Ausdrücke . . . . . . . . . . . . . . . . . . . . . . . . 400<br />

12.1.3 Funktionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 407<br />

12.1.4 Update-Operationen . . . . . . . . . . . . . . . . . . . . . . . . 408<br />

12.2 SQL/XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 409<br />

12.2.1 XML-Datentypen . . . . . . . . . . . . . . . . . . . . . . . . . . 411<br />

12.2.2 Publikations-Funktionen . . . . . . . . . . . . . . . . . . . . . . 413<br />

12.2.3 XQuery-Funktionen . . . . . . . . . . . . . . . . . . . . . . . . 416<br />

12.3 SQL/XML-Unterstüzung in IBM DB2 V9 . . . . . . . . . . . . . . . . 418<br />

12.3.1 Speicherung von XML-Dateien . . . . . . . . . . . . . . . . . . 420<br />

12.3.2 Anfragen mit SQL/XML . . . . . . . . . . . . . . . . . . . . . 422<br />

12.3.3 Anfragen mit XQuery . . . . . . . . . . . . . . . . . . . . . . . 424<br />

12.3.4 Generierung von XML- oder HTML-Strukturen . . . . . . . . . 424<br />

12.4 Bibliographische Hinweise <strong>und</strong> Ergänzungen . . . . . . . . . . . . . . . 425<br />

12.5 Übungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 426<br />

IV Datenintegration <strong>und</strong> ihre Anwendungen 435<br />

13 Architekturkonzepte für <strong>Datenbank</strong>systeme 437<br />

13.1 Das Client/Server-Konzept . . . . . . . . . . . . . . . . . . . . . . . . 438<br />

13.1.1 Anfrageserver . . . . . . . . . . . . . . . . . . . . . . . . . . . . 440<br />

13.1.2 Objekt- <strong>und</strong> Seitenserver . . . . . . . . . . . . . . . . . . . . . 442<br />

13.2 Verteilte <strong>Datenbank</strong>systeme . . . . . . . . . . . . . . . . . . . . . . . . 444<br />

13.2.1 Vor- <strong>und</strong> Nachteile . . . . . . . . . . . . . . . . . . . . . . . . . 444<br />

13.2.2 Klassifikationen . . . . . . . . . . . . . . . . . . . . . . . . . . . 446<br />

13.2.3 Homogene Verteilung . . . . . . . . . . . . . . . . . . . . . . . 448<br />

13.2.4 Heterogene Verteilung <strong>und</strong> Föderation . . . . . . . . . . . . . . 451<br />

13.3 Parallele <strong>Datenbank</strong>systeme . . . . . . . . . . . . . . . . . . . . . . . . 454<br />

13.4 Bibliographische Hinweise <strong>und</strong> Ergänzungen . . . . . . . . . . . . . . . 458<br />

Gottfried Vossen, <strong>Datenmodelle</strong>, <strong><strong>Datenbank</strong>sprachen</strong> <strong>und</strong> <strong>Datenbank</strong>managementsysteme.<br />

ISBN 978-3-486-27574-2. <strong>Oldenbourg</strong> Wissenschaftsverlag München 2008.


x Inhalt<br />

13.5 Übungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 459<br />

14 Datenintegration 461<br />

14.1 Einführung. Architekturkonzepte . . . . . . . . . . . . . . . . . . . . . 461<br />

14.2 Übersetzer, Integratoren <strong>und</strong> Koordinatoren . . . . . . . . . . . . . . . 463<br />

14.3 Integration mittels logischer Sichten . . . . . . . . . . . . . . . . . . . 467<br />

14.4 Verteilte Objekte <strong>und</strong> Web Services . . . . . . . . . . . . . . . . . . . 473<br />

14.5 Bibliographische Hinweise <strong>und</strong> Ergänzungen . . . . . . . . . . . . . . . 476<br />

14.6 Übungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 478<br />

15 Data Warehouses (Datenlager) <strong>und</strong> OLAP 479<br />

15.1 Gr<strong>und</strong>lagen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 479<br />

15.1.1 Anwendungen <strong>und</strong> Architektur von Datenlagern . . . . . . . . 481<br />

15.1.2 Der ETL-Prozess . . . . . . . . . . . . . . . . . . . . . . . . . . 484<br />

15.1.3 Daten-Bereinigung zur Erzielung von Datenqualität . . . . . . 485<br />

15.2 Mehrdimensionale <strong>Datenmodelle</strong> . . . . . . . . . . . . . . . . . . . . . 486<br />

15.2.1 Fakten, Maße <strong>und</strong> Dimensionen . . . . . . . . . . . . . . . . . . 486<br />

15.2.2 Sternschemata <strong>und</strong> Varianten . . . . . . . . . . . . . . . . . . . 488<br />

15.2.3 Effiziente Speicherung von Faktentabellen mittels Bitmaps . . . 490<br />

15.3 Qualitätsorientierter Schemaentwurf für Datenlager . . . . . . . . . . . 493<br />

15.3.1 Der Entwurfsprozess . . . . . . . . . . . . . . . . . . . . . . . . 494<br />

15.3.2 Qualitätskriterien . . . . . . . . . . . . . . . . . . . . . . . . . . 497<br />

15.3.3 Summierbarkeit <strong>und</strong> Normalformen . . . . . . . . . . . . . . . 497<br />

15.3.4 Selbstwartbarkeit . . . . . . . . . . . . . . . . . . . . . . . . . . 499<br />

15.4 Gr<strong>und</strong>lagen des OLAP . . . . . . . . . . . . . . . . . . . . . . . . . . . 502<br />

15.4.1 Datenwürfel <strong>und</strong> OLAP-Operatoren . . . . . . . . . . . . . . . 503<br />

15.4.2 Von Vereinigungs- zu Würfel-Anfragen . . . . . . . . . . . . . . 506<br />

15.4.3 SQL Roll-Up . . . . . . . . . . . . . . . . . . . . . . . . . . . . 510<br />

15.4.4 SQL Cube . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 513<br />

15.4.5 SQL Grouping Sets . . . . . . . . . . . . . . . . . . . . . . . . . 516<br />

15.5 Bibliographische Hinweise <strong>und</strong> Ergänzungen . . . . . . . . . . . . . . . 517<br />

15.6 Übungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 518<br />

16 Gr<strong>und</strong>lagen des Data Mining 523<br />

16.1 Einführung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 524<br />

16.2 Klassifikation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 527<br />

16.3 Cluster-Bildung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 529<br />

16.4 Assoziationsanalyse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 532<br />

16.4.1 Häufige Mengen <strong>und</strong> Assoziationsregeln . . . . . . . . . . . . . 532<br />

16.4.2 Der Apriori-Algorithmus . . . . . . . . . . . . . . . . . . . . . . 535<br />

16.4.3 Verbesserungspotenziale beim Apriori-Algorithmus . . . . . . . 537<br />

16.4.4 Alternativen zum Apriori-Algorithmus . . . . . . . . . . . . . . 539<br />

16.4.5 Interessantheitsmaße . . . . . . . . . . . . . . . . . . . . . . . . 543<br />

16.5 Sequenzanalyse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 544<br />

16.6 Web-Mining . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 548<br />

16.6.1 Web-Struktur-Mining . . . . . . . . . . . . . . . . . . . . . . . 548<br />

16.6.2 Web-Inhalts-Mining . . . . . . . . . . . . . . . . . . . . . . . . 551<br />

16.6.3 Web-Log-Mining . . . . . . . . . . . . . . . . . . . . . . . . . . 551<br />

Gottfried Vossen, <strong>Datenmodelle</strong>, <strong><strong>Datenbank</strong>sprachen</strong> <strong>und</strong> <strong>Datenbank</strong>managementsysteme.<br />

ISBN 978-3-486-27574-2. <strong>Oldenbourg</strong> Wissenschaftsverlag München 2008.


Inhalt xi<br />

16.7 Bibliographische Hinweise <strong>und</strong> Ergänzungen . . . . . . . . . . . . . . . 552<br />

16.8 Übungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 554<br />

V <strong>Datenbank</strong>systemtechnik 555<br />

17 Interne <strong>Datenbank</strong>- <strong>und</strong> Speicherorganisation 557<br />

17.1 Plattenspeicher . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 557<br />

17.1.1 Blöcke <strong>und</strong> Blockzugriffe . . . . . . . . . . . . . . . . . . . . . . 559<br />

17.1.2 RAID-Architekturen . . . . . . . . . . . . . . . . . . . . . . . . 560<br />

17.2 Pufferverwaltung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 563<br />

17.3 Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 564<br />

17.3.1 Sequentielle Files . . . . . . . . . . . . . . . . . . . . . . . . . . 565<br />

17.3.2 Effizienter Filezugriff durch Indexierung . . . . . . . . . . . . . 567<br />

17.4 Spezielle Indexstrukturen . . . . . . . . . . . . . . . . . . . . . . . . . 568<br />

17.4.1 ISAM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 568<br />

17.4.2 Baumstrukturen für eindimensionale Punktdaten . . . . . . . . 569<br />

17.4.3 Baumstrukturen für mehrdimensionale Punktdaten . . . . . . . 575<br />

17.4.4 Hash-Organisationsformen . . . . . . . . . . . . . . . . . . . . . 581<br />

17.5 Beispiel: Speicherorganisation bei DB2 . . . . . . . . . . . . . . . . . . 584<br />

17.6 Speicherung <strong>und</strong> Indexierung von XML-Dokumenten . . . . . . . . . . 587<br />

17.6.1 Speicherungsoptionen . . . . . . . . . . . . . . . . . . . . . . . 587<br />

17.6.2 Indexierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 588<br />

17.7 Bibliographische Hinweise <strong>und</strong> Ergänzungen . . . . . . . . . . . . . . . 593<br />

17.8 Übungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 595<br />

18 Verarbeitung <strong>und</strong> Optimierung von Anfragen 597<br />

18.1 Anfrageverarbeitung im Überblick . . . . . . . . . . . . . . . . . . . . 598<br />

18.2 Anfrage-Optimierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . 600<br />

18.2.1 Ziele <strong>und</strong> Ansätze . . . . . . . . . . . . . . . . . . . . . . . . . 600<br />

18.2.2 High-Level-Optimierung . . . . . . . . . . . . . . . . . . . . . . 601<br />

18.2.3 Low-Level-Optimierung . . . . . . . . . . . . . . . . . . . . . . 606<br />

18.3 Implementierungstechniken für den Verb<strong>und</strong> . . . . . . . . . . . . . . . 607<br />

18.3.1 Nested-Loop-Join . . . . . . . . . . . . . . . . . . . . . . . . . . 608<br />

18.3.2 Sort-Merge-Join . . . . . . . . . . . . . . . . . . . . . . . . . . 608<br />

18.3.3 Hash-Join . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 609<br />

18.4 Spezielle QEP-Parameter . . . . . . . . . . . . . . . . . . . . . . . . . 612<br />

18.5 Anfrage-Prozessoren . . . . . . . . . . . . . . . . . . . . . . . . . . . . 615<br />

18.6 Bibliographische Hinweise <strong>und</strong> Ergänzungen . . . . . . . . . . . . . . . 617<br />

18.7 Übungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 618<br />

19 Physischer <strong>Datenbank</strong>entwurf <strong>und</strong> Tuning 621<br />

19.1 Gr<strong>und</strong>lagen des physischen <strong>Datenbank</strong>entwurfs . . . . . . . . . . . . . 621<br />

19.2 Fragmentierung <strong>und</strong> Replikation bei Datenverteilung . . . . . . . . . . 624<br />

19.3 <strong>Datenbank</strong>-Tuning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 626<br />

19.3.1 Gr<strong>und</strong>legende Prinzipien . . . . . . . . . . . . . . . . . . . . . . 627<br />

19.3.2 Tuning von Indexen . . . . . . . . . . . . . . . . . . . . . . . . 629<br />

19.3.3 Tuning in relationalen Systemen . . . . . . . . . . . . . . . . . 629<br />

Gottfried Vossen, <strong>Datenmodelle</strong>, <strong><strong>Datenbank</strong>sprachen</strong> <strong>und</strong> <strong>Datenbank</strong>managementsysteme.<br />

ISBN 978-3-486-27574-2. <strong>Oldenbourg</strong> Wissenschaftsverlag München 2008.


xii Inhalt<br />

19.4 <strong>Datenbank</strong>-Benchmarks . . . . . . . . . . . . . . . . . . . . . . . . . . 630<br />

19.5 Bibliographische Hinweise <strong>und</strong> Ergänzungen . . . . . . . . . . . . . . . 633<br />

19.6 Übungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 634<br />

20 Transaktionen <strong>und</strong> Serialisierbarkeit 637<br />

20.1 Das Transaktionskonzept . . . . . . . . . . . . . . . . . . . . . . . . . 638<br />

20.2 Beispiele für Synchronisationsprobleme . . . . . . . . . . . . . . . . . . 641<br />

20.3 Das ACID-Prinzip . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 643<br />

20.4 Das Read-Write-Modell für Transaktionen . . . . . . . . . . . . . . . . 644<br />

20.5 Serialisierbarkeit von Schedules . . . . . . . . . . . . . . . . . . . . . . 647<br />

20.5.1 Schedules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 647<br />

20.5.2 View-Serialisierbarkeit . . . . . . . . . . . . . . . . . . . . . . . 651<br />

20.5.3 Konflikt-Serialisierbarkeit . . . . . . . . . . . . . . . . . . . . . 652<br />

20.5.4 Commit-Serialisierbarkeit . . . . . . . . . . . . . . . . . . . . . 657<br />

20.6 Fehlersicherheit von Schedules . . . . . . . . . . . . . . . . . . . . . . . 659<br />

20.6.1 Motivation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 659<br />

20.6.2 Rücksetzbarkeit . . . . . . . . . . . . . . . . . . . . . . . . . . . 660<br />

20.6.3 Vermeidung kaskadierender Aborts . . . . . . . . . . . . . . . . 661<br />

20.6.4 Striktheit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 662<br />

20.7 Korrektheit von Schedules . . . . . . . . . . . . . . . . . . . . . . . . . 663<br />

20.8 Bibliographische Hinweise <strong>und</strong> Ergänzungen . . . . . . . . . . . . . . . 663<br />

20.9 Übungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 664<br />

21 Concurrency Control 667<br />

21.1 Überlegungen zum Scheduler-Entwurf . . . . . . . . . . . . . . . . . . 667<br />

21.2 Sperrende Scheduler . . . . . . . . . . . . . . . . . . . . . . . . . . . . 670<br />

21.2.1 Einführung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 670<br />

21.2.2 Das 2-Phasen-Sperrprotokoll . . . . . . . . . . . . . . . . . . . 672<br />

21.2.3 Varianten des 2-Phasen-Sperrprotokolls . . . . . . . . . . . . . 677<br />

21.2.4 Das MGL-Protokoll . . . . . . . . . . . . . . . . . . . . . . . . 679<br />

21.2.5 Das TL-Protokoll . . . . . . . . . . . . . . . . . . . . . . . . . . 682<br />

21.2.6 Tuning in Gegenwart sperrender Scheduler . . . . . . . . . . . 684<br />

21.3 Nicht sperrendes Timestamp-Ordering . . . . . . . . . . . . . . . . . . 689<br />

21.4 Concurrency Control auf höherer Abstraktionsebene . . . . . . . . . . 690<br />

21.5 Bibliographische Hinweise <strong>und</strong> Ergänzungen . . . . . . . . . . . . . . . 694<br />

21.6 Übungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 695<br />

22 Gr<strong>und</strong>lagen der Crash Recovery 697<br />

22.1 Einführung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 697<br />

22.2 Organisation eines Data-Managers . . . . . . . . . . . . . . . . . . . . 699<br />

22.3 Der Recovery-Manager . . . . . . . . . . . . . . . . . . . . . . . . . . . 701<br />

22.4 Ein Undo/Redo-Protokoll . . . . . . . . . . . . . . . . . . . . . . . . . 705<br />

22.5 Alternativen zum Undo/Redo-Protokoll . . . . . . . . . . . . . . . . . 707<br />

22.6 Recovery-Tuning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 708<br />

22.7 Bibliographische Hinweise . . . . . . . . . . . . . . . . . . . . . . . . . 709<br />

22.8 Übungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 709<br />

Gottfried Vossen, <strong>Datenmodelle</strong>, <strong><strong>Datenbank</strong>sprachen</strong> <strong>und</strong> <strong>Datenbank</strong>managementsysteme.<br />

ISBN 978-3-486-27574-2. <strong>Oldenbourg</strong> Wissenschaftsverlag München 2008.


Inhalt xiii<br />

23 Verteilte Transaktionsverarbeitung 711<br />

23.1 Homogene Verteilung . . . . . . . . . . . . . . . . . . . . . . . . . . . . 711<br />

23.1.1 Verteilte Transaktionen <strong>und</strong> Schedules . . . . . . . . . . . . . . 711<br />

23.1.2 Verteiltes Concurrency Control . . . . . . . . . . . . . . . . . . 715<br />

23.1.3 Verteilte Recovery-Protokolle . . . . . . . . . . . . . . . . . . . 720<br />

23.1.4 Transaktionen auf replikativen <strong>Datenbank</strong>en . . . . . . . . . . . 728<br />

23.2 Heterogene Verteilung. System-Föderationen . . . . . . . . . . . . . . 733<br />

23.2.1 Einführung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 734<br />

23.2.2 Ein MDBS-Modell . . . . . . . . . . . . . . . . . . . . . . . . . 734<br />

23.2.3 Transaktionen <strong>und</strong> Schedules in einem MDBS . . . . . . . . . . 736<br />

23.2.4 Globale Serialisierbarkeit . . . . . . . . . . . . . . . . . . . . . 739<br />

23.2.5 Gewährleistung globaler Serialisierbarkeit . . . . . . . . . . . . 742<br />

23.3 Bibliographische Hinweise . . . . . . . . . . . . . . . . . . . . . . . . . 745<br />

23.4 Übungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 746<br />

VI Neuere Entwicklungen 749<br />

24 Ausblicke 751<br />

24.1 Temporale <strong>Datenbank</strong>en . . . . . . . . . . . . . . . . . . . . . . . . . . 751<br />

24.2 Probabilistische <strong>Datenbank</strong>en . . . . . . . . . . . . . . . . . . . . . . . 755<br />

24.3 Räumliche Daten <strong>und</strong> GIS . . . . . . . . . . . . . . . . . . . . . . . . . 757<br />

24.4 Datenströme (Data Streams) . . . . . . . . . . . . . . . . . . . . . . . 760<br />

24.5 Data Provenance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 762<br />

24.6 Column Stores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 764<br />

24.7 Bibliographische Hinweise <strong>und</strong> Ergänzungen . . . . . . . . . . . . . . . 764<br />

Literaturverzeichnis 767<br />

Index 808<br />

Gottfried Vossen, <strong>Datenmodelle</strong>, <strong><strong>Datenbank</strong>sprachen</strong> <strong>und</strong> <strong>Datenbank</strong>managementsysteme.<br />

ISBN 978-3-486-27574-2. <strong>Oldenbourg</strong> Wissenschaftsverlag München 2008.


Kapitel 5<br />

Gr<strong>und</strong>lagen von SQL<br />

In diesem Kapitel behandeln wir einführend <strong>Datenbank</strong>-Updates <strong>und</strong> -Anfragen mit<br />

der relationalen <strong>Datenbank</strong>sprache SQL, auf deren Datendefinitionsmöglichkeiten wir<br />

einführend bereits im vorigen Kapitel eingegangen sind. Im Unterschied zu den später<br />

behandelten formaleren Sprachen für das Relationenmodell (insbesondere Relationenalgebra<br />

<strong>und</strong> Relationenkalküle) handelt es sich bei SQL um eine Sprache, welche von<br />

vielen DBMS-Entwicklern implementiert <strong>und</strong> bereits vor längerer Zeit standardisiert<br />

wurde, so dass sie in kommerziell verfügbaren sowie in Open-Source-DBMS heute<br />

durchgehend verwendet wird. Es sei bereits vorab darauf hingewiesen, dass unsere<br />

Darstellung keinen Anspruch auf Vollständigkeit erhebt, allerdings um eine Auswahl<br />

des Sprachstandards bemüht ist, welche dem Leser einen tieferen Einstieg in dieses<br />

Thema leicht machen sollte.<br />

5.1 SQL von 1980 bis 2003<br />

Die Entwicklung der Sprache SQL wurde zunächst ausschließlich von IBM betrieben<br />

<strong>und</strong> bereits zu Beginn der 70er Jahre (im Rahmen des System/R-Projekts) begonnen,<br />

nachdem die strategische Bedeutung des relationalen Modells für <strong>Datenbank</strong>systeme<br />

erkannt worden war. SQL war zu dieser Zeit ein Akronym für Structured English<br />

Query Language oder kurz SEQUEL. Das ab 1981 kommerziell verfügbare System<br />

SQL/Data System von IBM war das erste System, welches diese Sprache ” öffentlich“<br />

bereitstellte; von IBM wurde SQL in der Folgezeit für alle anderen <strong>Datenbank</strong>systeme<br />

(z.B. DB2 <strong>und</strong> QMF) übernommen.<br />

Zu Beginn der 80er Jahre erkannte zunächst das American National Standards<br />

Institute (ANSI) die Bedeutung von SQL <strong>und</strong> begann mit einer Standardisierung dieser<br />

Sprache. 1986 wurde der erste Standard unter dem Namen SQL1 bzw. SQL86 von<br />

der International Standards Organization (ISO) verabschiedet. Erste Ergänzungen<br />

erschienen 1989 im so genannten Addendum-1; der ab dieser Zeit gültige Standard ist<br />

auch unter der Bezeichnung SQL89 bekannt. Weitere Ergänzungen <strong>und</strong> Modifikationen<br />

wurden 1992 im Rahmen von SQL2 bzw. SQL92 festgeschrieben. 1995 wurde das<br />

Call-Level Interface (SQL/CLI) hinzugefügt; technische Korrekturen am Standard<br />

wurden 1994 <strong>und</strong> 1996 vorgenommen. Weitere Ergänzungen (insbesondere Persistent<br />

Stored Modules, kurz SQL/PSM) erfolgen etwas später.<br />

Gottfried Vossen, <strong>Datenmodelle</strong>, <strong><strong>Datenbank</strong>sprachen</strong> <strong>und</strong> <strong>Datenbank</strong>managementsysteme.<br />

ISBN 978-3-486-27574-2. <strong>Oldenbourg</strong> Wissenschaftsverlag München 2008.


128 Teil II: Klassische Konzepte: ER- <strong>und</strong> relationales Datenmodell. SQL<br />

Das Akronym SQL steht heute für Standard Query Language. Ähnlich wie<br />

bei vergleichbaren Entwicklungen im Bereich von Programmiersprachen (etwa Fortran)<br />

ist dieser Sprachstandard weiter gehender Entwicklung unterworfen; derzeit am<br />

häufigsten verwendet werden SQL:1999, welches erstmals objekt-relationale <strong>Datenbank</strong>-Konzepte<br />

enthielt, <strong>und</strong> SQL:2003, mit welchem XML Einzug in die relationale<br />

Welt gehalten hat. Kritisch ist bereits an dieser Stelle anzumerken, dass die Standardisierung<br />

von SQL de facto zu spät begonnen wurde, so dass praktisch kein relationales<br />

System den Standard in ” Reinform“ realisiert. Neben der zeitlichen Differenz zwischen<br />

der Verabschiedung des Standards <strong>und</strong> dem Verfügbarwerden relationaler Produkte<br />

liegt dies z.B. daran, dass SQL2 gegenüber SQL1 nicht nur eine Erweiterung darstellt,<br />

sondern es wurden auch Konzepte (wie z.B. die Möglichkeit des Einrichtens<br />

bzw. Löschens von Indexen) wieder entfernt; in einigen Implementierungen wurden<br />

diese jedoch beibehalten. Die Spezifikation von SQL:1999 wurde ebenfalls mehrfach<br />

geändert. Andererseits sind die im Einzelfall vorliegenden Abweichungen vom Standard<br />

teilweise implementierungsabhängig <strong>und</strong> daher für unsere Betrachtungen unerheblich.<br />

Nachdem wir im letzten Kapitel bereits SQL-Funktionalität im Hinblick auf die<br />

Deklaration relationaler <strong>Datenbank</strong>en betrachtet haben, wollen wir in den folgenden<br />

Abschnitten die zentrale Funktionalität von SQL im Hinblick auf die Manipulation<br />

relationaler <strong>Datenbank</strong>en beschreiben; hierbei stützen wir uns auf den Standard, ohne<br />

dies jeweils gesondert zu erwähnen. Abweichungen gehen im Einzelfall aus den jeweiligen<br />

Herstellerunterlagen hervor. Der SQL-Standard bezieht sich generell auf drei<br />

Ebenen:<br />

• Die Ebene der DDL<br />

(mit Kommandos wie create table oder drop table),<br />

• die Ebene der DML<br />

(mit Kommandos wie select, insert, delete oder update),<br />

• die Ebene der Programmiersprachen-Einbettung <strong>und</strong> -Anbindung<br />

(mit Kommandos wie declare cursor, open, fetch oder close).<br />

Von diesen Ebenen betrachten wir hier die mittlere der DML, wobei wir bei auf<br />

Weiteres eine interaktive Benutzung der Sprache unterstellen. Hinsichtlich der Syntax-<br />

Darstellung gelten die bereits in Kapitel 4 genannten Konventionen.<br />

5.2 <strong>Datenbank</strong>-Updates<br />

Nach Einrichtung von Basistabellen wird man zunächst Daten in diese Tabellen eintragen<br />

wollen; dazu steht das INSERT-Kommando zur Verfügung, welches in der einfachsten<br />

Form folgende Gestalt hat:<br />

INSERT INTO table-name<br />

[ ( list-of-column-names ) ]<br />

VALUES ( data-items )<br />

Über dieses Kommando wird ein (neues) Tupel in eine Basistabelle eingefügt. Die<br />

Werte dieses Tupels werden als ” data-items“ durch Kommata getrennt. Falls nur für<br />

Gottfried Vossen, <strong>Datenmodelle</strong>, <strong><strong>Datenbank</strong>sprachen</strong> <strong>und</strong> <strong>Datenbank</strong>managementsysteme.<br />

ISBN 978-3-486-27574-2. <strong>Oldenbourg</strong> Wissenschaftsverlag München 2008.


5 Gr<strong>und</strong>lagen von SQL 129<br />

bestimmte, aber nicht für alle Attribute neue Werte eingetragen werden sollen, so<br />

sind die betreffenden Spalten explizit anzugeben; in den nicht angegebenen Spalten<br />

wird das Tupel vom System mit Null- oder gegebenenfalls Default-Werten aufgefüllt.<br />

Zur Illustration Möglichkeiten von SQL, Anfragen <strong>und</strong> Updates zu formulieren,<br />

verwenden wir auch in diesem Kapitel die aus den Kapiteln 3 <strong>und</strong> 4 bekannte<br />

<strong>Datenbank</strong> des Medienhändlers, wobei wir unterstellen, dass diese über die im letzten<br />

Kapitel angegebenen CREATE TABLE-Kommandos bereits angelegt wurde.<br />

Durch ein CREATE TABLE-Kommando wird eine (noch leere) Tabelle des betreffenden<br />

Namens angelegt, mit welcher man sofort arbeiten kann; SQL-Implementierungen<br />

kennen also keine spezielle ” Definitionsphase“ einer <strong>Datenbank</strong>. DDL- <strong>und</strong> DML-<br />

Kommandos dürfen in beliebiger (sinnvoller) Reihenfolge verwendet werden.<br />

Beispiel 5.1<br />

Die nachfolgend gezeigte Folge von Kommandos trägt in eine leere Tabelle Medienartikel<br />

die ersten fünf Tupel der im letzten Abschnitt dieses Kapitels in Abbildung<br />

5.10 gezeigte Tabelle ein (vgl. Abschnitt 5.8):<br />

insert into Medienartikel<br />

values(’0001-E’, ’LaTeX in 21 Tagen’, 2004);<br />

insert into Medienartikel<br />

values(’0003-E’, ’Harry Potter III’, 1997);<br />

insert into Medienartikel<br />

values(’0005-B’, ’Der Schwarm’, 2004);<br />

insert into Medienartikel<br />

values(’0006-B’, ’LaTeX kurz <strong>und</strong> gut’, 2004);<br />

insert into Medienartikel<br />

values(’0007-B’, ’Simplify your life’, 2004);<br />

In den Beispielen dieses Kapitels beziehen wir uns durchgehend auf die Tabellen,<br />

die im Stil des letzten Beispiels erzeugt wurden <strong>und</strong> im Anhang zu diesem Kapitel<br />

(Abschnitt 5.8) zusammengefasst sind.<br />

Eine andere Form des INSERT-Kommandos ist die der gleichzeitigen Einfügung<br />

mehrerer Tupel durch<br />

INSERT INTO table-name select-expression<br />

Schließlich sind bei Definition entsprechender Domains möglicherweise Default-Werte<br />

(Voreinstellungen) festgelegt, so dass dann auch das Kommando<br />

INSERT INTO table-name DEFAULT VALUES<br />

Werte in eine Tabelle einfügt.<br />

Weitere Formen des Einfügens ergeben sich im Zusammenhang mit dem Einfügen<br />

in Sichten bzw. in typisierte Tabellen. Bei Sichten ist wesentlich, dass diese<br />

änderbar sind; auf typisierte Tabellen <strong>und</strong> deren Behandlung gehen wir in einem<br />

späteren Kapitel ein.<br />

Gottfried Vossen, <strong>Datenmodelle</strong>, <strong><strong>Datenbank</strong>sprachen</strong> <strong>und</strong> <strong>Datenbank</strong>managementsysteme.<br />

ISBN 978-3-486-27574-2. <strong>Oldenbourg</strong> Wissenschaftsverlag München 2008.<br />


130 Teil II: Klassische Konzepte: ER- <strong>und</strong> relationales Datenmodell. SQL<br />

Die folgenden Kommandos zum Löschen bzw. Ändern eines Tupels oder all<br />

solcher Tupel, die einer bestimmten Bedingung genügen, sind im Wesentlichen selbsterklärend;<br />

auf die Form einer möglichen condition gehen wir weiter unten im Zusammenhang<br />

mit Anfragen ein:<br />

DELETE FROM table-name<br />

[ WHERE condition ]<br />

UPDATE table-name<br />

SET column-name-1 = expression-1<br />

[, column-name-2 = expression-2 ] ...<br />

[ WHERE condition ]<br />

5.3 <strong>Datenbank</strong>-Anfragen<br />

In diesem Abschnitt widmen wir uns den Anfragen, die allein unter Verwendung der<br />

klassischen relationalen Ausdrucksmittel von SQL formuliert werden können.<br />

5.3.1 Einführung<br />

SQL kennt nur ein einziges Kommando zur Formulierung von Anfragen an eine <strong>Datenbank</strong>:<br />

das SELECT-Kommando bzw. den select-expression. Wir weisen bereits<br />

an dieser Stelle darauf hin, dass die Bezeichnung SELECT nichts mit der relationalen<br />

Operation der Selektion (vgl. Kapitel 7) zu tun hat, wenngleich über ein SELECT-<br />

Kommando bei geeignetem Aufbau auch selektiert werden kann; das Schlüsselwort<br />

SELECT müsste eigentlich ” PROJECT“ lauten.<br />

Das SELECT-Kommando kennt viele Optionen zum Aufbau einfacher oder komplexer<br />

Anfragen, von denen wir in diesem Abschnitt nur auf einige gr<strong>und</strong>legende eingehen<br />

wollen. Es kommt uns vor allem darauf an, hier <strong>und</strong> im weiteren Verlauf unserer<br />

Betrachtungen die Ausdrucksmöglichkeiten des SELECT-Kommandos mit denen der<br />

Relationenalgebra vergleichen zu können. Dazu sei jedoch bemerkt, dass es sich bei<br />

SQL bzw. bei der Teilsprache von SQL, mit welcher Anfragen formuliert werden, nicht<br />

um eine rein algebraische Sprache handelt, wenngleich eine Reihe von algebraischen<br />

Operatoren in dieser Sprache vorkommen. Ursprünglich war der Anfrageteil von SQL<br />

sogar orientiert an einer Einschränkung des so genannten relationalen Tupelkalküls,<br />

worauf wir später eingehen werden. Außerdem verfügt das SELECT-Kommando z.B.<br />

über arithmetische Funktionen, Funktionen auf Datums- <strong>und</strong> Zeitwerten sowie Funktionen<br />

auf Zeichenketten; mittlerweile ist sogar die Verwendung Benutzer definierter<br />

Funktionen, Prozeduren <strong>und</strong> Methoden möglich.<br />

Das SELECT-Kommando hat zunächst die sehr einfache Gr<strong>und</strong>struktur<br />

SELECT Attribute ( ” Ausgabe“)<br />

FROM Relation(en) ( ” Eingabe“)<br />

WHERE Bedingung<br />

In der Sprache der noch zu behandelnden Relationenalgebra wird damit ein SPJ-<br />

Ausdruck (kurz für Selektion-Projektion-Join) spezifiziert. Die Zuordnung wird wie<br />

Gottfried Vossen, <strong>Datenmodelle</strong>, <strong><strong>Datenbank</strong>sprachen</strong> <strong>und</strong> <strong>Datenbank</strong>managementsysteme.<br />

ISBN 978-3-486-27574-2. <strong>Oldenbourg</strong> Wissenschaftsverlag München 2008.


5 Gr<strong>und</strong>lagen von SQL 131<br />

folgt vorgenommen: Die SELECT-Klausel gibt an, auf welche Attribute projiziert werden<br />

soll. Die FROM-Klausel gibt an, aus welchen Relationen diese Attribute zu entnehmen<br />

sind. Ist ein Join zu bilden, so sind an dieser Stelle mindestens zwei Ausdrücke<br />

anzugeben, die zu Relationen ausgewertet werden können; dies können Relationennamen<br />

sein, die sich jedoch nicht notwendig auf verschiedene Tabellen beziehen müssen.<br />

Die (optionale) WHERE-Klausel gibt Selektionsbedingungen an bzw. im Falle eines Joins<br />

außerdem Bedingungen, nach welchen der Verb<strong>und</strong> zu bilden ist.<br />

Die Auswertung eines SELECT-Kommandos der oben angegebenen Form hat<br />

zu berücksichtigen, dass SQL-Tabellen im Unterschied zu Relationen im Relationenmodell<br />

Multimengen ( ” Bags“) sein dürfen, d.h. doppelte Tupel enthalten können; will<br />

man ein mehrfaches Vorkommen von Tupeln in einem Anfrageergebnis ausschließen, so<br />

sind dazu besondere Vorkehrungen erforderlich (wie z.B. die Definition von Schlüsseln<br />

oder die Verwendung von DISTINCT in der SELECT-Klausel einer Anfrage).<br />

Unter diesen ” Nebenbedingungen“ verläuft die Auswertung eines SELECT-Kommandos<br />

gr<strong>und</strong>sätzlich in folgenden drei Schritten:<br />

(1) Es wird ein Kartesisches Produkt der Tabellen gebildet, die sich durch eine<br />

Auswertung der Ausdrücke in der FROM-Klausel ergeben (de facto eine ” Konkatenation“<br />

dieser Operanden, vgl. unten);<br />

(2) auf dem in Schritt (1) erzeugten Zwischenergebnis werden die in der WHERE-<br />

Klausel angegebenen Selektionsbedingungen ausgewertet (sofern unter diesen<br />

Verb<strong>und</strong>-Bedingungen vorkommen, entsteht aus der zunächst erzeugten Konkatenation<br />

jetzt das Ergebnis eines Theta-Verb<strong>und</strong>es);<br />

(3) das Zwischenergebnis aus Schritt (2) wird auf die in der SELECT-Klausel angegebenen<br />

Attribute projiziert.<br />

5.3.2 Zur Syntax von SELECT<br />

Wir beschreiben als Nächstes die Gr<strong>und</strong>züge der SELECT-Syntax genauer, wobei wir<br />

nach wie vor keinen Anspruch auf Vollständigkeit erheben. Wir beschreiben die Syntax<br />

nur geringfügig umfangreicher, als wir sie für nachfolgende Beschreibungen benötigen.<br />

Wir gehen hier anders vor als bei der Beschreibung der Update-Kommandos: Bis auf<br />

wenige Ausnahmen werden in der Syntax verwendete (kleingeschriebene) Abkürzungen<br />

bzw. Bezeichnungen in der Reihenfolge ihres Auftretens (einer ” Depth-First-<br />

Strategie“ folgend) soweit wie nötig detailliert. Wir verwenden unten nicht notwendig<br />

die gleichen Termini wie im offiziellen Standard-Dokument.<br />

select-expression ::=<br />

SELECT [ ALL | DISTINCT ] list-of-select-items<br />

FROM list-of-table-references<br />

[ WHERE condition ]<br />

[ GROUP BY list-of-column-names ]<br />

[ HAVING condition ]<br />

select-item ::=<br />

{ * | expression [ AS ]column-name }<br />

Gottfried Vossen, <strong>Datenmodelle</strong>, <strong><strong>Datenbank</strong>sprachen</strong> <strong>und</strong> <strong>Datenbank</strong>managementsysteme.<br />

ISBN 978-3-486-27574-2. <strong>Oldenbourg</strong> Wissenschaftsverlag München 2008.


132 Teil II: Klassische Konzepte: ER- <strong>und</strong> relationales Datenmodell. SQL<br />

expression ::=<br />

term | expression { + | − } term<br />

term ::=<br />

factor | term { ∗ | / } factor<br />

factor ::=<br />

[ + | − ] primary<br />

primary ::=<br />

column-name | scalar-function | aggregate-function<br />

| ( expression )<br />

aggregate-function ::=<br />

COUNT(∗) | { AVG | MAX | MIN | SUM | COUNT }<br />

( [ ALL | DISTINCT ] expression )<br />

table-reference ::=<br />

table-name [ [ AS ] range-variable<br />

[ ( list-of-column-names ) ] ]<br />

| ( table-expression ) [ AS ] range-variable<br />

[ ( list-of-column-names ) ]<br />

| join-table-expression<br />

table-expression ::=<br />

join-table-expression | nonjoin-table-expression<br />

join-table-expression ::=<br />

table-reference [ NATURAL ] [ join-type ] JOIN table-reference<br />

[ ON condition<br />

| USING ( list-of-column-names ) ]<br />

| table-reference CROSS JOIN table-reference<br />

| ( join-table-expression )<br />

join-type ::=<br />

INNER | { LEFT | RIGHT | FULL } [ OUTER ] | UNION<br />

nonjoin-table-expression ::=<br />

select-expression<br />

| select-expression { UNION | EXCEPT | INTERSECT }<br />

select-expression<br />

condition ::=<br />

condition-term | condition OR condition-term<br />

condition-term ::=<br />

condition-factor | condition-term AND condition-factor<br />

Gottfried Vossen, <strong>Datenmodelle</strong>, <strong><strong>Datenbank</strong>sprachen</strong> <strong>und</strong> <strong>Datenbank</strong>managementsysteme.<br />

ISBN 978-3-486-27574-2. <strong>Oldenbourg</strong> Wissenschaftsverlag München 2008.


5 Gr<strong>und</strong>lagen von SQL 133<br />

condition-factor ::=<br />

[ NOT ] condition-test<br />

condition-test ::=<br />

condition-primary [ IS [ NOT ] { TRUE | FALSE | UNKNOWN } ]<br />

condition-primary ::=<br />

simple-condition | ( condition )<br />

simple-condition ::=<br />

compare-cond | between-cond | like-cond | in-cond<br />

| exists-cond | unique-cond<br />

compare-cond ::=<br />

expression IS [ NOT ] NULL<br />

| expression { = | < | | >= | }<br />

{ expression | ( select-expression ) }<br />

between-cond ::=<br />

expression [ NOT ] BETWEEN expression AND expression<br />

like-cond ::=<br />

column-name [ NOT ] LIKE ’ string ’<br />

in-cond ::=<br />

expression [ NOT ] IN<br />

{ ( select-expression | table-expression ) }<br />

exists-cond ::=<br />

EXISTS ( table-expression )<br />

unique-cond ::=<br />

UNIQUE ( table-expression )<br />

Zu dieser Beschreibung ist Verschiedenes anzumerken:<br />

(1) SQL unterscheidet zahlreiche Formen von expressions (Ausdrücke), was aus<br />

der oben angegebenen Syntax nur unvollständig erkennbar ist; insbesondere<br />

werden numerische, character-basierte, Bitstring- sowie Date/Time-Ausdrücke<br />

unterschieden.<br />

(2) Auf die Beschreibung von scalar functions (Skalarfunktionen) haben wir<br />

oben verzichtet; hierunter versteht man z.B. Funktionen auf Zeichenketten (wie<br />

Teilstring-Suche oder Konkatenation) oder auf Datums- bzw. Zeit-Werten (wie<br />

Extraktion der Jahreszahl aus einem Datum).<br />

(3) Auch die Syntax von table-references sowie table-expressions ist de facto<br />

erheblich komplexer; das Gleiche gilt für den Aufbau von conditions.<br />

Gottfried Vossen, <strong>Datenmodelle</strong>, <strong><strong>Datenbank</strong>sprachen</strong> <strong>und</strong> <strong>Datenbank</strong>managementsysteme.<br />

ISBN 978-3-486-27574-2. <strong>Oldenbourg</strong> Wissenschaftsverlag München 2008.


134 Teil II: Klassische Konzepte: ER- <strong>und</strong> relationales Datenmodell. SQL<br />

(4) Wie der oben angegebene Ausschnitt der SELECT-Syntax bereits zeigt, kennt<br />

SQL verschiedene Verb<strong>und</strong>-Operatoren.<br />

5.3.3 Exkurs in die Relationenalgebra<br />

Wenngleich wir die Relationenalgebra erst in Kapitel 7 ausführlich behandeln werden,<br />

sei bereits an dieser Stelle ein kurzer Exkurs gestattet. Die Gr<strong>und</strong>lagen der Semantik<br />

von rein relationalem SQL lassen sich nämlich anhand weniger Operationen der<br />

Relationenalgebra präzisieren. Wir gehen daher an dieser Stelle bereits kurz auf Projektion,<br />

Selektion, Umbenennung, Vereinigung, Differenz <strong>und</strong> natürlichen Verb<strong>und</strong><br />

ein. Man beachte, dass wir hier die in Kapitel 4 eingeführten Formalia für Relationen<br />

<strong>und</strong> Relationenschemata verwenden.<br />

Definition 5.1<br />

Sei R = (X, .) ein Relationenschema, r ∈ Rel(X) <strong>und</strong> Y ⊆ X:<br />

(i) πY (r) := {µ[Y ] | µ ∈ r}<br />

heißt Projektion von r auf Y . Dabei bezeichnet µ[Y ] die Einschränkung des<br />

Tupels µ auf Y (µ[Y ] ∈ Tup(Y )).<br />

(ii) Es sei A ∈ X, a ∈ dom(A) <strong>und</strong> Θ ∈ {, ≥, =, �=}:<br />

σAΘa(r) := {µ ∈ r | µ(A)Θa}<br />

heißt Selektion von r bzgl. AΘa.<br />

(Für den Fall Θ ∈ {, ≥} sei dabei unterstellt, dass dom(A) geordnet ist.)<br />

(iii) Es seien A, B ∈ X mit dom(A) = dom(B) <strong>und</strong> Θ ∈ {, ≥, =, �=}:<br />

σAΘB(r) := {µ ∈ r | µ(A)Θµ(B)}<br />

heißt Selektion von r bzgl. AΘB.<br />

(Für den Fall Θ ∈ {, ≥} sei dabei dom(A) bzw. dom(B) ebenfalls geordnet.)<br />

Beispiele für diese Operationen sowie die nachfolgend eingeführten oder beschriebenen<br />

betrachten wir weiter unten direkt in SQL-Notation. Intuitiv entfernt eine Projektion<br />

die angegebenen Attribute aus der Operandenrelation <strong>und</strong> sodann eventuell existierende<br />

doppelte Tupel; eine Projektion liefert also eine Ergebnisrelation mit einem<br />

gegenüber der Ausgangsrelation veränderten Schema. Eine Selektion dagegen lässt<br />

das Schema des Operanden unverändert <strong>und</strong> selektiert lediglich jene Tupel, welche<br />

die Selektionsbedingung(en) erfüllen.<br />

Die Operation der Umbenennung erlaubt ein einfaches Verändern eines Attributnames<br />

im Ergebnis einer Anfrageoperation, was wir hier noch nicht formal definieren;<br />

wir schreiben A/C, wenn A in C umbenannt werden soll. Ebenso verzichten<br />

wir an dieser Stelle noch auf die formale Definition von Vereinigung <strong>und</strong> Differenz als<br />

klassische Mengenoperationen. Beide Operationen verlangen von ihren beiden Operationen<br />

jeweils gleiche Schemata (was gegebenenfalls durch Umbenennung erreichbar<br />

ist) <strong>und</strong> wirken dann, wie aus der Mengenlehre bekannt: Eine Vereinigung der Form<br />

R ∪ S liefert die Menge aller Tupel, die in einem der beiden Operanden (R oder S)<br />

vorkommen; eine Differenz der Form R − S sondert die Tupel aus R aus, die nicht in<br />

S vorkommen.<br />

Gottfried Vossen, <strong>Datenmodelle</strong>, <strong><strong>Datenbank</strong>sprachen</strong> <strong>und</strong> <strong>Datenbank</strong>managementsysteme.<br />

ISBN 978-3-486-27574-2. <strong>Oldenbourg</strong> Wissenschaftsverlag München 2008.


5 Gr<strong>und</strong>lagen von SQL 135<br />

Von besonderer Bedeutung ist im Zusammenhang mit Anfragen die Operation<br />

des Verb<strong>und</strong>es, die wir als Nächstes einführen:<br />

Definition 5.2<br />

Es seien X1, . . . , Xn Attributmengen <strong>und</strong> ri ∈ Rel(Xi) für 1 ≤ i ≤ n:<br />

⊲⊳ n i=1 ri := {µ ∈ Tup(∪ n i=1Xi) | (∀ i, 1 ≤ i ≤ n) µ[Xi] ∈ ri}<br />

heißt der (natürliche) Verb<strong>und</strong> ( ” natural join“) von r1, . . . , rn.<br />

Für den häufigen Fall n = 2 ergibt sich aus der letzten Definition unmittelbar:<br />

r1 ⊲⊳ r2 = {µ ∈ Tup(X1X2) | µ[X1] ∈ r1 ∧ µ[X2] ∈ r2}<br />

Der natürliche Verb<strong>und</strong> verbindet also zwei oder mehr Relationen zu einer neuen<br />

Relation, welche als Attributmenge die Vereinigung der Attributmengen aller Operanden<br />

besitzt; die Bildung der Verbindung erfolgt jeweils über gemeinsame Attribute<br />

<strong>und</strong> über gleiche Werte für diese. Auf diese beiden letztgenannten Bedingungen kann<br />

man auch verzichten; dann spricht man allgemeiner von einem Theta-Verb<strong>und</strong>. Ein<br />

Theta-Verb<strong>und</strong> sondert nicht notwendig doppelt vorkommende Attribute aus; er kann<br />

ferner unterschiedliche (aber typgleiche) Attribute aus den Operandentabellen über<br />

beliebige Bedingungen verbinden.<br />

Es sei bemerkt, dass für alle diese Operationen eine Reihe von Rechenregeln gelten,<br />

welche Gr<strong>und</strong>lage für eine Optimierung von relationenalgebraischen Ausdrücken<br />

sind. Hierauf werden wir in Kapitel 7 eingehen; für unsere Zwecke in diesem Kapitel<br />

soll es ausreichen, die Existenz dieser Operationen zu kennen.<br />

5.3.4 Semantik von SELECT am Beispiel von RA-Ausdrücken<br />

Bevor wir den Gebrauch des SELECT-Kommandos bei der Formulierung von Anfragen<br />

am Beispiel der <strong>Datenbank</strong> des Medienhändlers erläutern, wollen wir kurz den<br />

Zusammenhang zwischen dem oben eingeführten Ausschnitt der Relationenalgebra<br />

<strong>und</strong> SELECT-Ausdrücken herstellen. Insbesondere geben wir als Nächstes SELECT-<br />

Formulierungen für die gerade vorgestellten algebraischen Operationen an:<br />

(1) Projektion:<br />

Sei R = (X, .) ein Relationenschema mit {A1, . . . , Ak} ⊆ X. Die Projektion<br />

π {A1...Ak}(R) wird ausgedrückt durch<br />

SELECT DISTINCT A1, ... , Ak FROM R<br />

(2) Selektion:<br />

Sei R = (X, .) ein Relationenschema mit A, B ∈ X. Die A = a-Selektion<br />

σA=a(R) wird ausgedrückt durch<br />

SELECT DISTINCT * FROM R WHERE A = a<br />

Analog wird die A = B-Selektion σA=B(R) ausgedrückt durch<br />

SELECT DISTINCT * FROM R WHERE A = B<br />

Gottfried Vossen, <strong>Datenmodelle</strong>, <strong><strong>Datenbank</strong>sprachen</strong> <strong>und</strong> <strong>Datenbank</strong>managementsysteme.<br />

ISBN 978-3-486-27574-2. <strong>Oldenbourg</strong> Wissenschaftsverlag München 2008.


136 Teil II: Klassische Konzepte: ER- <strong>und</strong> relationales Datenmodell. SQL<br />

Anstelle von ” =“ können auch andere (anwendbare) Vergleichsoperatoren verwendet<br />

werden.<br />

(3) Umbenennung:<br />

Sei R = (X, .) ein Relationenschema mit X = {A, B} (eine Verallgemeinerung<br />

auf mehr als zwei Attribute ist leicht möglich). Die Umbenennung von R bzgl.<br />

A/C wird ausgedrückt durch<br />

SELECT A AS C, B FROM R<br />

(4) Vereinigung:<br />

Seien R <strong>und</strong> S Relationenschemata mit gleicher Attributmenge. Dann wird die<br />

Vereinigung R ∪ S ausgedrückt durch<br />

SELECT DISTINCT * FROM R<br />

UNION SELECT DISTINCT * FROM S<br />

(5) Differenz:<br />

Seien R <strong>und</strong> S Relationenschemata mit gleicher Attributmenge. Dann wird die<br />

Differenz R − S ausgedrückt durch<br />

SELECT DISTINCT * FROM R<br />

EXCEPT SELECT DISTINCT * FROM S<br />

(6) Natürlicher Verb<strong>und</strong>:<br />

Sei R ein Relationenschema mit den Attributen A1, . . . , An, B1, . . . , Bm <strong>und</strong> S<br />

ein solches mit den Attributen B1, . . . , Bm, C1, . . . , Cl. Dann wird der natürliche<br />

Verb<strong>und</strong> R ⊲⊳ S explizit ausgedrückt durch<br />

SELECT DISTINCT A1, ..., Am, R.B1, ..., R.Bm, C1, ..., Cl<br />

FROM R, S<br />

WHERE R.B1 = S.B1 AND ... AND R.Bm = S.Bm<br />

In der SELECT-Klausel wird die Vereinigung der beiden Attributmengen explizit<br />

beschrieben, wobei es in diesem Fall unerheblich ist, ob man die gemeinsamen<br />

Attribute aus R oder aus S wählt. Da jedoch Namensgleichheiten zwischen<br />

Attributen aus verschiedenen Relationenschemata vorkommen, muss durch den<br />

Zusatz des Relationennamens (z.B. R.B1) eindeutig spezifiziert werden, welches<br />

Vorkommen des betreffenden Attributs gemeint ist. In der WHERE-Klausel wird<br />

die Überprüfung auf gleiche Werte für die gemeinsamen Attribute explizit <strong>und</strong><br />

vollständig gefordert. Eine einfachere Formulierung dieser Operation lautet:<br />

SELECT * FROM R NATURAL JOIN S<br />

Die oben gegebene Beschreibung der Simulation relationenalgebraischer Operationen<br />

in SQL reicht offensichtlich bereits aus, alle in der RA formulierbaren Anfragen in<br />

SQL auszudrücken.<br />

Gottfried Vossen, <strong>Datenmodelle</strong>, <strong><strong>Datenbank</strong>sprachen</strong> <strong>und</strong> <strong>Datenbank</strong>managementsysteme.<br />

ISBN 978-3-486-27574-2. <strong>Oldenbourg</strong> Wissenschaftsverlag München 2008.


5 Gr<strong>und</strong>lagen von SQL 137<br />

5.3.5 Verb<strong>und</strong>-Operatoren in SQL<br />

Bevor wir SQL-Anfragen weiter erläutern, führen wir zunächst einige weitere Operationen<br />

auf den Relationen einer <strong>Datenbank</strong> ein, wobei es uns wesentlich darauf<br />

ankommt, die unterschiedlichen Verb<strong>und</strong>-Operatoren präzise zu beschreiben:<br />

Definition 5.3<br />

Es sei r ∈ Rel(X), s ∈ Rel(Y ). Dann heißt<br />

r ∗ s := {µν | µ ∈ r ∧ ν ∈ s}<br />

die Konkatenation von r <strong>und</strong> s. (Dabei steht ” µν“ nicht für eine Verknüpfung von µ<br />

<strong>und</strong> ν als Funktionen, sondern für eine Hintereinanderschreibung der beiden Tupel.)<br />

Die Konkatenation bildet – in Analogie zur Konkatenation von Zeichenketten in der<br />

Theorie der formalen Sprachen – zu zwei gegebenen Tupeln ein neues durch Hintereinanderhängen<br />

der einzelnen Werte.<br />

Als erstes Beispiel betrachten wir folgende beiden Relationen r ∈ Rel(AB) <strong>und</strong><br />

s ∈ Rel(CD):<br />

Dann gilt:<br />

A B C D<br />

r : 0 0 s : 1 0<br />

1 1 0 1<br />

A B C D<br />

0 0 1 0<br />

r ∗ s : 0 0 0 1<br />

1 1 1 0<br />

1 1 0 1<br />

Das Konkatenationsergebnis enthält also Tupel über der disjunkten Vereinigung der<br />

Attributmengen der beiden Operanden. (Man beachte, dass eine Konkatenation formal<br />

nicht dasselbe Ergebnis liefert wie ein Kartesisches Produkt, da Letzteres auf<br />

eine Menge von geordneten Paaren führt, wobei die erste Komponente jeweils aus<br />

dem einen, die zweite aus dem anderen Operanden stammt.) Es folgt unmittelbar,<br />

dass eine Konkatenation nicht notwendig eine Relation (in dem aus Kapitel 4 bekannten<br />

Sinne) zum Ergebnis hat, da die Attributmenge des Resultats unter Umständen<br />

doppelte Elemente enthält <strong>und</strong> dann eine Multimenge ist.<br />

Als zweites Beispiel betrachten wir daher zwei Relationen r ∈ Rel(AB) <strong>und</strong> t ∈<br />

Rel(BC):<br />

Dann gilt:<br />

A B B C<br />

r : 0 0 t : 1 0<br />

1 1 0 1<br />

Gottfried Vossen, <strong>Datenmodelle</strong>, <strong><strong>Datenbank</strong>sprachen</strong> <strong>und</strong> <strong>Datenbank</strong>managementsysteme.<br />

ISBN 978-3-486-27574-2. <strong>Oldenbourg</strong> Wissenschaftsverlag München 2008.


138 Teil II: Klassische Konzepte: ER- <strong>und</strong> relationales Datenmodell. SQL<br />

A B B C<br />

0 0 1 0<br />

r ∗ t : 0 0 0 1<br />

1 1 1 0<br />

1 1 0 1<br />

Nur in dem Fall, dass X ∩ Y = ∅ gilt für r ∈ Rel(X) <strong>und</strong> t ∈ Rel(Y ), ist r ∗ t<br />

eine Relation in dem hier verwendeten Sinne (r ∗ t ∈ Rel(XY )). Im Hinblick auf die<br />

bereits informal angegebene Semantik eines SELECT-Kommandos sei ferner bemerkt,<br />

dass man in den gerade genannten Beispielen anstelle von Relationen auch Tabellen<br />

mit doppelten Zeilen verwenden kann, so dass sowohl das Format einer Tabelle als<br />

auch ihr Inhalt eine Multimenge sein kann.<br />

In SQL wird die oben beschriebene Unterscheidung zwischen einer Konkatenation<br />

<strong>und</strong> einem Kartesischen Produkt nicht gemacht, sondern diese beiden Operationen<br />

werden identifiziert. In beiden oben genannten Beispielen erhält man daher das<br />

Konkatenationsergebnis durch Bildung eines Produkts wie folgt:<br />

SELECT R.*, S.* FROM R, S<br />

Eine äquivalente Formulierung, welche die verwendete Operation explizit angibt (<strong>und</strong><br />

daher etwa zu Dokumentationszwecken sinnvoller ist), lautet:<br />

SELECT * FROM R CROSS JOIN S<br />

Ein CROSS JOIN liefert also nichts anderes als ein Kartesisches Produkt bzw., in formal<br />

korrekterer Sprechweise, eine Konkatenation.<br />

Mit Hilfe der Konkatenation können wir eine weitere oben bereits erwähnte<br />

Operation definieren, welche für die Formulierung von SELECT-Anfragen wesentlich<br />

ist:<br />

Definition 5.4<br />

Es sei r ∈ Rel(X), s ∈ Rel(Y ), A ∈ X, B ∈ Y , Θ ∈ {, ≥, =, �=}. Dann heißt<br />

r[AΘB]s := {µν ∈ r ∗ s | µ(A)Θν(B)}<br />

Θ-Join (sprich: Theta-Join) von r <strong>und</strong> s. (In dieser Definition sei µ ∈ r bzw. ν ∈ s<br />

wie in Definition 10.1.)<br />

Ist Θ speziell das Zeichen ” =“, so spricht man vom Equijoin von r <strong>und</strong> s.<br />

Als Beispiel betrachten wir zunächst die weiter oben angegebenen Relationen r ∈<br />

Rel(AB) <strong>und</strong> s ∈ Rel(CD). Dann gilt:<br />

A B C D<br />

r[B = C]s : 0 0 0 1<br />

1 1 1 0<br />

In SQL lautet die entsprechende Formulierung wie folgt:<br />

Gottfried Vossen, <strong>Datenmodelle</strong>, <strong><strong>Datenbank</strong>sprachen</strong> <strong>und</strong> <strong>Datenbank</strong>managementsysteme.<br />

ISBN 978-3-486-27574-2. <strong>Oldenbourg</strong> Wissenschaftsverlag München 2008.


5 Gr<strong>und</strong>lagen von SQL 139<br />

SELECT * FROM R, S WHERE R.B = S.C<br />

Eine alternative (<strong>und</strong> explizitere) Formulierung derselben Anfrage lautet:<br />

SELECT * FROM R JOIN S ON R.B = S.C<br />

Für r ∈ Rel(AB), s ∈ Rel(BC) wie oben angegeben gilt z.B.<br />

A B B C<br />

r[B < B]s : 0 0 1 0<br />

Die entsprechende SQL-Formulierung lautet:<br />

SELECT * FROM R, S WHERE R.B < S.B<br />

Offensichtlich gilt für r ∈ Rel(X) <strong>und</strong> s ∈ Rel(Y ) formal dann Folgendes: Ist X ∩Y =<br />

∅, so ist r ∗ s eine Relation (über XY ). Dann ist auch r[AΘB]s eine Relation (über<br />

XY mit A ∈ X, B ∈ Y ), <strong>und</strong> der Theta-Join von r <strong>und</strong> s kann wie folgt geschrieben<br />

werden:<br />

r[AΘB]s = σAΘB(r ∗ s)<br />

Der Theta-Join stellt offensichtlich eine Verallgemeinerung des natürlichen Verb<strong>und</strong>es<br />

dar; konkret ist ein natürlicher Verb<strong>und</strong> ein Equijoin, welcher über gleichbenannte<br />

Attribute gebildet wird (<strong>und</strong> bei welchem auf diese projiziert wird).<br />

SQL lässt als weitere Verallgemeinerung des natürlichen Verb<strong>und</strong>s zu, dass<br />

einige, aber nicht alle gemeinsamen Attribute auf gleiche Werte überprüft werden.<br />

Hat z.B. R die Attribute A, B <strong>und</strong> C, S die Attribute B, C <strong>und</strong> D, so ist es möglich,<br />

einen (verallgemeinerten) natürlichen Verb<strong>und</strong> nur über B (oder über C) zu bilden.<br />

Die entsprechende Formulierung lautet:<br />

SELECT * FROM R JOIN S USING (B)<br />

Der natürliche Verb<strong>und</strong> <strong>und</strong> seine gerade beschriebenen Verallgemeinerungen werden<br />

in der SQL-Terminologie auch als innere Joins bezeichnet. Im Unterschied dazu<br />

werden Verb<strong>und</strong>-Operationen als äußere Verbünde (outer joins) bezeichnet, falls<br />

Operanden-Tupel, welche die Verb<strong>und</strong>-Bedingung nicht erfüllen, im Ergebnis erhalten<br />

bleiben.<br />

Wir verzichten auf eine formale Definition des äußeren Verb<strong>und</strong>s <strong>und</strong> beschreiben<br />

hier nur exemplarisch seine in SQL vorgesehenen Erscheinungsformen. Man spricht<br />

von einem LEFT OUTER JOIN, falls alle Tupel des ” linken“ (ersten) Verb<strong>und</strong>-Operanden<br />

im Ergebnis erhalten bleiben. Als Beispiel betrachten wir die folgenden beiden Tabellen:<br />

Der SELECT-Ausdruck<br />

A B C D<br />

r : 1 0 s : 1 0<br />

2 1 0 1<br />

Gottfried Vossen, <strong>Datenmodelle</strong>, <strong><strong>Datenbank</strong>sprachen</strong> <strong>und</strong> <strong>Datenbank</strong>managementsysteme.<br />

ISBN 978-3-486-27574-2. <strong>Oldenbourg</strong> Wissenschaftsverlag München 2008.


140 Teil II: Klassische Konzepte: ER- <strong>und</strong> relationales Datenmodell. SQL<br />

SELECT * FROM R LEFT OUTER JOIN S ON R.A = S.C<br />

liefert dann das folgende Ergebnis:<br />

A B C D<br />

1 0 1 0<br />

2 1 ? ?<br />

(Hierbei bezeichnet ” ?“ den Nullwert mit der Bedeutung ” unbekannt“.) Entsprechend<br />

erhält ein RIGHT OUTER JOIN alle Tupel des ” rechten“ (zweiten) Operanden im Ergebnis.<br />

Im Beispiel der oben angegebenen Relationen liefert also z.B.<br />

SELECT * FROM R RIGHT OUTER JOIN S ON R.A = S.C<br />

das folgende Ergebnis:<br />

A B C D<br />

1 0 1 0<br />

? ? 0 1<br />

Schließlich stellt ein FULL OUTER JOIN (im Allgemeinen kurz auch als OUTER JOIN bezeichnet)<br />

eine Kombination von LEFT <strong>und</strong> RIGHT OUTER JOIN dar. Im obigen Beispiel<br />

liefert also z.B.<br />

SELECT * FROM R FULL OUTER JOIN S ON R.A = S.C<br />

das folgende Ergebnis:<br />

A B C D<br />

1 0 1 0<br />

2 1 ? ?<br />

? ? 0 1<br />

Abschließend sei bemerkt, dass die Anwendung dieser Operatoren nicht auf zwei Operanden<br />

beschränkt ist.<br />

5.4 Beispiele für SQL-Anfragen<br />

Wir beschreiben als Nächstes eine Reihe von Beispielen für die Verwendung des<br />

SELECT-Kommandos, wobei wir mit Selektionen <strong>und</strong> Projektionen beginnen <strong>und</strong> dann<br />

zu Verb<strong>und</strong>- sowie anderen Anfragen (Aggregationen, Gruppierungen, Unteranfragen)<br />

übergehen. Der aktuelle Inhalt der hier verwendeten Beispiel-<strong>Datenbank</strong> ist im letzten<br />

Abschnitt dieses Kapitel zusammengestellt; ein Blick hierauf vor Durcharbeitung<br />

der nachfolgenden Beispiele wird empfohlen.<br />

Gottfried Vossen, <strong>Datenmodelle</strong>, <strong><strong>Datenbank</strong>sprachen</strong> <strong>und</strong> <strong>Datenbank</strong>managementsysteme.<br />

ISBN 978-3-486-27574-2. <strong>Oldenbourg</strong> Wissenschaftsverlag München 2008.

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!