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

Ralf Adams

SQL

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

2019

490 Seiten

Format: PDF, ePUB, Online Lesen

E-Book: €  23,99

E-Book kaufen

E-Book kaufen

ISBN: 9783446462748

 

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