SQL - Der Grundkurs für Ausbildung und Praxis. Mit Beispielen in MySQL/MariaDB

Ralf Adams

SQL

Der Grundkurs für Ausbildung und Praxis. Mit Beispielen in MySQL/MariaDB

2016

576 Seiten

Format: PDF, Online Lesen

E-Book: €  25,99

E-Book kaufen

E-Book kaufen

ISBN: 9783446450790

 

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