Inhaltsverzeichnis

Alle Kapitel aufklappen
Alle Kapitel zuklappen
1 Grundlagen kennenlernen und verstehen
21
1.1 Die Tabelle als zentrales Element
21
1.2 Eine kleine Historie von SQL
23
1.3 Datenbanksysteme
24
1.4 SQL – ein Standard und seine Umsetzung
25
1.5 Zu diesem Buch
27
1.6 MySQL unter Windows installieren
28
1.7 Die MySQL-Übungsdatenbank anlegen
36
1.8 Eine erste Abfrage an die Datenbank senden
39
1.9 Kommentarfunktion
42
1.9.1 Übungen
44
2 Los geht’s: Die Grundfunktionen der Tabellenabfrage (SELECT)
47
2.1 Mit einer SELECT-Anweisung Tabellen abfragen
47
2.1.1 Die Tabelle »mitarbeiter«
47
2.1.2 Wie frage ich eine Tabelle ab? (SELECT ... FROM)
47
2.1.3 Spalten einer Tabelle abfragen
48
2.1.4 Alle Spalten einer Tabelle abfragen
49
2.1.5 Übungen
50
2.2 Zeilen in einer Abfrage mit WHERE filtern
51
2.2.1 SQL-Vergleichsoperatoren
52
2.2.2 Spaltenwerte auf Gleichheit prüfen
55
2.2.3 Spaltenwerte auf Ungleichheit prüfen
58
2.2.4 Spaltenwerte auf kleiner als/gleich prüfen
60
2.2.5 Spaltenwerte auf größer als/gleich prüfen
62
2.2.6 Bedingungen mit dem NOT-Operator verneinen
64
2.2.7 Spaltenwerte auf ein Intervall prüfen (BETWEEN)
66
2.2.8 Spaltenwerte auf ein Muster prüfen (LIKE)
71
2.2.9 Spaltenwerte auf Mengenzugehörigkeit prüfen
76
2.2.10 Fehlende Spaltenwerte (NULL-Value)
79
2.2.11 Spaltenwerte auf NULL prüfen
82
2.2.12 Spaltenwerte auf »ist nicht NULL« prüfen
83
2.2.13 Spaltenwerte mit Spaltenwerten vergleichen
84
2.2.14 Übungen
86
2.3 Filterbedingungen mit AND (NOT) und OR (NOT) logisch verknüpfen
91
2.3.1 Der logische Verknüpfungsoperator AND
91
2.3.2 SQL-Bedingungen mit dem logischen AND-Operator verknüpfen
92
2.3.3 Der logische Verknüpfungsoperator OR
94
2.3.4 SQL-Bedingungen mit dem logischen OR-Operator verknüpfen
96
2.3.5 Der logische Verknüpfungsoperator AND NOT
98
2.3.6 SQL-Bedingungen mit dem AND NOT-Operator logisch verknüpfen
99
2.3.7 Der logische Verknüpfungsoperator OR NOT
99
2.3.8 SQL-Bedingungen mit dem logischen OR NOT-Operator verknüpfen
100
2.3.9 Logische Verknüpfungsoperatoren kombiniert anwenden
101
2.3.10 Übungen
106
2.4 Ergebniszeilen einer SELECT-Anweisung einschränken
109
2.4.1 Ergebniszeilen mit FETCH, LIMIT und TOP eingrenzen
109
2.4.2 Übungen
111
2.5 Datensätze sortiert abfragen
111
2.5.1 Aufsteigende Sortierung gemäß einer Spaltenangabe
113
2.5.2 Auf- und absteigende Sortierung mehrerer Spalten
115
2.5.3 Nach numerischen Spaltenwerten sortieren
116
2.5.4 Nach Datumswerten sortieren
117
2.5.5 Nicht definierte Werte in einer Sortierung beachten
118
2.5.6 ORDER BY mit einer WHERE-Klausel verwenden
119
2.5.7 Übungen
121
2.6 Konstanten in die Spaltenauswahlliste aufnehmen
124
2.6.1 Abfrage eines konstanten Textes
125
2.6.2 Konstanten und Spalten einer Tabelle gleichzeitig abfragen
125
2.6.3 Übungen
126
2.7 Spalten einen Alias zuordnen
127
2.7.1 Spalten in einer Abfrage mit einem Alias versehen
128
2.7.2 Ausgewählten Spalten einer Abfrage einen Alias zuordnen
128
2.7.3 Spalten und Konstanten einen Alias zuordnen
129
2.7.4 Übungen
130
2.8 Gleiche Ergebniszeilen ausschließen (DISTINCT)
131
2.8.1 Übungen
133
3 Zeilen einfügen (INSERT), ändern (UPDATE) und löschen (DELETE, TRUNCATE)
135
3.1 Zeilen mit einer INSERT-Anweisung einfügen
135
3.1.1 Spaltenwerte mit expliziter Spaltenangabe einfügen
136
3.1.2 Spaltenwerte ohne Spaltenangabe einfügen
140
3.1.3 Übungen
143
3.2 Zeilen mit einer UPDATE-Anweisung ändern
145
3.2.1 Einen Spaltenwert einer Zeile ändern
146
3.2.2 Mehrere Spaltenwerte einer Zeile gleichzeitig ändern
147
3.2.3 Spaltenwerte einer Spalte für mehrere Zeilen gleichzeitig ändern
148
3.2.4 Allen Spaltenwerten einer Spalte einen Wert zuordnen
150
3.2.5 Spaltenwerten mit einer UPDATE-Anweisung einen NULL-Wert zuweisen
151
3.2.6 Schlüsselwertspalten mit UPDATE einen neuen Wert zuweisen
152
3.2.7 Übungen
154
3.3 Zeilen mit einer DELETE-Anweisung löschen
156
3.3.1 Eine Zeile einer Tabelle löschen
157
3.3.2 Mehrere Zeilen einer Tabelle gleichzeitig löschen
158
3.3.3 Alle Zeilen einer Tabelle gleichzeitig löschen
158
3.3.4 Übungen
159
3.4 Alle Zeilen einer Tabelle mit einer TRUNCATE-Anweisung löschen
161
3.4.1 Die TRUNCATE-Anweisung anwenden
161
3.4.2 Übungen zum Thema »Alle Zeilen einer Tabelle mit einer TRUNCATE-Anweisung löschen«
162
4 Tabellen anlegen (CREATE TABLE)
165
4.1 Datentypen
165
4.1.1 Datentypen für ganze Zahlen
169
4.1.2 Datentypen für rationale Zahlen
171
4.1.3 Datentypen für Datum und Zeit
172
4.1.4 Datentypen für Zeichenketten
173
4.1.5 Übungen
176
4.2 Datentypen umwandeln
179
4.3 Explizite und implizite Typkonvertierung
180
4.3.1 Explizite Typkonvertierung
180
4.3.2 Implizite Typkonvertierung
181
4.3.3 Übungen
186
4.4 Einfache Tabellen mit CREATE TABLE erstellen
187
4.4.1 Zielstruktur der Tabelle
187
4.4.2 Tabellen mit der CREATE TABLE-Anweisung anlegen
188
4.4.3 Tabellen mit einer DROP-Anweisung löschen
191
4.4.4 Eine Tabelle mit einem Primärschlüssel ausstatten
192
4.4.5 Automatisch hochzählende numerische Primärschlüsselspalten festlegen
194
4.4.6 Reservierte Schlüsselwörter
197
4.4.7 Übungen
198
4.5 Spalten Einschränkungen (CONSTRAINTS) zuordnen
199
4.5.1 Spalten als Pflichtfelder (NOT NULL) definieren
199
4.5.2 Spalten mit einer UNIQUE-Einschränkung versehen
203
4.5.3 Standardwerte mit DEFAULT für Spalten festlegen
205
4.5.4 Bedingungen mit einer CHECK-Einschränkung für Spalten festlegen
207
4.5.5 Übungen
210
4.6 Spalten auf Tabellenebene Einschränkungen (CONSTRAINT) zuordnen
214
4.6.1 Einen Primärschlüssel auf Tabellenebene festlegen
214
4.6.2 Eine UNIQUE-Einschränkung auf Tabellenebene festlegen
218
4.6.3 Eine CHECK-Einschränkung auf Tabellenebene festlegen
221
4.6.4 Übungen
223
5 Mengenoperationen anwenden
229
5.1 Mengenoperationen auf Ergebnistabellen anwenden
229
5.1.1 Eine Vereinigungsmenge aus zwei Mengen bilden
229
5.1.2 Eine Schnittmenge bilden
233
5.1.3 Eine Differenzmenge bilden
235
5.2 Eine Vereinigungsmenge bilden (UNION)
236
5.2.1 Vereinigungsmengen von Ergebnistabellen bilden
237
5.2.2 Übungen
243
5.3 Die Schnittmenge von Ergebnistabellen bilden (INTERSECT)
245
5.3.1 Schnittmengen von Ergebnistabellen
245
5.3.2 Übungen
247
5.4 Eine Differenzmenge aus Ergebnistabellen bilden (EXCEPT)
250
5.4.1 Differenzmenge von Ergebnismengen bilden
250
5.4.2 Übungen
251
5.5 Mengenoperationen in Kombination mit einer WHERE-Klausel verwenden
253
5.5.1 Vor einer Vereinigungsoperation mit UNION filtern
253
5.5.2 Übung
254
5.6 Vereinigungsmengen in Kombination mit einer ORDER BY-Klausel
255
5.6.1 Übungen
256
6 Benutzer, Rollen und ihre Berechtigungen
259
6.1 Benutzer anlegen (CREATE USER)
260
6.1.1 Nutzer in einer MySQL- oder MariaDB-Datenbank anlegen
260
6.1.2 Nutzer in einer PostgreSQL-Datenbank anlegen
260
6.1.3 Nutzer in einer MS SQL Server-Datenbank anlegen
261
6.2 Benutzer entfernen
261
6.3 Eine Verbindung für einen Datenbankbenutzer erstellen
262
6.3.1 Verbindung für eine MySQL-Datenbank einrichten
262
6.3.2 Verbindung für eine MariaDB-Datenbank herstellen
263
6.3.3 Verbindung für eine PostgreSQL-Datenbank herstellen
264
6.3.4 Verbindung für eine MS SQL Server-Datenbank herstellen
267
6.4 Berechtigungen verwalten
268
6.4.1 Berechtigungen vergeben (GRANT)
268
6.4.2 Berechtigungen entziehen (REVOKE)
270
6.5 Mit Rollen Berechtigungen zuordnen
270
6.5.1 Rollen anlegen (CREATE ROLE)
270
6.5.2 Rollen mit Berechtigungen ausstatten
271
6.5.3 Rollen Datenbanknutzern zuordnen
271
6.5.4 Rollen Berechtigungen entziehen
272
6.5.5 Rollen entfernen
272
6.6 Übungen
273
7 Datenbanken modellieren
279
7.1 Anforderungskatalog
279
7.2 Entitäten identifizieren und modellhaft abbilden
280
7.2.1 Entitäten identifizieren
280
7.2.2 Informationen zu den Entitäten ermitteln
281
7.2.3 Schlüsselattribute für Entitäten identifizieren
281
7.2.4 Die Wertebereiche von Attributen erkennen
284
7.2.5 Zwischen Pflichtattributen und optionalen Attributen unterscheiden
286
7.3 Beziehungen zwischen Entitäten festlegen
287
7.3.1 Beziehungen im Entity-Relationship-Modell definieren
288
7.3.2 Kardinalitäten von Beziehungen erkennen
289
7.3.3 Eine besondere 1:n-Beziehung – oder Entitäten, die auf sich selbst verweisen
296
7.3.4 Starke und schwache Entitäten unterscheiden
298
7.3.5 Die Beziehungstypen »identifying« und »non-identifying«
301
7.4 Datenmodelle in der UML-Notation darstellen
302
7.5 Übungen
305
8 Datenmodelle optimieren (Normalisierung)
309
8.1 Redundanzen erkennen
309
8.1.1 Was ist eine Redundanz?
309
8.1.2 Was bedeutet Normalisierung?
311
8.2 Die 1. Normalform anwenden
312
8.3 Die 2. Normalform anwenden
314
8.4 Die 3. Normalform anwenden
316
8.5 Denormalisierung
318
8.6 Übungen
320
9 Datenmodelle in Tabellen überführen
323
9.1 Die Ausbildungsdatenbank anlegen
323
9.1.1 Eine neue Datenbank mit UTF-8-Zeichensatz anlegen (MySQL, MariaDB)
324
9.1.2 Eine neue Datenbank mit UTF-8-Zeichensatz anlegen (PostgreSQL)
324
9.1.3 Eine neue Datenbank mit Unicode-Zeichensatz anlegen (MS SQL Server)
324
9.1.4 Übung
325
9.2 Tabellen mit Beziehungen zu anderen Tabellen erstellen
325
9.2.1 Die Ausbildungsdatenbank im Modell erfassen
325
9.2.2 Tabellen erstellen, die in einer 1:1-Beziehung stehen
326
9.2.3 Tabellen erstellen, die in einer 1:n-Beziehung stehen
328
9.2.4 Tabellen erstellen, die in einer m:n-Beziehung stehen
330
9.2.5 Tabellen erstellen, die zu sich selbst in Beziehung stehen
331
9.3 Übung
332
9.4 Die referenzielle Integrität verstehen
334
10 Operationen auf Tabellen in Beziehungen anwenden
341
10.1 Zeilen in Tabellen einfügen, die in Beziehung zueinander stehen
341
10.1.1 Zeilen in die Tabelle »auszubildender« einfügen
341
10.1.2 Zeilen in die Tabelle »ausbildungsberuf« einfügen
342
10.1.3 Zeilen in die Tabelle »lehrfach« einfügen
342
10.1.4 Zeilen in die Tabelle »adresse« (inklusive der Beziehungen) einfügen
343
10.1.5 Zeilen in die Tabelle »ausbildungsvertrag« (inklusive der Beziehungen) einfügen
344
10.1.6 Zeilen in die Tabelle »beruflehrfach« (inklusive der Beziehungen) einfügen
344
10.1.7 Zeilen in die Tabelle »mitarbeiterausbildungsbetrieb« (inklusive der Beziehungen) einfügen
345
10.1.8 Übungen
347
10.2 Zeilen aus Tabellen, die in Beziehung stehen, mit JOIN verbunden abfragen
351
10.2.1 Zeilen mit einem INNER JOIN verbinden
352
10.2.2 Zeilen mit einem LEFT OUTER JOIN verbinden
354
10.2.3 Zeilen mit einem RIGHT OUTER JOIN verbinden
357
10.2.4 Zeilen mit einem FULL OUTER JOIN verbinden
360
10.2.5 Einen FULL OUTER JOIN unter MySQL oder MariaDB nachbilden
362
10.2.6 Zeilen mit einem CROSS JOIN verbinden
366
10.2.7 Zeilen von drei Tabellen mit einem INNER JOIN verbinden
368
10.2.8 Spalten in einem JOIN über Tabellennamen referenzieren
370
10.2.9 Spalten in einem JOIN über Tabellenaliasse referenzieren
373
10.2.10 Zeilen mit einem Self Join verbinden
375
10.2.11 Zeilen mit einem INNER JOIN ohne Schlüsselvergleich verbinden
377
10.2.12 Übungen
379
10.3 Beziehungen (Schlüsselbeziehungen) ändern
388
10.3.1 Beziehungen aus Zeilen aus einer Kindtabelle ändern
388
10.3.2 Beziehungen aus Zeilen einer Elterntabelle ändern (ON UPDATE CASCADE)
390
10.3.3 Übungen
394
10.4 Beziehungen (Schlüsselbeziehungen) aufheben oder löschen
399
10.4.1 Zeilen aus Kindtabellen auf NULL setzen
399
10.4.2 Zeilen aus Kindtabellen löschen
402
10.4.3 Zeilen aus Elterntabellen löschen
403
10.4.4 Übungen
406
11 Transaktionen
411
11.1 Forderungen an relationale Datenbanksysteme
412
11.2 Transaktionen verstehen
414
11.2.1 Allgemeiner Aufbau einer Transaktion
414
11.2.2 Einen atomaren Datenzustand mit Transaktionen sicherstellen
415
11.2.3 Transaktionen mit ROLLBACK rückgängig machen
416
11.2.4 Operationen mit Transaktionen isoliert ausführen
419
11.3 Übungen
421
12 Tabellenstrukturen verändern
423
12.1 Eine Tabelle umbenennen
423
12.2 Spalten einer Tabelle ändern
425
12.2.1 Eine Spalte umbenennen
425
12.2.2 Den Datentyp einer Spalte ändern
427
12.2.3 Eine Spalte als Primärschlüsselspalte definieren
429
12.2.4 Einer Spalte eine NOT NULL-Einschränkung zuordnen
430
12.2.5 Einer Spalte eine NULL-Einschränkung zuordnen
431
12.2.6 Einer Spalte einen Standardwert (DEFAULT VALUE) zuordnen
432
12.2.7 Einer Spalte eine UNIQUE-Einschränkung zuordnen
435
12.2.8 Eine Spalte mit einer CHECK-Einschränkung versehen
436
12.3 Spalten hinzufügen und entfernen
438
12.3.1 Einer Tabelle eine Spalte hinzufügen
438
12.3.2 Eine Spalte aus einer Tabelle entfernen
439
12.4 Beziehungen zwischen Tabellen herstellen und entfernen
440
12.5 Übungen
443
13 Mit SQL rechnen
451
13.1 Spaltenwerte addieren
452
13.2 Spaltenwerte subtrahieren
454
13.3 Spaltenwerte multiplizieren
455
13.4 Spaltenwerte dividieren
455
13.5 Den Restwert einer Division von Spaltenwerten berechnen
456
13.6 Nach dem Ergebnis einer Berechnung filtern
457
13.7 Nach dem Ergebnis einer Berechnung sortieren lassen
458
13.8 Übungen
459
14 Skalarfunktionen anwenden
463
14.1 Funktionen für Textwerte
464
14.1.1 Zeichenkette in Kleinbuchstaben umwandeln (LOWER)
465
14.1.2 Spaltenwerte in Großbuchstaben umwandeln (UPPER)
465
14.1.3 Spaltenwerte von führenden und endenden Leerzeichen befreien (TRIM)
466
14.1.4 Text aus Spaltenwerten extrahieren (SUBSTRING)
469
14.1.5 Textspaltenwerte verkettet ausgeben
471
14.1.6 Übungen
474
14.2 Funktionen für Zahlenwerte
476
14.2.1 Die Länge einer Zeichenkette ermitteln (CHAR_LENGTH, LEN)
477
14.2.2 Die Startposition einer Zeichenkette in einem Textwert ermitteln (POSITION, CHARINDEX)
478
14.2.3 Potenzen berechnen (POWER)
479
14.2.4 Eine Quadratwurzel berechnen (SQRT)
480
14.2.5 Übungen
481
14.3 Verschachtelte Funktionsaufrufe
482
14.3.1 Übungen
486
15 Bedingungslogik
487
15.1 Die CASE-Klausel
487
15.2 Bedingungslogik in einer Spaltenauswahlliste einer SELECT-Anweisung anwenden
488
15.3 Bedingungslogik in einer ORDER BY-Klausel anwenden
490
15.4 Übungen
492
16 Mit Zeit und Datum arbeiten
495
16.1 Datumsformate
496
16.2 Skalarfunktionen für Zeit- und Datumsangaben in SQL nutzen
496
16.2.1 Datum, Zeit und Zeitstempel vom Datenbankserver ermitteln lassen
497
16.2.2 Ergebnislisten mit einem Berichtsdatum versehen
498
16.2.3 Übungen
499
16.3 Zeit- und Datumsangaben formatieren
499
16.3.1 Datumsformatierung unter MySQL und MariaDB (DATE_FORMAT)
500
16.3.2 Datumsformatierung unter PostgreSQL (TO_CHAR)
505
16.3.3 Datumsformatierung unter MS SQL Server (FORMAT)
510
16.3.4 Übungen
514
16.4 Datumsangaben extrahieren (EXTRACT)
515
16.4.1 Übungen
519
16.5 Mit Datumsangaben rechnen
520
16.5.1 Mit Datumswerten rechnen unter MySQL und MariaDB
521
16.5.2 Mit Datumswerten rechnen unter PostgreSQL
523
16.5.3 Mit Datumswerten rechnen unter MS SQL Server
524
16.5.4 Übungen
526
17 Spaltenwerte gruppieren (GROUP BY)
529
17.1 Die Aggregatfunktion COUNT anwenden
530
17.1.1 Übungen
535
17.2 Die Aggregatfunktion SUM anwenden
535
17.2.1 Übungen
536
17.3 Die Aggregatfunktion AVG anwenden
537
17.3.1 Übungen
538
17.4 Die Aggregatfunktion MAX anwenden
539
17.4.1 Übungen
540
17.5 NULL-Werte berücksichtigen
541
17.5.1 Übungen
545
17.6 Nach aggregierten Werten einer Gruppierung filtern (HAVING)
545
17.6.1 Übungen
547
17.7 Nach zwei oder mehr Spalten gruppieren
548
17.7.1 Übungen
550
18 Mächtiges Werkzeug: Die Unterabfragen (Subqueries)
553
18.1 Unterabfragen, die in Korrelation zueinander stehen
554
18.1.1 Übungen
558
18.2 Unterabfragen, die nicht in Korrelation zueinander stehen
560
18.2.1 Übungen
565
18.3 Vergleichsoperatoren auf Unterabfragen mit ANY, SOME und ALL anwenden
566
18.3.1 Übungen
569
18.4 Auf die Existenz von Ergebniszeilen aus Unterabfragen prüfen (EXISTS)
571
18.4.1 Übungen
574
19 Views: Abfragen in virtuellen Tabellen speichern
575
19.1 Einfache Views anlegen
576
19.1.1 Übungen
579
19.2 Views und ORDER BY
581
19.2.1 Übungen
583
19.3 INSERT, UPDATE und DELETE auf Views anwenden
584
19.3.1 Eine INSERT-Anweisung auf Views anwenden
584
19.3.2 Eine UPDATE-Anweisung auf Views anwenden
588
19.3.3 Eine DELETE-Anweisung auf Views anwenden
590
19.3.4 Views, auf die keine INSERT-, DELETE- oder UPDATE-Anweisung angewendet werden kann
592
19.3.5 Übungen
593
19.4 Views entfernen oder ersetzen
596
19.4.1 Übungen
597
20 Abfragen mit einem Index optimieren
599
20.1 Einführung
599
20.2 Syntax: Index erstellen
602
20.3 Eine Tabelle mit vielen Zeilen generieren
602
20.4 Einen Index für eine Tabelle anlegen
604
20.5 Einen Index über mehrere Spalten anlegen
606
20.6 Den Index einer Tabelle löschen
609
20.7 Fremdschlüsselspalten indexieren
609
20.8 Übungen
613
21 Skalarfunktionen entwickeln
617
21.1 Funktionen mit einem Rückgabewert erstellen
618
21.1.1 MySQL und MariaDB
619
21.1.2 PostgreSQL
621
21.1.3 MS SQL Server
622
21.2 Funktionen mit Parameter entwickeln
623
21.2.1 MySQL und MariaDB
624
21.2.2 PostgreSQL
625
21.2.3 MS SQL Server
626
21.3 Funktionen entfernen
627
21.4 Übungen
628
22 Prozeduren entwickeln
631
22.1 Prozeduren ausführen
631
22.2 Prozeduren anlegen
632
22.2.1 Prozeduren anlegen (MySQL und MariaDB)
632
22.2.2 Prozeduren anlegen (PostgreSQL)
634
22.2.3 Prozeduren anlegen (MS SQL Server)
635
22.3 Übung
636
Index
639