Ralf Adams
SQL
Der Grundkurs für Ausbildung und Praxis. Mit Beispielen in MySQL/MariaDB, PostgreSQL und T-SQL
Inhalt
8
Vorwort zur 3. Auflage
18
Teil I Was man so wissen sollte
20
1 Datenbanksystem
22
1.1 Aufgaben und Komponenten
22
1.1.1 Datenbank
22
1.1.2 Datenbankmanagementsystem
24
1.2 Im Buch verwendete Server
26
1.2.1 MySQL und MariaDB
26
1.2.2 PostgreSQL
28
1.2.3 Microsoft SQL Server
29
2 Einführung in relationale Datenbanken
30
2.1 Was ist eine relationale Datenbank?
30
2.1.1 Abgrenzung zu anderen Datenbanken
30
2.1.2 Tabelle, Zeile und Spalte
32
2.1.3 Schlüssel, Primärschlüssel und Fremdschlüssel
35
2.2 Kardinalitäten und ER-Modell
41
2.2.1 Darstellung von Tabellen im ER-Modell
41
2.2.2 1:1-Verknüpfung
43
2.2.2.1 Wann liegt eine 1:1-Verknüpfung vor?
43
2.2.2.2 Wie kann ich eine 1:1-Verknüpfung darstellen?
44
2.2.2.3 Kann man die Kardinalität genauer beschreiben?
45
2.2.3 1:n-Verknüpfung
46
2.2.3.1 Wann liegt eine 1:n-Verknüpfung vor?
46
2.2.3.2 Wie kann ich eine 1:n-Verknüpfung darstellen?
47
2.2.3.3 Kann man die Kardinalität genauer beschreiben?
47
2.2.4 n:m-Verknüpfung
48
2.2.4.1 Wann liegt eine n:m-Verknüpfung vor?
48
2.2.4.2 Wie kann ich eine n:m-Verknüpfung darstellen?
49
2.2.4.3 Kann man die Kardinalität genauer beschreiben?
50
2.2.5 Aufgaben zum ER-Modell
50
2.3 Referenzielle Integrität
51
2.3.1 Verletzung der referenziellen Integrität durch Löschen
52
2.3.2 Verletzung der referenziellen Integrität durch Änderungen
53
2.4 Normalformen
53
2.4.1 Normalform 1
54
2.4.2 Normalform 2
56
2.4.3 Normalform 3
57
2.4.4 Normalform Rest
58
3 Unser Beispiel: Ein Online-Shop
60
3.1 Kundenverwaltung
60
3.2 Artikelverwaltung
61
3.3 Bestellwesen
62
Teil II Datenbank aufbauen
64
4 Installation des Servers
66
4.1 MySQL unter Windows 10
66
4.2 MariaDB unter Windows 10
72
4.3 Andere Installationen mit Docker
76
4.3.1 MySQL
77
4.3.2 MariaDB
79
4.3.3 PostgreSQL
80
4.3.4 Microsoft SQL Server
81
5 Datenbank und Tabellen anlegen
82
5.1 Die Programmiersprache SQL
82
5.2 Anlegen der Datenbank
83
5.2.1 Wie ruft man den MySQL Client auf?
84
5.2.2 Wie legt man eine Datenbank an?
85
5.2.3 Wie löscht man eine Datenbank?
87
5.2.4 Wie wird ein Zeichensatz zugewiesen?
87
5.2.5 Wie wird eine Sortierung zugewiesen?
89
5.3 Anlegen der Tabellen
91
5.3.1 Welche Datentypen gibt es?
92
5.3.2 Wie legt man eine Tabelle an?
93
5.3.3 Wann eine Aufzählung (ENUM) und wann eine neue Tabelle?
96
5.3.4 Wann ein DECIMAL, wann ein DOUBLE?
97
5.3.5 Wann verwendet man NOT NULL?
99
5.3.6 Wie legt man einen Fremdschlüssel fest?
101
5.3.7 Wie kann man Tabellen aus anderen herleiten?
107
5.3.8 Ich brauche mal eben kurz 'ne Tabelle!
108
6 Indizes anlegen
110
6.1 Index für Anfänger
110
6.1.1 Wann wird ein Index automatisch erstellt?
112
6.1.2 Wie kann man einen Index manuell erstellen?
114
6.2 Und jetzt etwas genauer
116
6.2.1 Wie kann ich die Schlüsseleigenschaft erzwingen?
116
6.2.2 Wie kann ich Dubletten verhindern?
117
6.2.3 Was bedeutet Indexselektivität?
119
6.2.4 Wie kann man einen Index löschen?
121
7 Werte in Tabellen einfügen
122
7.1 Daten importieren
122
7.1.1 Das CSV-Format
123
7.1.2 LOAD DATA INFILE
124
7.1.3 Was ist, wenn ich geänderte Werte importieren will?
128
7.2 Daten anlegen
129
7.2.1 Wie legt man mehrere Zeilen mit einem Befehl an?
130
7.2.2 Wie kann man eine einzelne Zeile anlegen?
131
7.2.3 Vorsicht Constraints!
132
7.2.4 Einfügen von binären Daten über einen C#-Client
133
7.2.5 Einfügen von binären Daten LOAD FILE
136
7.3 Daten kopieren
137
Teil III Datenbank ändern
140
8 Datenbank und Tabellen umbauen
142
8.1 Eine Datenbank ändern
142
8.2 Ein Schema löschen
144
8.3 Eine Tabelle ändern
146
8.3.1 Wie kann ich den Namen der Tabelle ändern?
146
8.3.2 Wie kann ich eine Spalte hinzufügen?
148
8.3.3 Wie kann ich die Spezifikation einer Spalte ändern?
149
8.3.4 Zeichenbasierte Spalten in der Länge verändern
150
8.3.5 Zeichensatz verändern
151
8.3.6 Zeichenbasierte Spalten in numerische Spalten verändern
151
8.3.7 Numerische Spalten im Wertebereich verändern
152
8.3.8 Datum- oder Zeitspalten verändern
152
8.3.9 Wie kann ich aus einer Tabelle Spalten entfernen?
154
8.4 Eine Tabelle löschen
155
8.4.1 Einfach löschen
156
8.4.2 Was bedeuten die Optionen CASCADE und RESTRICT?
157
9 Werte in Tabellen verändern
158
9.1 WHERE-Klausel
158
9.1.1 Wie formuliert man eine einfache Bedingung?
159
9.1.2 Wird zwischen Groß- und Kleinschreibung unterschieden?
160
9.1.3 Wie formuliert man eine zusammengesetzte Bedingung?
162
9.2 Tabelleninhalte verändern
163
9.2.1 Szenario 1: Einfache Wertzuweisung
165
9.2.2 Szenario 2: Berechnete Werte
165
9.2.3 Szenario 3: Gebastelte Zeichenketten
166
9.2.4 Was bedeutet die Option LOW_PRIORITY?
167
9.2.5 Was bedeutet die Option IGNORE?
167
9.3 Tabelleninhalte löschen
167
9.3.1 Und was passiert bei Constraints?
168
9.3.2 Was passiert mit dem AUTO_INCREMENT?
169
9.3.3 Was bedeutet LOW_PRIORITY?
170
9.3.4 Was bedeutet QUICK?
170
9.3.5 Was bedeutet IGNORE?
170
9.3.6 Wie kann man eine Tabelle komplett leeren?
171
Teil IV Datenbank auswerten
172
10 Einfache Auswertungen
174
10.1 Ausdrücke
175
10.1.1 Konstanten
175
10.1.2 Wie kann man Berechnungen vornehmen?
176
10.1.3 Wie ermittelt man Zufallszahlen?
177
10.1.4 Wie steckt man das Berechnungsergebnis in eine Variable?
178
10.2 Zeilen- und Spaltenwahl
179
10.3 Sortierung
180
10.3.1 Was muss bei der Sortierung von Texten beachtet werden?
182
10.3.2 Wird zwischen Groß- und Kleinschreibung unterschieden?
184
10.3.3 Wie werden Datums- und Uhrzeitwerte sortiert?
186
10.3.4 Wie kann man das Sortieren beschleunigen?
187
10.4 Mehrfachausgaben unterbinden
190
10.4.1 Fallstudie: Datenimport von Bankdaten
191
10.4.2 Was ist beim DISTINCT bzgl. der Performance zu beachten?
193
10.5 Ergebnismenge ausschneiden
194
10.5.1 Wie kann man sich die ersten n Datensätze ausschneiden?
194
10.5.2 Wie kann man Teilmengen mittendrin ausschneiden?
195
10.6 Ergebnisse exportieren
196
10.6.1 Wie legt man eine Exportdatei auf dem Server an?
196
10.6.2 Wie legt man eine Exportdatei auf dem Client an?
197
10.6.3 Wie liest man mithilfe eines C#-Client binäre Daten aus?
198
11 Tabellen verbinden
200
11.1 Heiße Liebe: Primär-Fremdschlüsselpaare
201
11.2 INNER JOIN zwischen zwei Tabellen
204
11.2.1 Bauanleitung für einen INNER JOIN
205
11.2.2 Abkürzende Schreibweisen
209
11.2.3 Als Datenquelle für temporäre Tabellen
209
11.2.4 JOIN über Nichtschlüsselspalten
212
11.3 INNER JOIN über mehr als zwei Tabellen
214
11.4 Es muss nicht immer heiße Liebe sein: OUTER JOIN
217
11.5 Narzissmus pur: SELF JOIN
222
11.6 Eine Verknüpfung beschleunigen
225
12 Differenzierte Auswertungen
228
12.1 Statistisches mit Aggregatfunktionen
228
12.2 Tabelle in Gruppen zerlegen
231
12.3 Gruppenergebnisse filtern
235
12.4 Noch Fragen?
237
12.4.1 Kann ich nach Ausdrücken gruppieren?
237
12.4.2 Kann ich nach mehr als einer Spalte gruppieren?
237
12.4.3 Wie kann ich GROUP BY beschleunigen?
238
12.4.4 Parallele Bearbeitung – unterschiedliche Ergebnisse?
240
12.5 Aufgaben
240
13 Auswertungen mit Unterabfragen
242
13.1 Das Problem und die Lösung
242
13.2 Nicht korrelierende Unterabfrage
245
13.2.1 Skalarunterabfrage
245
13.2.1.1 Beispiel 1: Banken mit höchster BLZ
245
13.2.1.2 Beispiel 2: Überdurchschnittlich teure Artikel
246
13.2.1.3 Beispiel 3: Überdurchschnittlich wertvolle Bestellungen
247
13.2.2 Listenunterabfrage
249
13.2.2.1 Beispiel 1: IN()
249
13.2.2.2 Beispiel 2: ALL()
250
13.2.2.3 Beispiel 3: ALL()
251
13.2.2.4 Beispiel 4: ANY()
254
13.2.3 Unterschied zwischen IN(), ALL() und ANY()
255
13.2.4 Unterschied zwischen NOT IN() und <> ALL()
256
13.2.5 Tabellenunterabfrage
256
13.3 Korrelierende Unterabfrage
257
13.3.1 Beispiel 1: Rechnungen mit vielen Positionen
257
13.3.2 Beispiel 2: EXISTS
258
13.4 Fallstudie Datenimport
259
13.5 Wie ticken Unterabfragen intern?
262
13.6 Aufgaben
266
14 Mengenoperationen
268
14.1 Die Vereinigung mit UNION
268
14.2 Die Schnittmenge
271
14.2.1 Mit INTERSECT
271
14.2.2 Mit Unterabfragen
272
14.3 Die Differenzmenge
273
14.3.1 Mit EXCEPT
273
14.3.2 Mit Unterabfragen
274
14.4 UNION, INTERSECT und EXCEPT ... versteh' ich nicht!
275
15 Bedingungslogik
278
15.1 Warum ein CASE?
278
15.2 Einfacher CASE
280
15.3 SEARCHED CASE
282
15.4 Fallbeispiele
284
15.4.1 Lagerbestand überprüfen
284
15.4.2 Kundengruppen ermitteln
285
15.4.3 Aktive Lieferanten ermitteln
288
15.4.4 Aufgaben
289
16 Ansichtssache
290
16.1 Was ist eine Ansicht?
290
16.1.1 Wie wird eine Ansicht angelegt?
291
16.1.2 Wie wird eine Ansicht verarbeitet?
293
16.1.3 Wie wird eine Ansicht gelöscht?
296
16.1.4 Wie wird eine Ansicht geändert?
299
16.2 Anwendungsgebiet: Vereinfachung
299
16.3 Anwendungsgebiet: Datenschutz
302
16.4 Grenzen einer Ansicht
302
17 Exkurs NoSQL
306
17.1 Vorbereitung der MySQL-Shell
307
17.2 Datenmodellierung des Warenkorbs
308
17.2.1 JavaScript Object Notation (JSON)
308
17.2.2 Struktur unseres JSON-Dokuments
310
17.3 NoSQL: MySQL mit JavaScript-Client
311
17.3.1 Anlegen eines Warenkorbs
312
17.3.2 Inhalte des Warenkorbs anlegen
313
17.3.3 Inhalte des Warenkorbs auswerten
316
17.3.4 Inhalte des Warenkorbs verändern
319
17.4 NoSQL: klassisches SQL mit JSON-Funktionen
321
17.4.1 Anlegen eines Warenkorbs
321
17.4.2 Inhalte des Warenkorbs anlegen
322
17.4.3 Inhalte des Warenkorbs auswerten
324
17.4.4 Inhalte des Warenkorbs verändern
325
17.4.5 Inhalte des Warenkorbs löschen
328
Teil V Anweisungen kapseln
330
18 Locking
332
19 Transaktion
336
19.1 Das Problem
336
19.2 Was ist eine Transaktion?
338
19.3 Isolationsebenen
341
19.3.1 READ UNCOMMITTED
341
19.3.2 READ COMMITTED
343
19.3.3 REPEATABLE READ
344
19.3.4 SERIALIZABLE
345
19.4 Fallbeispiel in C#
346
19.5 Deadlock
348
20 STORED PROCEDURE
350
20.1 Einstieg und Variablen
351
20.2 Verzweigung
356
20.2.1 Einfache Verzweigung mit IF
356
20.2.2 Mehrfache Verzweigung mit CASE
359
20.3 Schleifen
362
20.3.1 LOOP-Schleife
363
20.3.2 WHILE-Schleife
365
20.3.3 REPEAT-Schleife
368
20.4 Transaktion innerhalb einer Prozedur
369
20.5 CURSOR
370
20.6 Aufgaben
376
21 Funktion
378
22 TRIGGER
380
22.1 Was ist das?
380
22.2 Ein Beispiel für einen INSERT-Trigger
382
22.3 Ein Beispiel für einen UPDATE-Trigger
383
22.4 Ein Beispiel für einen DELETE-Trigger
385
23 EVENT
388
23.1 Wie legt man ein Ereignis an?
388
23.2 Wie wird man ein Ereignis wieder los?
391
Teil VI Anhänge
392
24 Datenbank administrieren
394
24.1 Backup und Restore
394
24.1.1 Backup mit mysqldump
394
24.1.2 Restore mit mysqldump
396
24.2 Benutzerrechte
396
24.2.1 Benutzerrechte und Privilegien
396
24.2.2 Benutzer anlegen/Recht zuweisen
399
24.2.2.1 CREATE USER
399
24.2.2.2 GRANT
400
24.2.2.3 REVOKE
402
24.3 MySQL und MariaDB Engines
403
25 Rund um den MySQL Client
406
25.1 Aufruf(parameter)
406
25.2 Befehle
409
26 SQL-Referenz
414
26.1 Datentypen
414
26.1.1 Numerische Datentypen
414
26.1.1.1 Ganze Zahlen
414
26.1.1.2 Gebrochene Zahlen
415
26.1.2 Zeichen-Datentypen
416
26.1.3 Datums- und Zeit-Datentypen
417
26.1.4 Binäre Datentypen
420
26.1.5 JSON
421
26.1.6 Räumliche Datentypen
421
26.1.7 Standardwerte
422
26.1.8 Zusätze für Datentypen
423
26.2 Operatoren und Funktionen
425
26.2.1 Mathematische Operatoren
425
26.2.2 Mathematische Funktionen
425
26.2.3 Aggregatfunktionen
428
26.3 Bedingungen
431
26.3.1 Vergleichsoperatoren
431
26.3.2 Logikoperatoren
433
26.3.2.1 NOT, Negation,
433
26.3.2.2 AND, Konjunktion,
434
26.3.2.3 OR, Disjunktion,
435
26.3.2.4 XOR, Antivalenz,
435
26.4 Befehle
436
26.4.1 Data Definition Language
436
26.4.2 Data Manipulation Language
448
26.4.3 Benutzerverwaltung
452
27 Ausgewählte Quelltexte
456
27.1 DOUBLE versus DECIMAL
456
27.2 Rundungsfehler
460
27.3 NULL versus NOT NULL
461
27.4 Suchen mit und ohne Index
463
27.5 Messen der Performance der Einfügeoperation
466
27.6 Messen der Indexselektivität
469
27.7 Sortieren ohne und mit Index
471
28 Rund ums Zeichen
474
28.1 Für Deutsch relevante Zeichensätze
474
28.2 Für Deutsch relevante Sortierungen
475
29 Quelltexte
478
29.1 MySQL/MariaDB
478
29.1.1 Quelltexte zu Teil II
478
29.1.2 Quelltexte zu Teil III
490
29.1.3 Quelltexte zu Teil IV
494
29.1.4 Quelltexte zu Teil V
538
29.2 PostgreSQL
553
29.2.1 Quelltexte zu Teil II
553
29.2.2 Quelltexte zu Teil III
562
29.2.3 Quelltexte zu Teil IV
566
29.2.4 Quelltexte zu Teil V
597
29.3 Microsoft SQL Server
601
29.3.1 Quelltexte zu Teil II
601
29.3.2 Quelltexte zu Teil III
612
29.3.3 Quelltexte zu Teil IV
617
Literatur
652
Stichwortverzeichnis
652
© 2009-2024 ciando GmbH