Ralf Adams
SQL
Der Grundkurs für Ausbildung und Praxis. Mit Beispielen in MySQL/MariaDB
Inhalt
8
Vorwort
18
Teil I Was man so wissen sollte
22
1 Datenbanksystem
24
1.1 Aufgaben und Komponenten
24
1.1.1 Datenbank
24
1.1.2 Datenbankmanagementsystem
26
1.2 Im Buch verwendete Server
27
1.2.1 MySQL und MariaDB
27
1.2.2 PostgreSQL
30
2 Einführung in relationale Datenbanken
32
2.1 Was ist eine relationale Datenbank?
32
2.1.1 Abgrenzung zu anderen Datenbanken
32
2.1.2 Tabelle, Zeile und Spalte
35
2.1.3 Schlüssel, Primärschlüssel und Fremdschlüssel
37
2.2 Kardinalitäten und ER-Modell
43
2.2.1 Darstellung von Tabellen im ER-Modell
43
2.2.2 1:1-Verknüpfung
45
2.2.2.1 Wann liegt eine 1:1-Verknüpfung vor?
45
2.2.2.2 Wie kann ich eine 1:1-Verknüpfung darstellen?
46
2.2.2.3 Kann man die Kardinalität genauer beschreiben?
47
2.2.3 1:n-Verknüpfung
48
2.2.3.1 Wann liegt eine 1:n-Verknüpfung vor?
48
2.2.3.2 Wie kann ich eine 1:n-Verknüpfung darstellen?
49
2.2.3.3 Kann man die Kardinalität genauer beschreiben?
49
2.2.4 n:m-Verknüpfung
50
2.2.4.1 Wann liegt eine n:m-Verknüpfung vor?
50
2.2.4.2 Wie kann ich eine n:m-Verknüpfung darstellen?
51
2.2.4.3 Kann man die Kardinalität genauer beschreiben?
52
2.2.5 Aufgaben zum ER-Modell
52
2.3 Referentielle Integrität
53
2.3.1 Verletzung der referentiellen Integrität durch Löschen
54
2.3.2 Verletzung der referentiellen Integrität durch Änderungen
55
2.4 Normalformen
55
2.4.1 Normalform 1
56
2.4.2 Normalform 2
58
2.4.3 Normalform 3
59
2.4.4 Normalform Rest
60
3 Unser Beispiel: Ein Online-Shop
62
3.1 Kundenverwaltung
62
3.2 Artikelverwaltung
63
3.3 Bestellwesen
64
Teil II Datenbank aufbauen
68
4 Installation des Servers
70
4.1 MySQL unter Windows 10
70
4.2 MariaDB unter Windows 10
76
4.3 Andere Installationen
80
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?
86
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?
91
5.3.2 Wie legt man eine Tabelle an?
92
5.3.3 Wann eine Aufzählung (ENUM) und wann eine neue Tabelle?
95
5.3.4 Wann ein DECIMAL, wann ein DOUBLE?
97
5.3.5 Wann verwendet man NOT NULL?
98
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?
113
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?
127
7.2 Daten anlegen
129
7.2.1 Wie legt man mehrere Zeilen mit einem Befehl an?
129
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
133
7.3 Daten kopieren
136
Teil III Datenbank ändern
138
8 Datenbank und Tabellen umbauen
140
8.1 Eine Datenbank ändern
140
8.2 Ein Schema löschen
142
8.3 Eine Tabelle ändern
143
8.3.1 Wie kann ich den Namen der Tabelle ändern?
144
8.3.2 Wie kann ich eine Spalte hinzufügen?
145
8.3.3 Wie kann ich die Spezifikation einer Spalte ändern?
147
8.3.4 Zeichenbasierte Spalten in der Länge verändern
148
8.3.5 Zeichensatz verändern
148
8.3.6 Zeichenbasierte Spalten in numerische Spalten verändern
149
8.3.7 Numerische Spalten im Wertebereich verändern
150
8.3.8 Datum- oder Zeitspalten verändern
151
8.3.9 Wie kann ich aus einer Tabelle Spalten entfernen?
152
8.4 Eine Tabelle löschen
153
8.4.1 Einfach löschen
154
8.4.2 Was bedeuten die Optionen CASCADE und RESTRICT?
154
9 Werte in Tabellen verändern
156
9.1 WHERE-Klausel
156
9.1.1 Wie formuliert man eine einfache Bedingung?
157
9.1.2 Wird zwischen Groß- und Kleinschreibung unterschieden?
158
9.1.3 Wie formuliert man eine zusammengesetzte Bedingung?
159
9.2 Tabelleninhalte verändern
160
9.2.1 Szenario 1: Einfache Wertzuweisung
162
9.2.2 Szenario 2: Berechnete Werte
162
9.2.3 Szenario 3: Gebastelte Zeichenketten
163
9.2.4 Was bedeutet die Option LOW_PRIORITY?
164
9.2.5 Was bedeutet die Option IGNORE?
164
9.3 Tabelleninhalte löschen
164
9.3.1 Und was passiert bei Constraints?
166
9.3.2 Was passiert mit dem AUTO_INCREMENT?
166
9.3.3 Was bedeutet LOW_PRIORITY?
167
9.3.4 Was bedeutet QUICK?
168
9.3.5 Was bedeutet IGNORE?
168
9.3.6 Wie kann man eine Tabelle komplett leeren?
168
Teil IV Datenbank auswerten
170
10 Einfache Auswertungen
172
10.1 Ausdrücke
173
10.1.1 Konstanten
173
10.1.2 Wie kann man Berechnungen vornehmen?
174
10.1.3 Wie ermittelt man Zufallszahlen?
175
10.1.4 Wie steckt man das Berechnungsergebnis in eine Variable?
176
10.2 Zeilen- und Spaltenwahl
177
10.3 Sortierung
178
10.3.1 Was muss bei der Sortierung von Texten beachtet werden?
180
10.3.2 Wird zwischen Groß- und Kleinschreibung unterschieden?
182
10.3.3 Wie werden Datums- und Uhrzeitwerte sortiert?
184
10.3.4 Wie kann man das Sortieren beschleunigen?
185
10.4 Mehrfachausgaben unterbinden
188
10.4.1 Fallstudie: Datenimport von Bankdaten
189
10.4.2 Was ist beim DISTINCT bzgl. der Performance zu beachten?
192
10.5 Ergebnismenge ausschneiden
192
10.5.1 Wie kann man sich die ersten n Datensätze ausschneiden?
192
10.5.2 Wie kann man Teilmengen mittendrin ausschneiden?
193
10.6 Ergebnisse exportieren
195
10.6.1 Wie legt man eine Exportdatei auf dem Server an?
195
10.6.2 Wie legt man eine Exportdatei auf dem Client an?
196
10.6.3 Wie liest man binäre Daten aus?
196
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
210
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?
236
12.4.1 Kann ich nach Ausdrücken gruppieren?
236
12.4.2 Kann ich nach mehr als einer Spalte gruppieren?
237
12.4.3 Wie kann ich GROUP BY beschleunigen?
238
12.5 Aufgaben
239
13 Auswertungen mit Unterabfragen
240
13.1 Das Problem und die Lösung
240
13.2 Nicht korrelierende Unterabfrage
243
13.2.1 Skalarunterabfrage
243
13.2.1.1 Beispiel 1: Banken mit höchster BLZ
243
13.2.1.2 Beispiel 2: Überdurchschnittlich teure Artikel
244
13.2.1.3 Beispiel 3: Überdurchschnittlich wertvolle Bestellungen
245
13.2.2 Listenunterabfrage
247
13.2.2.1 Beispiel 1: IN()
247
13.2.2.2 Beispiel 2: ALL()
248
13.2.2.3 Beispiel 3: ALL()
249
13.2.2.4 Beispiel 4: ANY()
252
13.2.3 Unterschied zwischen IN(), ALL() und ANY()
254
13.2.4 Unterschied zwischen NOT IN() und <> ALL()
254
13.2.5 Tabellenunterabfrage
254
13.3 Korrelierende Unterabfrage
255
13.3.1 Beispiel 1: Rechnungen mit vielen Positionen
255
13.3.2 Beispiel 2: EXISTS
256
13.4 Fallstudie Datenimport
257
13.5 Wie ticken Unterabfragen intern?
260
13.6 Aufgaben
264
14 Mengenoperationen
266
14.1 Die Vereinigung mit UNION
266
14.2 Die Schnittmenge
269
14.2.1 Mit INTERSECT
269
14.2.2 Mit Unterabfragen
270
14.3 Die Differenzmenge
271
14.3.1 Mit EXCEPT
271
14.3.2 Mit Unterabfragen
272
14.4 UNION, INTERSECT und EXCEPT ... versteh' ich nicht!
273
15 Bedingungslogik
276
15.1 Warum ein CASE?
276
15.2 Einfacher CASE
278
15.3 SEARCHED CASE
280
15.4 Fallbeispiele
282
15.4.1 Lagerbestand überprüfen
282
15.4.2 Kundengruppen ermitteln
283
15.4.3 Aktive Lieferanten ermitteln
286
15.4.4 Aufgaben
287
16 Ansichtssache
288
16.1 Was ist eine Ansicht?
288
16.1.1 Wie wird eine Ansicht angelegt?
289
16.1.2 Wie wird eine Ansicht verarbeitet?
291
16.1.3 Wie wird eine Ansicht gelöscht?
294
16.1.4 Wie wird eine Ansicht geändert?
296
16.2 Anwendungsgebiet: Vereinfachung
297
16.3 Anwendungsgebiet: Datenschutz
299
16.4 Grenzen einer Ansicht
300
Teil V Anweisungen kapseln
304
17 Locking
306
18 Transaktion
310
18.1 Das Problem
310
18.2 Was ist eine Transaktion?
312
18.3 Isolationsebenen
315
18.3.1 READ UNCOMMITTED
315
18.3.2 READ COMMITTED
317
18.3.3 REPEATABLE READ
318
18.3.4 SERIALIZABLE
319
18.4 Fallbeispiel in C#
320
18.5 Deadlock
322
19 STORED PROCEDURE
324
19.1 Einstieg und Variablen
325
19.2 Verzweigung
330
19.2.1 Einfache Verzweigung mit IF
330
19.2.2 Mehrfache Verzweigung mit CASE
333
19.3 Schleifen
336
19.3.1 LOOP-Schleife
337
19.3.2 WHILE-Schleife
339
19.3.3 REPEAT-Schleife
342
19.4 Transaktion innerhalb einer Prozedur
343
19.5 CURSOR
344
19.6 Aufgaben
351
20 Funktion
352
21 TRIGGER
354
21.1 Was ist das?
354
21.2 Ein Beispiel für einen INSERT-Trigger
356
21.3 Ein Beispiel für einen UPDATE-Trigger
357
21.4 Ein Beispiel für einen DELETE-Trigger
359
22 EVENT
362
22.1 Wie legt man ein Ereignis an?
362
22.2 Wie wird man ein Ereignis wieder los?
365
Teil VI Anhänge
366
23 Datenbank administrieren
368
23.1 Backup und Restore
368
23.1.1 Backup mit mysqldump
368
23.1.2 Restore mit mysqldump
370
23.2 Benutzerrechte
371
23.2.1 Benutzerrechte und Privilegien
371
23.2.2 Benutzer anlegen/Recht zuweisen
373
23.2.2.1 CREATE USER
373
23.2.2.2 GRANT
374
23.2.2.3 REVOKE
376
23.3 Datenbankreplikation
377
24 Rund um den MySQL-Client
382
24.1 Aufruf(parameter)
382
24.2 Befehle
385
25 SQL-Referenz
390
25.1 Datentypen
390
25.1.1 Numerische Datentypen
390
25.1.1.1 Ganze Zahlen
390
25.1.1.2 Gebrochene Zahlen
391
25.1.2 Zeichen-Datentypen
392
25.1.3 Datums- und Zeit-Datentypen
393
25.1.4 Binäre Datentypen
396
25.1.5 Standardwerte
396
25.1.6 Zusätze für Datentypen
397
25.2 Operatoren und Funktionen
398
25.2.1 Mathematische Operatoren
398
25.2.2 Mathematische Funktionen
398
25.2.3 Aggregatfunktionen
401
25.3 Bedingungen
403
25.3.1 Vergleichsoperatoren
403
25.3.2 Logikoperatoren
405
25.3.2.1 NOT, Negation,
405
25.3.2.2 AND, Konjunktion,
406
25.3.2.3 OR, Disjunktion,
407
25.3.2.4 XOR, Antivalenz,
407
25.4 Befehle
408
25.4.1 Data Definition Language
408
25.4.2 Data Manipulation Language
419
25.4.3 Benutzerverwaltung
423
26 Ausgewählte Quelltexte
426
26.1 DOUBLE versus DECIMAL
426
26.2 NULL versus NOT NULL
430
26.3 Suchen mit und ohne Index
432
26.4 Messen der Performance der Einfügeoperation
435
26.5 Messen der Indexselektivität
439
26.6 Sortieren ohne und mit Index
440
26.7 Rundungsfehler
443
27 Rund ums Zeichen
444
27.1 Für Deutsch relevante Zeichensätze
444
27.2 Für Deutsch relevante Sortierungen
445
28 Quelltexte
448
28.1 MySQL/MariaDB
448
28.2 PostgreSQL
509
Literatur
558
Stichwortverzeichnis
558
© 2009-2024 ciando GmbH