Inhaltsverzeichnis
Über den Autor 7Widmung 7Danksagung des Autors 7Über die Übersetzer 7
Einführung 23Über dieses Buch 23Wer sollte dieses Buch lesen? 24Symbole, die in diesem Buch verwendet werden 24Wie es weitergeht 24
Teil IGrundbegriffe 25
Kapitel 1Grundlagen relationaler Datenbanken 27
Die Übersicht über Dinge behalten 27Was ist eine Datenbank? 28Datenbankgröße und -komplexität 29Was ist ein Datenbankverwaltungssystem? 29Flache Dateien 31Datenbankmodelle 32
Das relationale Modell 32Komponenten einer relationalen Datenbank 33Was sind Relationen? 33Views oder Sichten 34Schemata, Domänen und Einschränkungen 36Das Objektmodell fordert das relationale Modell heraus 37Das objektrelationale Modell 38
Überlegungen zum Datenbankentwurf 38
Kapitel 2SQL-Grundlagen 39
Was SQL ist und was es nicht ist 39Ein (sehr) kurzer historischer Überblick 41SQL-Anweisungen 42Reservierte Wörter 42
11
Datentypen 44Genaue Zahlen 44Annähernd genaue Zahlen 46Zeichenketten 48Binäre Zeichenketten 50Boolesche Werte 51Datums- und Zeitwerte 51Intervalle 52Der Datentyp XML 53Der Datentyp ROW 55Datentypen für Auflistungen 56REF-Typen 58Benutzerdefinierte Typen 58Zusammenfassung der Datentypen 61
Nullwerte 63Einschränkungen 63SQL in einem Client/Server-System benutzen 64
Der Server 64Der Client 65
SQL mit dem Internet oder einem Intranet benutzen 66
Kapitel 3Die Komponenten von SQL 67
Data Definition Language 67Wenn »Mach’ es einfach!« kein guter Rat ist 68Tabellen erstellen 69Sichten 71Tabellen in Schemata zusammenfassen 76Ordnung durch Kataloge 77Die DDL-Anweisungen kennenlernen 78
Data Manipulation Language 80Ausdrücke 80Prädikate 83Logische Verknüpfungen 84Mengenfunktionen 85Unterabfragen 86
DCL (Data Control Language) 86Transaktionen 87Benutzer und Rechte 88Einschränkungen der referenziellen Integrität können Ihre Daten gefährden 90Die Verantwortung für die Sicherheit delegieren 92
SQL für Dummies
12
Teil IIDatenbanken mit SQL erstellen 93
Kapitel 4Eine einfache Datenbankstruktur erstellen und verwalten 95
Eine einfache Datenbank mit einem RAD-Werkzeug erstellen 96Entscheiden, was in die Datenbank gehört 96Eine Datenbanktabelle erstellen 97Die Struktur einer Tabelle ändern 104Einen Index definieren 106Eine Tabelle löschen 108
Das gleiche Beispiel mit der DDL von SQL erstellen 109SQL mit Microsoft Access nutzen 109Eine Tabelle erstellen 112Einen Index erstellen 116Die Tabellenstruktur ändern 117Eine Tabelle löschen 117Einen Index löschen 118
Überlegungen zur Portierbarkeit 118
Kapitel 5Eine relationale Datenbank mit mehreren Tabellen erstellen 119
Die Datenbank entwerfen 119Schritt 1: Objekte definieren 120Schritt 2: Tabellen und Spalten identifizieren 120Schritt 3: Tabellen definieren 121Domänen, Zeichensätze, Sortierfolgen und Übersetzungstabellen 124Schlüssel für den schnellen Zugriff 125Primärschlüssel 126
Mit Indizes arbeiten 128Was ist eigentlich ein Index? 128Wozu ist ein Index gut? 129Einen Index verwalten 130
Die Datenintegrität bewahren 131Integrität von Entitäten 131Integrität von Domänen 132Referenzielle Integrität 133Und gerade als Sie dachten, alles wäre sicher . . . 136Potenzielle Problembereiche 137Einschränkungen 139
Inhaltsverzeichnis
13
Die Datenbank normalisieren 142Änderungsanomalien und Normalformen 142Erste Normalform 145Zweite Normalform 145Dritte Normalform 146Domain-Key-Normalform (DK/NF) 147Abnorme Formen 148
Teil IIIDaten speichern und abrufen 149
Kapitel 6Daten einer Datenbank bearbeiten 151
Daten abrufen 151Eine Sicht erstellen 152
FROM-Tabellen 153Mit einer Auswahlbedingung 154Mit einem geänderten Attribut 155
Sichten aktualisieren 156Neue Daten hinzufügen 156
Daten zeilenweise einfügen 157Daten nur in ausgewählte Spalten einfügen 158Zeilen blockweise in eine Tabelle einfügen 159
Vorhandene Daten aktualisieren 161Daten übertragen 164Überholte Daten löschen 166
Kapitel 7Temporale Daten verarbeiten 167
Zeiten und Perioden in SQL:2011 verstehen 167Mit Anwendungszeitperioden-Tabellen arbeiten 169
Primärschlüssel in Anwendungszeitperiode-Tabellen definieren 171Referenzielle Einschränkungen auf Anwendungszeitperiode-Tabellenanwenden 172Anwendungszeitperiode-Tabellen abfragen 173
Mit systemversionierten Tabellen arbeiten 174Primärschlüssel für systemversionierte Tabellen definieren 176Referenzielle Einschränkungen auf systemversionierte Tabellen anwenden 176Systemversionierte Tabellen abfragen 176
Noch mehr Daten mit bitemporalen Tabellen verwalten 177
SQL für Dummies
14
Kapitel 8Werte festlegen 179
Werte 179Zeilenwerte 179Literale 179Variablen 181Spezielle Variablen 183Spaltenreferenzen 183
Wertausdrücke 184String-Wertausdrücke 185Numerische Wertausdrücke 185Datums- und Zeit-Wertausdrücke 186Intervall-Wertausdrücke 186Bedingungs-Wertausdrücke 187
Funktionen 187Mit Mengenfunktionen summieren 187Wertfunktionen 190
Kapitel 9SQL-Wertausdrücke – fortgeschrittener Teil 203
CASE-Bedingungsausdrücke 203CASE mit Suchbedingungen verwenden 204CASE mit Werten verwenden 206Ein Sonderfall: CASE – NULLIF 208Ein weiterer Sonderfall: CASE – COALESCE 210
Umwandlungen von Datentypen mit CAST 210CAST in SQL verwenden 212CAST als Mittler zwischen SQL und Host-Sprachen 212
Datensatzwertausdrücke 213
Kapitel 10Daten zielsicher finden 215
Modifizierende Klauseln 215Die Klausel FROM 217Die Klausel WHERE 217
Vergleichsprädikate 219BETWEEN 219IN und NOT IN 221LIKE und NOT LIKE 222SIMILAR 223NULL 224ALL, SOME, ANY 225EXISTS 226
Inhaltsverzeichnis
15
UNIQUE 227DISTINCT 227OVERLAPS 228MATCH 229Regeln der referenziellen Integrität und das Prädikat MATCH 230
Logische Verknüpfungen 232AND 232OR 233NOT 233
Die Klausel GROUP BY 234HAVING 236ORDER BY 237Begrenzende FETCH-Funktion 238Ergebnismengen mit Fensterfunktionen erstellen 240
Ein Fenster mit NTILE in Buckets partionieren 241In einem Fenster navigieren 241Fensterfunktionen verschachteln 243
Gruppen von Zeilen auswerten 244
Kapitel 11Relationale Operatoren 245
UNION 245UNION ALL 247UNION CORRESPONDING 247
INTERSECT 248EXCEPT 250Verknüpfungsoperatoren 250
Die einfache Verknüpfung 251Gleichheitsverknüpfung – Equi-Join 252Kreuzverknüpfungen – Cross-Join 254Natürliche Verknüpfungen – Natural-Join 254Bedingte Verknüpfungen 255Spaltennamenverknüpfungen 255Innere Verknüpfungen – INNER JOIN 256Äußere Verknüpfungen – OUTER JOIN 257Vereinigungsverknüpfungen – Union Join 260
ON im Vergleich zu WHERE 266
Kapitel 12Mit verschachtelten Abfragen tief graben 267
Was Unterabfragen erledigen 268Verschachtelte Abfragen, die eine Zeilenmenge zurückgeben 269Verschachtelte Abfragen, die einen einzelnen Wert zurückgeben 272
SQL für Dummies
16
Die quantifizierenden Vergleichsoperatoren ALL, SOME und ANY 275Verschachtelte Abfragen als Existenztest 276Weitere korrelierte Unterabfragen 278Die Anweisungen UPDATE, DELETE und INSERT 281Änderungen per pipelined DML abrufen 284
Kapitel 13Rekursive Abfragen 285
Was ist Rekursion? 285Houston, wir haben ein Problem 287Scheitern ist keine Option 287
Was ist eine rekursive Abfrage? 288Wo kann ich eine rekursive Abfrage anwenden? 288
Abfragen auf die harte Tour erstellen 290Zeit mit einer rekursiven Abfrage sparen 291
Wo könnte ich eine rekursive Abfrage sonst noch einsetzen? 293
Teil IVKontrollmechanismen 295
Kapitel 14Datenbanken schützen 297
Die Datenkontrollsprache von SQL 297Zugriffsebenen für Benutzer 298
Der Datenbankadministrator 298Besitzer von Datenbankobjekten 299Die Öffentlichkeit 299
Rechte an Benutzer vergeben 300Rollen 301Daten einfügen 302Daten lesen 302Tabellendaten ändern 303Tabellenzeilen löschen 303Verknüpfte Tabellen referenzieren 304Domänen, Zeichensätze, Sortierreihenfolgen und Übersetzungstabellen 304Das Ausführen von SQL-Anweisungen bewirken 306
Rechte über Ebenen hinweg einräumen 307Das Recht zur Vergabe von Rechten übertragen 308Rechte entziehen 309Mit GRANT und REVOKE zusammen Zeit und Aufwand sparen 310
Inhaltsverzeichnis
17
Kapitel 15Daten schützen 313
Gefahren für die Datenintegrität 313Plattforminstabilität 314Geräteausfall 314Gleichzeitiger Datenzugriff 315
Die Gefahr der Verfälschung von Daten reduzieren 317Mit SQL-Transaktionen arbeiten 318Die Standardtransaktion 319Isolierungsebenen 320Anweisungen mit implizitem Transaktionsbeginn 322SET TRANSACTION 322COMMIT 323ROLLBACK 323Datenbankobjekte sperren 324Datensicherung 324Speicherpunkte und Untertransaktionen 325
Einschränkungen innerhalb von Transaktionen 326
Kapitel 16SQL in Anwendungen benutzen 331
SQL in einer Anwendung 331Nach dem Sternchen Ausschau halten 332Stärken und Schwächen von SQL 332Stärken und Schwächen prozeduraler Sprachen 333Probleme bei der Kombination von SQL mit prozeduralen Sprachen 333
SQL in prozedurale Sprachen einbinden 334Eingebettetes SQL 334Die SQL-Modulsprache 337Objektorientierte RAD-Werkzeuge 339SQL mit Microsoft Access verwenden 340
Teil VSQL in der Praxis 343
Kapitel 17Datenzugriffe mit ODBC und JDBC 345
ODBC 345Die ODBC-Schnittstelle 346Die Komponenten von ODBC 346
ODBC in einer Client/Server-Umgebung 347
SQL für Dummies
18
ODBC und das Internet 348Server-Erweiterungen 349Client-Erweiterungen 349
ODBC und Intranets 350JDBC 351
Kapitel 18SQL und XML 353
Was XML mit SQL zu tun hat 353Der XML-Datentyp 354
Wann der XML-Datentyp verwendet werden sollte 354Wann der Datentyp XML nicht verwendet werden sollte 355
SQL in XML und XML in SQL konvertieren 356Zeichensätze konvertieren 356Bezeichner konvertieren 356Datentypen konvertieren 357Tabellen konvertieren 358Mit Nullwerten umgehen 358Das XML-Schema erzeugen 359
SQL-Funktionen, die mit XML-Daten arbeiten 360XMLDOCUMENT 360XMLELEMENT 360XMLFOREST 361XMLCONCAT 361XMLAGG 362XMLCOMMENT 363XMLPARSE 363XMLPI 363XMLQUERY 364XMLCAST 364
Prädikate 365DOCUMENT 365CONTENT 365XMLEXISTS 365VALID 365
XML-Daten in SQL-Tabellen umwandeln 366Nicht vordefinierte Datentypen in XML abbilden 368
Domänen 368Distinct UDT (Spezifischer benutzerdefinierter Datentyp) 369Row (Zeile) 369Array 370Multiset 371
Die Hochzeit von SQL und XML 372
Inhaltsverzeichnis
19
Teil VISQL für Fortgeschrittene 373
Kapitel 19Cursor 375
Einen Cursor deklarieren 376Der Abfrageausdruck 376Die Klausel ORDER BY 377Die Klausel FOR UPDATE 378Sensitivität 379Scrollbarkeit 380
Einen Cursor öffnen 380Daten aus einer einzelnen Zeile abrufen 382
Syntax 382Die Orientierung eines scrollbaren Cursors 383Cursor-Zeilen löschen oder ändern 383
Einen Cursor schließen 384
Kapitel 20Prozedurale Möglichkeiten mit dauerhaft gespeicherten Modulenschaffen 385
Zusammengesetzte Anweisungen 385Atomarität 386Variablen 387Cursor 388Zustand (Condition) 388Mit Zuständen umgehen 389Zustände, die nicht verarbeitet werden 391Zuweisung 392
Anweisungen zur Ablaufsteuerung 392IF . . . THEN . . . ELSE . . . END IF 392CASE . . . END CASE 393LOOP . . . ENDLOOP 394LEAVE 395WHILE . . . DO . . . END WHILE 395REPEAT . . . UNTIL . . . END REPEAT 396FOR . . . DO . . . END FOR 396ITERATE 396
Gespeicherte Prozeduren 397Gespeicherte Funktionen 399Rechte 399Gespeicherte Module 400
SQL für Dummies
20
Kapitel 21Fehlerbehandlung 403
SQLSTATE 403Die Klausel WHENEVER 405Diagnosebereiche 406
Der Kopf des Diagnosebereichs 406Der Detailbereich des Diagnosebereichs 407Beispiel für Verstöße gegen Einschränkungen 409Einer Tabelle Einschränkungen hinzufügen 410Die Informationen auswerten, die von SQLSTATE zurückgegeben werden 411
Ausnahmen handhaben 411
Kapitel 22Trigger 413
Einige Anwendungen von Triggern 413Einen Trigger erstellen 414Anweisungs- und Zeilen-Trigger 414Wenn ein Trigger ausgelöst wird 415Die getriggerte SQL-Anweisung 415Ein Beispiel für eine Trigger-Definition 416Eine Folge von Triggern auslösen 416Alte Werte und neue Werte referenzieren 417Mehrere Trigger für eine einzelne Tabelle auslösen 418
Teil VIIDer Top-Ten-Teil 419
Kapitel 23Zehn häufige Fehler 421
Annehmen, dass die Kunden wissen, was sie brauchen 421Den Umfang des Projekts ignorieren 422Nur technische Faktoren berücksichtigen 422Nicht um Feedback bitten 422Immer Ihre liebste Entwicklungsumgebung benutzen 422Immer Ihre liebste Systemarchitektur benutzen 423Datenbanktabellen unabhängig voneinander entwerfen 423Design-Reviews ignorieren 423Betatests überspringen 424Keine Dokumentation erstellen 424
Inhaltsverzeichnis
21
Kapitel 24Zehn Tipps für Abfragen 425
Prüfen Sie die Datenbankstruktur 425Testen Sie Abfragen mit einer Testdatenbank 426Prüfen Sie Verknüpfungsabfragen doppelt 426Prüfen Sie Abfragen mit einer Unterabfrage dreifach 426Daten mit GROUP BY summieren 426Beachten Sie die Einschränkungen der Klausel GROUP BY 427Benutzen Sie bei AND, OR und NOT Klammern 427Überwachen Sie Abfragerechte 427Sichern Sie Ihre Datenbanken regelmäßig 428Bauen Sie eine Fehlerbehandlung ein 428
AnhangSQL:2011 Reservierte Wörter 429
Stichwortverzeichnis 431
SQL für Dummies
22