Inhaltsverzeichnis

Alle Kapitel aufklappen
Alle Kapitel zuklappen
Materialien zum Buch
17
1 Grundlagen kennenlernen und verstehen
19
1.1 Die Tabelle als zentrales Element
19
1.1.1 Tabellen und ihre Struktur
20
1.2 Eine kleine Historie von SQL
21
1.3 Datenbanksysteme
22
1.4 SQL – ein Standard und seine Umsetzung
23
1.5 Zu diesem Buch
24
1.6 MySQL unter Windows installieren
26
1.7 Die MySQL-Übungsdatenbank anlegen
34
1.8 Eine erste Abfrage an die Datenbank senden
38
1.9 Kommentarfunktion
41
1.9.1 Kommentare in der Praxis nutzen
41
1.9.2 Übungen
43
2 Los geht’s: Die Grundfunktionen der Tabellenabfrage (SELECT)
45
2.1 Mit einer SELECT-Anweisung Tabellen abfragen
45
2.1.1 Die Tabelle »mitarbeiter«
45
2.1.2 Wie frage ich eine Tabelle ab? (SELECT ... FROM)
45
2.1.3 Spalten einer Tabelle abfragen
46
2.1.4 Alle Spalten einer Tabelle abfragen
47
2.1.5 Übungen
48
2.2 Zeilen in einer Abfrage mit WHERE filtern
49
2.2.1 SQL-Vergleichsoperatoren
50
2.2.2 Spaltenwerte auf Gleichheit prüfen
53
2.2.3 Spaltenwerte auf Ungleichheit prüfen
56
2.2.4 Spaltenwerte auf kleiner/gleich prüfen
58
2.2.5 Spaltenwerte auf größer/gleich prüfen
60
2.2.6 Bedingungen mit dem NOT-Operator verneinen
62
2.2.7 Spaltenwerte auf ein Intervall prüfen (BETWEEN)
64
2.2.8 Spaltenwerte auf ein Muster prüfen (LIKE)
69
2.2.9 Spaltenwerte auf Mengenzugehörigkeit prüfen
74
2.2.10 Fehlende Spaltenwerte (NULL-Value)
77
2.2.11 Spaltenwerte auf NULL prüfen
80
2.2.12 Spaltenwerte auf »ist nicht NULL« prüfen
81
2.2.13 Spaltenwerte mit Spaltenwerten vergleichen
82
2.2.14 Übungen
83
2.3 Filterbedingungen mit AND (NOT) und OR (NOT) logisch verknüpfen
88
2.3.1 Der logische Verknüpfungsoperator AND
88
2.3.2 SQL-Bedingungen mit dem logischen AND-Operator verknüpfen
90
2.3.3 Der logische Verknüpfungsoperator OR
92
2.3.4 SQL-Bedingungen mit dem logischen OR-Operator verknüpfen
93
2.3.5 Der logische Verknüpfungsoperator AND NOT
95
2.3.6 SQL-Bedingungen mit dem AND NOT-Operator logisch verknüpfen
96
2.3.7 Der logische Verknüpfungsoperator OR NOT
97
2.3.8 SQL-Bedingungen mit dem logischen OR NOT-Operator verknüpfen
98
2.3.9 Logische Verknüpfungsoperatoren kombiniert anwenden
99
2.3.10 Übungen
104
2.4 Ergebniszeilen einer SELECT-Anweisung einschränken
106
2.4.1 Ergebniszeilen mit FETCH, LIMIT und TOP eingrenzen
107
2.4.2 Übungen
108
2.5 Datensätze sortiert abfragen
109
2.5.1 Aufsteigende Sortierung gemäß einer Spaltenangabe
110
2.5.2 Auf- und absteigende Sortierung mehrerer Spalten
112
2.5.3 Nach numerischen Spaltenwerten sortieren
114
2.5.4 Nach Datumswerten sortieren
114
2.5.5 Nicht definierte Werte in einer Sortierung beachten
115
2.5.6 ORDER BY mit einer WHERE-Klausel verwenden
116
2.5.7 Übungen
118
2.6 Konstanten in die Spaltenauswahlliste aufnehmen
121
2.6.1 Abfrage eines konstanten Textes
122
2.6.2 Konstanten und Spalten einer Tabelle gleichzeitig abfragen
122
2.6.3 Übungen
123
2.7 Spalten einen Alias zuordnen
124
2.7.1 Spalten in einer Abfrage mit einem Alias versehen
125
2.7.2 Ausgewählten Spalten einer Abfrage einen Alias zuordnen
125
2.7.3 Spalten und Konstanten einen Alias zuordnen
126
2.7.4 Übungen
127
2.8 Gleiche Ergebniszeilen ausschließen (DISTINCT)
128
2.8.1 Übungen
130
3 Zeilen einfügen (INSERT), ändern (UPDATE) und löschen (DELETE, TRUNCATE)
133
3.1 Zeilen mit einer INSERT-Anweisung einfügen
133
3.1.1 Spaltenwerte mit expliziter Spaltenangabe einfügen
134
3.1.2 Spaltenwerte ohne Spaltenangabe einfügen
138
3.1.3 Übungen
141
3.2 Zeilen mit einer UPDATE-Anweisung ändern
143
3.2.1 Einen Spaltenwert einer Zeile ändern
144
3.2.2 Mehrere Spaltenwerte einer Zeile gleichzeitig ändern
145
3.2.3 Spaltenwerte einer Spalte für mehrere Zeilen gleichzeitig ändern
146
3.2.4 Allen Spaltenwerten einer Spalte einen Wert zuordnen
147
3.2.5 Spaltenwerten mit einer UPDATE-Anweisung einen NULL-Wert zuweisen
149
3.2.6 Schlüsselwertspalten mit UPDATE einen neuen Wert zuweisen
149
3.2.7 Übungen
152
3.3 Zeilen mit einer DELETE-Anweisung löschen
154
3.3.1 Eine Zeile einer Tabelle löschen
154
3.3.2 Mehrere Zeilen einer Tabelle gleichzeitig löschen
155
3.3.3 Alle Zeilen einer Tabelle gleichzeitig löschen
156
3.3.4 Übungen
157
3.4 Alle Zeilen einer Tabelle mit einer TRUNCATE-Anweisung löschen
158
3.4.1 Die TRUNCATE-Anweisung anwenden
159
3.4.2 Übungen zum Thema »Alle Zeilen einer Tabelle mit einer TRUNCATE-Anweisung löschen«
160
4 Tabellen anlegen (CREATE TABLE)
161
4.1 Datentypen
161
4.1.1 Datentypen für ganze Zahlen
165
4.1.2 Datentypen für rationale Zahlen
166
4.1.3 Datentypen für Datum und Zeit
167
4.1.4 Datentypen für Zeichenketten
168
4.1.5 Übungen
172
4.2 Datentypen umwandeln
174
4.3 Explizite und implizite Typkonvertierung
175
4.3.1 Explizite Typkonvertierung
176
4.3.2 Implizite Typkonvertierung
177
4.3.3 Übungen
181
4.4 Einfache Tabellen mit CREATE TABLE erstellen
182
4.4.1 Zielstruktur der Tabelle
182
4.4.2 Tabellen mit der CREATE TABLE-Anweisung anlegen
183
4.4.3 Tabellen mit einer DROP-Anweisung löschen
186
4.4.4 Eine Tabelle mit einem Primärschlüssel ausstatten
187
4.4.5 Automatisch hochzählende numerische Primärschlüsselspalten festlegen
189
4.4.6 Reservierte Schlüsselwörter
192
4.4.7 Übungen
193
4.5 Spalten Einschränkungen (CONSTRAINTS) zuordnen
195
4.5.1 Spalten als Pflichtfelder (NOT NULL) definieren
195
4.5.2 Spalten mit einer UNIQUE-Einschränkung versehen
198
4.5.3 Standardwerte mit DEFAULT für Spalten festlegen
200
4.5.4 Bedingungen mit einer CHECK-Einschränkung für Spalten festlegen
202
4.5.5 Übungen
205
4.6 Spalten auf Tabellenebene Einschränkungen (CONSTRAINT) zuordnen
209
4.6.1 Einen Primärschlüssel auf Tabellenebene festlegen
209
4.6.2 Eine UNIQUE-Einschränkung auf Tabellenebene festlegen
213
4.6.3 Eine CHECK-Einschränkung auf Tabellenebene festlegen
216
4.6.4 Übungen
218
5 Mengenoperationen anwenden
223
5.1 Mengenoperationen auf Ergebnistabellen anwenden
223
5.1.1 Eine Vereinigungsmenge aus zwei Mengen bilden
223
5.1.2 Eine Schnittmenge bilden
227
5.1.3 Eine Differenzmenge bilden
228
5.2 Funktionsweise von Mengenoperationen mit UNION
230
5.2.1 Übungen
237
5.3 Die Schnittmenge von Ergebnistabellen bilden (INTERSECT)
238
5.3.1 Schnittmengen von Ergebnistabellen
239
5.3.2 Übungen
240
5.4 Eine Differenzmenge aus Ergebnistabellen bilden (EXCEPT)
241
5.4.1 Differenzmenge von Ergebnismengen bilden
242
5.4.2 Übungen
243
5.5 Mengenoperationen in Kombination mit einer WHERE-Klausel verwenden
243
5.5.1 Vor einer Vereinigungsoperation mit UNION filtern
244
5.5.2 Übungen
245
5.6 Vereinigungsmengen in Kombination mit einer ORDER BY-Klausel
246
5.6.1 Übungen
248
6 Benutzer, Rollen und ihre Berechtigungen
249
6.1 Benutzer anlegen (CREATE USER)
250
6.1.1 Nutzer in einer MySQL-Datenbank anlegen
250
6.1.2 Nutzer in einer PostgreSQL-Datenbank anlegen
250
6.1.3 Nutzer in einer MS SQL Server-Datenbank anlegen
251
6.2 Benutzer entfernen
251
6.3 Eine Verbindung für einen Datenbankbenutzer erstellen
252
6.3.1 Verbindung für eine MySQL-Datenbank einrichten
252
6.3.2 Verbindung für eine PostgreSQL-Datenbank herstellen
253
6.3.3 Verbindung für eine MS SQL Server-Datenbank herstellen
255
6.4 Berechtigungen verwalten
256
6.4.1 Berechtigungen vergeben (GRANT)
257
6.4.2 Berechtigungen entziehen (REVOKE)
258
6.5 Mit Rollen Berechtigungen zuordnen
258
6.5.1 Rollen anlegen (CREATE ROLE)
259
6.5.2 Rollen mit Berechtigungen ausstatten
259
6.5.3 Rollen Datenbanknutzern zuordnen
259
6.5.4 Rollen Berechtigungen entziehen
260
6.5.5 Rollen entfernen
260
6.6 Übungen
262
7 Datenbanken modellieren
267
7.1 Anforderungskatalog
267
7.2 Entitäten identifizieren und modellhaft abbilden
268
7.2.1 Entitäten identifizieren
268
7.2.2 Informationen zu den Entitäten ermitteln
269
7.2.3 Schlüsselattribute für Entitäten identifizieren
269
7.2.4 Die Wertebereiche von Attributen erkennen
272
7.2.5 Zwischen Pflichtattributen und optionalen Attributen unterscheiden
274
7.3 Beziehungen zwischen Entitäten festlegen
275
7.3.1 Beziehungen im Entity-Relationship-Modell definieren
276
7.3.2 Kardinalitäten von Beziehungen erkennen
276
7.3.3 Eine besondere 1:n-Beziehung – oder Entitäten, die auf sich selbst verweisen
284
7.3.4 Starke und schwache Entitäten unterscheiden
285
7.4 Datenmodelle in der UML-Notation darstellen
289
7.5 Übungen
292
8 Datenmodelle optimieren (Normalisierung)
295
8.1 Redundanzen erkennen
295
8.1.1 Was ist eine Redundanz?
295
8.1.2 Was bedeutet Normalisierung?
297
8.2 Die 1. Normalform anwenden
298
8.3 Die 2. Normalform anwenden
300
8.4 Die 3. Normalform anwenden
303
8.5 Denormalisierung
304
8.6 Übungen
306
9 Datenmodelle in Tabellen überführen
309
9.1 Die Ausbildungsdatenbank anlegen
309
9.1.1 Eine neue Datenbank mit UTF-8-Zeichensatz anlegen (MySQL)
310
9.1.2 Eine neue Datenbank mit UTF-8-Zeichensatz anlegen (PostgreSQL)
310
9.1.3 Eine neue Datenbank mit Unicode-Zeichensatz anlegen (MS SQL Server)
310
9.1.4 Übung
311
9.2 Tabellen mit Beziehungen zu anderen Tabellen erstellen
311
9.2.1 Die Ausbildungsdatenbank im Modell erfassen
311
9.2.2 Tabellen erstellen, die in einer 1:1-Beziehung stehen
312
9.2.3 Tabellen erstellen, die in einer 1:n-Beziehung stehen
314
9.2.4 Tabellen erstellen, die in einer m:n-Beziehung stehen
316
9.2.5 Tabellen erstellen, die zu sich selbst in Beziehung stehen
317
9.3 Übung
318
9.4 Die referenzielle Integrität verstehen
320
10 Operationen auf Tabellen in Beziehungen anwenden
327
10.1 Zeilen in Tabellen einfügen, die in Beziehung zueinander stehen
327
10.1.1 Zeilen in die Tabelle »auszubildender« einfügen
327
10.1.2 Zeilen in die Tabelle »ausbildungsberuf« einfügen
328
10.1.3 Zeilen in die Tabelle »lehrfach« einfügen
328
10.1.4 Zeilen in die Tabelle »adresse« (inklusive der Beziehungen) einfügen
329
10.1.5 Zeilen in die Tabelle »ausbildungsvertrag« (inklusive der Beziehungen) einfügen
330
10.1.6 Zeilen in die Tabelle »beruflehrfach« (inklusive der Beziehungen) einfügen
330
10.1.7 Zeilen in die Tabelle »mitarbeiterausbildungsbetrieb« (inklusive der Beziehungen) einfügen
331
10.1.8 Übungen
333
10.2 Zeilen aus Tabellen, die in Beziehung stehen, mit JOIN verbunden abfragen
337
10.2.1 Zeilen mit einem INNER JOIN verbinden
339
10.2.2 Zeilen mit einem LEFT OUTER JOIN verbinden
341
10.2.3 Zeilen mit einem RIGHT OUTER JOIN verbinden
344
10.2.4 Zeilen mit einem FULL OUTER JOIN verbinden
347
10.2.5 Einen FULL OUTER JOIN unter MySQL nachbilden
349
10.2.6 Zeilen mit einem CROSS JOIN verbinden
354
10.2.7 Zeilen von drei Tabellen mit einem INNER JOIN verbinden
356
10.2.8 Spalten in einem JOIN über Tabellennamen referenzieren
358
10.2.9 Spalten in einem JOIN über Tabellenaliasse referenzieren
360
10.2.10 Zeilen mit einem SELF JOIN verbinden
362
10.2.11 Zeilen mit einem INNER JOIN ohne Schlüsselvergleiche verbinden
364
10.2.12 Übungen
366
10.3 Beziehungen (Schlüsselbeziehungen) ändern
375
10.3.1 Beziehungen aus Zeilen aus einer Kindtabelle ändern
375
10.3.2 Beziehungen aus Zeilen einer Elterntabelle ändern (ON UPDATE CASCADE)
377
10.3.3 Übungen
381
10.4 Beziehungen (Schlüsselbeziehungen) aufheben oder löschen
386
10.4.1 Zeilen aus Kindtabellen auf NULL setzen
386
10.4.2 Zeilen aus Kindtabellen löschen
389
10.4.3 Zeilen aus Elterntabellen löschen
390
10.4.4 Übungen
393
11 Transaktionen
397
11.1 Forderungen an relationale Datenbanksysteme
398
11.2 Transaktionen verstehen
400
11.2.1 Allgemeiner Aufbau einer Transaktion
400
11.2.2 Einen atomaren Datenzustand mit Transaktionen sicherstellen
401
11.2.3 Transaktionen mit ROLLBACK rückgängig machen
402
11.2.4 Operationen mit Transaktionen isoliert ausführen
405
11.3 Übungen
407
12 Tabellenstrukturen verändern
409
12.1 Eine Tabelle umbenennen
409
12.2 Spalten einer Tabelle ändern
411
12.2.1 Eine Spalte umbenennen
411
12.2.2 Den Datentyp einer Spalte ändern
413
12.2.3 Eine Spalte als Primärschlüsselspalte definieren
414
12.2.4 Einer Spalte eine NOT NULL-Einschränkung zuordnen
416
12.2.5 Einer Spalte eine NULL-Einschränkung zuordnen
417
12.2.6 Einer Spalte einen Standardwert (DEFAULT VALUE) zuordnen
418
12.2.7 Einer Spalte eine UNIQUE-Einschränkung zuordnen
420
12.2.8 Eine Spalte mit einer CHECK-Einschränkung versehen
422
12.3 Spalten hinzufügen und entfernen
424
12.3.1 Einer Tabelle eine Spalte hinzufügen
424
12.3.2 Eine Spalte aus einer Tabelle entfernen
425
12.4 Beziehungen zwischen Tabellen herstellen und entfernen
426
12.5 Übungen
429
13 Mit SQL rechnen
437
13.1 Spaltenwerte addieren
438
13.2 Spaltenwerte subtrahieren
440
13.3 Spaltenwerte multiplizieren
440
13.4 Spaltenwerte dividieren
441
13.5 Den Restwert einer Division von Spaltenwerten berechnen
442
13.6 Nach dem Ergebnis einer Berechnung filtern
443
13.7 Nach dem Ergebnis einer Berechnung sortieren lassen
443
13.8 Übungen
445
14 Skalarfunktionen anwenden
449
14.1 Funktionen für Textwerte
450
14.1.1 Zeichenkette in Kleinbuchstaben umwandeln (LOWER)
451
14.1.2 Spaltenwerte in Großbuchstaben umwandeln (UPPER)
451
14.1.3 Spaltenwerte von führenden und endenden Leerzeichen befreien (TRIM)
452
14.1.4 Text aus Spaltenwerten extrahieren (SUBSTRING)
456
14.1.5 Textspaltenwerte verkettet ausgeben
458
14.1.6 Übungen
461
14.2 Funktionen für Zahlenwerte
463
14.2.1 Die Länge einer Zeichenkette ermitteln (CHAR_LENGTH, LEN)
464
14.2.2 Die Startposition einer Zeichenkette in einem Textwert ermitteln (POSITION, CHARINDEX)
465
14.2.3 Potenzen berechnen (POWER)
466
14.2.4 Eine Quadratwurzel berechnen (SQRT)
467
14.2.5 Übungen
468
14.3 Verschachtelte Funktionsaufrufe
469
14.4 Übungen
472
15 Bedingungslogik
475
15.1 Die CASE-Klausel
475
15.2 Bedingungslogik in einer Spaltenauswahlliste einer SELECT-Anweisung anwenden
476
15.3 Bedingungslogik in einer ORDER BY-Klausel anwenden
478
15.4 Übungen
480
16 Mit Zeit und Datum arbeiten
483
16.1 Datumsformate
483
16.2 Skalarfunktionen für Zeit- und Datumsangaben in SQL nutzen
484
16.2.1 Datum, Zeit und Zeitstempel vom Datenbankserver ermitteln lassen
485
16.2.2 Ergebnislisten mit einem Berichtsdatum versehen
486
16.2.3 Übungen
486
16.3 Zeit- und Datumsangaben formatieren
487
16.3.1 Datumsformatierung unter MySQL (DATE_FORMAT)
487
16.3.2 Datumsformatierung unter PostgreSQL (TO_CHAR)
492
16.3.3 Datumsformatierung unter MS SQL Server (FORMAT)
497
16.3.4 Übungen
500
16.4 Datumsangaben extrahieren (EXTRACT)
502
16.4.1 Übungen
505
16.5 Mit Datumsangaben rechnen
507
16.5.1 Mit Datumswerten rechnen unter MySQL
508
16.5.2 Mit Datumswerten rechnen unter PostgreSQL
509
16.5.3 Mit Datumswerten rechnen unter MS SQL Server
511
16.5.4 Übungen
513
17 Spaltenwerte gruppieren (GROUP BY)
515
17.1 Die Aggregatfunktion COUNT anwenden
516
17.1.1 Übungen
521
17.2 Die Aggregatfunktion SUM anwenden
521
17.2.1 Übungen
522
17.3 Die Aggregatfunktion AVG anwenden
523
17.3.1 Übungen
524
17.4 Die Aggregatfunktion MAX anwenden
525
17.4.1 Übungen
525
17.5 NULL-Werte berücksichtigen
526
17.5.1 Übungen
530
17.6 Nach aggregierten Werten einer Gruppierung filtern (HAVING)
531
17.6.1 Übungen
532
17.7 Nach zwei oder mehr Spalten gruppieren
533
17.7.1 Übungen
535
18 Mächtiges Werkzeug: Die Unterabfragen (Subqueries)
537
18.1 Unterabfragen, die in Korrelation zueinander stehen
538
18.1.1 Übungen
542
18.2 Unterabfragen, die nicht in Korrelation zueinander stehen
544
18.2.1 Übungen
549
18.3 Vergleichsoperatoren auf Unterabfragen mit ANY, SOME und ALL anwenden
550
18.3.1 Übungen
554
18.4 Auf die Existenz von Ergebniszeilen aus Unterabfragen prüfen (EXISTS)
555
18.4.1 Übungen
558
19 Views: Abfragen in virtuellen Tabellen speichern
561
19.1 Einfache Views anlegen
562
19.1.1 Übungen
565
19.2 Views und ORDER BY
567
19.2.1 Übungen
569
19.3 INSERT, UPDATE und DELETE auf Views anwenden
570
19.3.1 Eine INSERT-Anweisung auf Views anwenden
570
19.3.2 Eine UPDATE-Anweisung auf Views anwenden
574
19.3.3 Eine DELETE-Anweisung auf Views anwenden
575
19.3.4 Views, auf die keine INSERT-, DELETE- oder UPDATE-Anweisung angewendet werden kann
576
19.3.5 Übungen
578
19.4 Views entfernen oder ersetzen
581
19.4.1 Übungen
581
20 Performance von Abfragen optimieren (Index)
583
20.1 Einführung
583
20.2 Syntax: Index erstellen
586
20.3 Eine Tabelle mit vielen Zeilen generieren
586
20.4 Einen Index für eine Tabelle anlegen
588
20.5 Einen Index über mehrere Spalten anlegen
590
20.6 Den Index einer Tabelle löschen
592
20.7 Fremdschlüsselspalten indexieren
593
20.8 Übungen
596
Index
601