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
42
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 als/gleich prüfen
58
2.2.5 Spaltenwerte auf größer als/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)
68
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
89
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
94
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
111
2.5.2 Auf- und absteigende Sortierung mehrerer Spalten
113
2.5.3 Nach numerischen Spaltenwerten sortieren
114
2.5.4 Nach Datumswerten sortieren
115
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
119
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
123
2.6.3 Übungen
124
2.7 Spalten einen Alias zuordnen
125
2.7.1 Spalten in einer Abfrage mit einem Alias versehen
125
2.7.2 Ausgewählten Spalten einer Abfrage einen Alias zuordnen
126
2.7.3 Spalten und Konstanten einen Alias zuordnen
126
2.7.4 Übungen
128
2.8 Gleiche Ergebniszeilen ausschließen (DISTINCT)
129
2.8.1 Übungen
131
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
150
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
158
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
169
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
194
4.5.1 Spalten als Pflichtfelder (NOT NULL) definieren
194
4.5.2 Spalten mit einer UNIQUE-Einschränkung versehen
197
4.5.3 Standardwerte mit DEFAULT für Spalten festlegen
200
4.5.4 Bedingungen mit einer CHECK-Einschränkung für Spalten festlegen
201
4.5.5 Übungen
204
4.6 Spalten auf Tabellenebene Einschränkungen (CONSTRAINT) zuordnen
208
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
229
5.2 Eine Vereinigungsmenge bilden (UNION)
230
5.2.1 Vereinigungsmengen von Ergebnistabellen bilden
231
5.2.2 Übungen
237
5.3 Die Schnittmenge von Ergebnistabellen bilden (INTERSECT)
239
5.3.1 Schnittmengen von Ergebnistabellen
239
5.3.2 Übungen
241
5.4 Eine Differenzmenge aus Ergebnistabellen bilden (EXCEPT)
243
5.4.1 Differenzmenge von Ergebnismengen bilden
244
5.4.2 Übungen
245
5.5 Mengenoperationen in Kombination mit einer WHERE-Klausel verwenden
247
5.5.1 Vor einer Vereinigungsoperation mit UNION filtern
247
5.5.2 Übung
248
5.6 Vereinigungsmengen in Kombination mit einer ORDER BY-Klausel
249
5.6.1 Übungen
250
6 Benutzer, Rollen und ihre Berechtigungen
253
6.1 Benutzer anlegen (CREATE USER)
254
6.1.1 Nutzer in einer MySQL- oder MariaDB-Datenbank anlegen
254
6.1.2 Nutzer in einer PostgreSQL-Datenbank anlegen
254
6.1.3 Nutzer in einer MS SQL Server-Datenbank anlegen
255
6.2 Benutzer entfernen
255
6.3 Eine Verbindung für einen Datenbankbenutzer erstellen
256
6.3.1 Verbindung für eine MySQL-Datenbank einrichten
256
6.3.2 Verbindung für eine MariaDB-Datenbank herstellen
257
6.3.3 Verbindung für eine PostgreSQL-Datenbank herstellen
258
6.3.4 Verbindung für eine MS SQL Server-Datenbank herstellen
261
6.4 Berechtigungen verwalten
261
6.4.1 Berechtigungen vergeben (GRANT)
262
6.4.2 Berechtigungen entziehen (REVOKE)
263
6.5 Mit Rollen Berechtigungen zuordnen
264
6.5.1 Rollen anlegen (CREATE ROLE)
264
6.5.2 Rollen mit Berechtigungen ausstatten
264
6.5.3 Rollen Datenbanknutzern zuordnen
265
6.5.4 Rollen Berechtigungen entziehen
265
6.5.5 Rollen entfernen
266
6.6 Übungen
267
6.7 Lösungen zu den Übungen
268
7 Datenbanken modellieren
271
7.1 Anforderungskatalog
271
7.2 Entitäten identifizieren und modellhaft abbilden
272
7.2.1 Entitäten identifizieren
272
7.2.2 Informationen zu den Entitäten ermitteln
273
7.2.3 Schlüsselattribute für Entitäten identifizieren
273
7.2.4 Die Wertebereiche von Attributen erkennen
276
7.2.5 Zwischen Pflichtattributen und optionalen Attributen unterscheiden
278
7.3 Beziehungen zwischen Entitäten festlegen
279
7.3.1 Beziehungen im Entity-Relationship-Modell definieren
280
7.3.2 Kardinalitäten von Beziehungen erkennen
281
7.3.3 Eine besondere 1:n-Beziehung – oder Entitäten, die auf sich selbst verweisen
288
7.3.4 Starke und schwache Entitäten unterscheiden
290
7.4 Datenmodelle in der UML-Notation darstellen
293
7.5 Übungen
297
8 Datenmodelle optimieren (Normalisierung)
299
8.1 Redundanzen erkennen
299
8.1.1 Was ist eine Redundanz?
299
8.1.2 Was bedeutet Normalisierung?
301
8.2 Die 1. Normalform anwenden
302
8.3 Die 2. Normalform anwenden
304
8.4 Die 3. Normalform anwenden
306
8.5 Denormalisierung
308
8.6 Übungen
310
9 Datenmodelle in Tabellen überführen
313
9.1 Die Ausbildungsdatenbank anlegen
313
9.1.1 Eine neue Datenbank mit UTF-8-Zeichensatz anlegen (MySQL, MariaDB)
314
9.1.2 Eine neue Datenbank mit UTF-8-Zeichensatz anlegen (PostgreSQL)
314
9.1.3 Eine neue Datenbank mit Unicode-Zeichensatz anlegen (MS SQL Server)
314
9.1.4 Übung
315
9.2 Tabellen mit Beziehungen zu anderen Tabellen erstellen
315
9.2.1 Die Ausbildungsdatenbank im Modell erfassen
315
9.2.2 Tabellen erstellen, die in einer 1:1-Beziehung stehen
316
9.2.3 Tabellen erstellen, die in einer 1:n-Beziehung stehen
318
9.2.4 Tabellen erstellen, die in einer m:n-Beziehung stehen
319
9.2.5 Tabellen erstellen, die zu sich selbst in Beziehung stehen
321
9.3 Übung
322
9.4 Die referenzielle Integrität verstehen
324
10 Operationen auf Tabellen in Beziehungen anwenden
331
10.1 Zeilen in Tabellen einfügen, die in Beziehung zueinander stehen
331
10.1.1 Zeilen in die Tabelle »auszubildender« einfügen
331
10.1.2 Zeilen in die Tabelle »ausbildungsberuf« einfügen
332
10.1.3 Zeilen in die Tabelle »lehrfach« einfügen
332
10.1.4 Zeilen in die Tabelle »adresse« (inklusive der Beziehungen) einfügen
333
10.1.5 Zeilen in die Tabelle »ausbildungsvertrag« (inklusive der Beziehungen) einfügen
334
10.1.6 Zeilen in die Tabelle »beruflehrfach« (inklusive der Beziehungen) einfügen
334
10.1.7 Zeilen in die Tabelle »mitarbeiterausbildungsbetrieb« (inklusive der Beziehungen) einfügen
335
10.1.8 Übungen
337
10.2 Zeilen aus Tabellen, die in Beziehung stehen, mit JOIN verbunden abfragen
341
10.2.1 Zeilen mit einem INNER JOIN verbinden
343
10.2.2 Zeilen mit einem LEFT OUTER JOIN verbinden
345
10.2.3 Zeilen mit einem RIGHT OUTER JOIN verbinden
348
10.2.4 Zeilen mit einem FULL OUTER JOIN verbinden
351
10.2.5 Einen FULL OUTER JOIN unter MySQL oder MariaDB nachbilden
353
10.2.6 Zeilen mit einem CROSS JOIN verbinden
358
10.2.7 Zeilen von drei Tabellen mit einem INNER JOIN verbinden
360
10.2.8 Spalten in einem JOIN über Tabellennamen referenzieren
362
10.2.9 Spalten in einem JOIN über Tabellenaliasse referenzieren
365
10.2.10 Zeilen mit einem Self Join verbinden
367
10.2.11 Zeilen mit einem INNER JOIN ohne Schlüsselvergleich verbinden
369
10.2.12 Übungen
371
10.3 Beziehungen (Schlüsselbeziehungen) ändern
379
10.3.1 Beziehungen aus Zeilen aus einer Kindtabelle ändern
380
10.3.2 Beziehungen aus Zeilen einer Elterntabelle ändern (ON UPDATE CASCADE)
382
10.3.3 Übungen
386
10.4 Beziehungen (Schlüsselbeziehungen) aufheben oder löschen
391
10.4.1 Zeilen aus Kindtabellen auf NULL setzen
391
10.4.2 Zeilen aus Kindtabellen löschen
393
10.4.3 Zeilen aus Elterntabellen löschen
395
10.4.4 Übungen
398
11 Transaktionen
403
11.1 Forderungen an relationale Datenbanksysteme
404
11.2 Transaktionen verstehen
406
11.2.1 Allgemeiner Aufbau einer Transaktion
406
11.2.2 Einen atomaren Datenzustand mit Transaktionen sicherstellen
407
11.2.3 Transaktionen mit ROLLBACK rückgängig machen
408
11.2.4 Operationen mit Transaktionen isoliert ausführen
411
11.3 Übungen
413
12 Tabellenstrukturen verändern
415
12.1 Eine Tabelle umbenennen
415
12.2 Spalten einer Tabelle ändern
417
12.2.1 Eine Spalte umbenennen
417
12.2.2 Den Datentyp einer Spalte ändern
419
12.2.3 Eine Spalte als Primärschlüsselspalte definieren
421
12.2.4 Einer Spalte eine NOT NULL-Einschränkung zuordnen
422
12.2.5 Einer Spalte eine NULL-Einschränkung zuordnen
423
12.2.6 Einer Spalte einen Standardwert (DEFAULT VALUE) zuordnen
424
12.2.7 Einer Spalte eine UNIQUE-Einschränkung zuordnen
427
12.2.8 Eine Spalte mit einer CHECK-Einschränkung versehen
428
12.3 Spalten hinzufügen und entfernen
430
12.3.1 Einer Tabelle eine Spalte hinzufügen
430
12.3.2 Eine Spalte aus einer Tabelle entfernen
431
12.4 Beziehungen zwischen Tabellen herstellen und entfernen
432
12.5 Übungen
435
13 Mit SQL rechnen
443
13.1 Spaltenwerte addieren
444
13.2 Spaltenwerte subtrahieren
446
13.3 Spaltenwerte multiplizieren
447
13.4 Spaltenwerte dividieren
447
13.5 Den Restwert einer Division von Spaltenwerten berechnen
448
13.6 Nach dem Ergebnis einer Berechnung filtern
449
13.7 Nach dem Ergebnis einer Berechnung sortieren lassen
450
13.8 Übungen
451
14 Skalarfunktionen anwenden
455
14.1 Funktionen für Textwerte
456
14.1.1 Zeichenkette in Kleinbuchstaben umwandeln (LOWER)
457
14.1.2 Spaltenwerte in Großbuchstaben umwandeln (UPPER)
457
14.1.3 Spaltenwerte von führenden und endenden Leerzeichen befreien (TRIM)
458
14.1.4 Text aus Spaltenwerten extrahieren (SUBSTRING)
463
14.1.5 Textspaltenwerte verkettet ausgeben
465
14.1.6 Übungen
467
14.2 Funktionen für Zahlenwerte
470
14.2.1 Die Länge einer Zeichenkette ermitteln (CHAR_LENGTH, LEN)
471
14.2.2 Die Startposition einer Zeichenkette in einem Textwert ermitteln (POSITION, CHARINDEX)
472
14.2.3 Potenzen berechnen (POWER)
473
14.2.4 Eine Quadratwurzel berechnen (SQRT)
474
14.2.5 Übungen
475
14.3 Verschachtelte Funktionsaufrufe
476
14.3.1 Übungen
480
15 Bedingungslogik
481
15.1 Die CASE-Klausel
481
15.2 Bedingungslogik in einer Spaltenauswahlliste einer SELECT-Anweisung anwenden
482
15.3 Bedingungslogik in einer ORDER BY-Klausel anwenden
484
15.4 Übungen
486
16 Mit Zeit und Datum arbeiten
489
16.1 Datumsformate
490
16.2 Skalarfunktionen für Zeit- und Datumsangaben in SQL nutzen
490
16.2.1 Datum, Zeit und Zeitstempel vom Datenbankserver ermitteln lassen
491
16.2.2 Ergebnislisten mit einem Berichtsdatum versehen
492
16.2.3 Übungen
493
16.3 Zeit- und Datumsangaben formatieren
493
16.3.1 Datumsformatierung unter MySQL und MariaDB (DATE_FORMAT)
494
16.3.2 Datumsformatierung unter PostgreSQL (TO_CHAR)
498
16.3.3 Datumsformatierung unter MS SQL Server (FORMAT)
503
16.3.4 Übungen
506
16.4 Datumsangaben extrahieren (EXTRACT)
508
16.4.1 Übungen
512
16.5 Mit Datumsangaben rechnen
513
16.5.1 Mit Datumswerten rechnen unter MySQL und MariaDB
514
16.5.2 Mit Datumswerten rechnen unter PostgreSQL
515
16.5.3 Mit Datumswerten rechnen unter MS SQL Server
517
16.5.4 Übungen
519
17 Spaltenwerte gruppieren (GROUP BY)
521
17.1 Die Aggregatfunktion COUNT anwenden
522
17.1.1 Übungen
527
17.2 Die Aggregatfunktion SUM anwenden
527
17.2.1 Übungen
528
17.3 Die Aggregatfunktion AVG anwenden
529
17.3.1 Übungen
530
17.4 Die Aggregatfunktion MAX anwenden
531
17.4.1 Übungen
532
17.5 NULL-Werte berücksichtigen
533
17.5.1 Übungen
537
17.6 Nach aggregierten Werten einer Gruppierung filtern (HAVING)
537
17.6.1 Übungen
539
17.7 Nach zwei oder mehr Spalten gruppieren
540
17.7.1 Übungen
542
18 Mächtiges Werkzeug: Die Unterabfragen (Subqueries)
545
18.1 Unterabfragen, die in Korrelation zueinander stehen
546
18.1.1 Übungen
550
18.2 Unterabfragen, die nicht in Korrelation zueinander stehen
552
18.2.1 Übungen
557
18.3 Vergleichsoperatoren auf Unterabfragen mit ANY, SOME und ALL anwenden
558
18.3.1 Übungen
561
18.4 Auf die Existenz von Ergebniszeilen aus Unterabfragen prüfen (EXISTS)
563
18.4.1 Übungen
566
19 Views: Abfragen in virtuellen Tabellen speichern
567
19.1 Einfache Views anlegen
568
19.1.1 Übungen
571
19.2 Views und ORDER BY
573
19.2.1 Übungen
575
19.3 INSERT, UPDATE und DELETE auf Views anwenden
576
19.3.1 Eine INSERT-Anweisung auf Views anwenden
576
19.3.2 Eine UPDATE-Anweisung auf Views anwenden
580
19.3.3 Eine DELETE-Anweisung auf Views anwenden
582
19.3.4 Views, auf die keine INSERT-, DELETE- oder UPDATE-Anweisung angewendet werden kann
583
19.3.5 Übungen
585
19.4 Views entfernen oder ersetzen
587
19.4.1 Übungen
588
20 Abfragen mit einem Index optimieren
591
20.1 Einführung
591
20.2 Syntax: Index erstellen
594
20.3 Eine Tabelle mit vielen Zeilen generieren
595
20.4 Einen Index für eine Tabelle anlegen
596
20.5 Einen Index über mehrere Spalten anlegen
598
20.6 Den Index einer Tabelle löschen
601
20.7 Fremdschlüsselspalten indexieren
601
20.8 Übungen
605
Index
609