SQL - Ralf Adams - E-Book

SQL E-Book

Ralf Adams

0,0

Beschreibung

Lernen Sie SQL ohne Datenbank-Vorkenntnisse
Als Einsteiger:in werden Sie in diesem Buch Schritt für Schritt an die Arbeit mit SQL herangeführt. Vom Aufbau über das Ändern einer Datenbank und die Auswertung der Daten bis hin zur Administration und zum Verteilen der Datenbank auf verschiedene Server lernen Sie alle wesentlichen Aufgabenstellungen kennen. Die Beispiele sind für MySQL/MariaDB, PostgreSQL und T-SQL getestet.

Grundlagen und praktischer Einsatz
Sie erhalten eine kurze Einführung in die wichtigsten Grundbegriffe und Designregeln für relationale Datenbanken wie ER-Modell, Schlüssel, referenzielle Integrität und Normalformen. Anhand einer Beispieldatenbank, die unter MySQL/MariaDB, PostgreSQL und T-SQL verwendet werden kann, erfahren Sie dann, wie Sie SQL sinnvoll anwenden.

Kenntnisse mit Übungsaufgaben festigen
Jedes Kapitel enthält Übungen, mit denen Sie Ihr frisch erworbenes Wissen testen können. Wenn Sie SQL-Befehle einfach nachschlagen wollen, hilft Ihnen der MySQL-Befehlsindex am Ende des Buches. Darüber hinaus geht der Autor auch auf weiterführende Themen wie NoSQL und SQL Injection ein, die Lust machen, sich über den Grundkurs hinaus vertiefend mit SQL zu beschäftigen.

Unter plus.hanser-fachbuch.de finden Sie die Beispieldatenbank mit rund 1.170 SQL-Anweisungen und die Lösungen zu den Übungsaufgaben zum Download.

Ihr exklusiver Vorteil: E-Book inside beim Kauf des gedruckten Buches

Sie lesen das E-Book in den Legimi-Apps auf:

Android
iOS
von Legimi
zertifizierten E-Readern

Seitenzahl: 814

Das E-Book (TTS) können Sie hören im Abo „Legimi Premium” in Legimi-Apps auf:

Android
iOS
Bewertungen
0,0
0
0
0
0
0
Mehr Informationen
Mehr Informationen
Legimi prüft nicht, ob Rezensionen von Nutzern stammen, die den betreffenden Titel tatsächlich gekauft oder gelesen/gehört haben. Wir entfernen aber gefälschte Rezensionen.



Ralf Adams

SQL

Der Grundkurs für Ausbildung und Praxis

Mit Beispielen in MySQL/MariaDB, PostgreSQL und T-SQL

5. Auflage

Ihr Plus – digitale Zusatzinhalte!

Auf unserem Download-Portal finden Sie zu diesem Titel kostenloses Zusatzmaterial.

Geben Sie auf plus.hanser-fachbuch.de einfach diesen Code ein:

plus-6qrL3-2dsm7

Der Autor:

Ralf Adams, BochumKontakt: [email protected]

Alle in diesem Werk enthaltenen Informationen, Verfahren und Darstellungen wurden nach bestem Wissen zusammengestellt und mit Sorgfalt getestet. Dennoch sind Fehler nicht ganz auszuschließen. Aus diesem Grund sind die im vorliegenden Werk enthaltenen Informationen mit keiner Verpflichtung oder Garantie irgendeiner Art verbunden. Autor und Verlag übernehmen infolgedessen keine juristische Verantwortung und werden keine daraus folgende oder sonstige Haftung übernehmen, die auf irgendeine Art aus der Benutzung dieser Informationen – oder Teilen davon – entsteht. Ebenso wenig übernehmen Autor und Verlag die Gewähr dafür, dass beschriebene Verfahren usw. frei von Schutzrechten Dritter sind. Die Wiedergabe von Gebrauchsnamen, Handelsnamen, Warenbezeichnungen usw. in diesem Werk berechtigt also auch ohne besondere Kennzeichnung nicht zu der Annahme, dass solche Namen im Sinne der Warenzeichen- und Markenschutz-Gesetzgebung als frei zu betrachten wären und daher von jedermann benutzt werden dürften.Die endgültige Entscheidung über die Eignung der Informationen für die vorgesehene Verwendung in einer bestimmten Anwendung liegt in der alleinigen Verantwortung des Nutzers.

Aus Gründen der besseren Lesbarkeit wird auf die gleichzeitige Verwendung der Sprachformen männlich, weiblich und divers (m/w/d) verzichtet. Sämtliche Personenbezeichnungen gelten gleichermaßen für alle Geschlechter.

Bibliografische Information der Deutschen Nationalbibliothek:Die Deutsche Nationalbibliothek verzeichnet diese Publikation in der Deutschen Nationalbibliografie; detaillierte bibliografische Daten sind im Internet über http://dnb.d-nb.de abrufbar.

Dieses Werk ist urheberrechtlich geschützt.Alle Rechte, auch die der Übersetzung, des Nachdruckes und der Vervielfältigung des Buches, oder Teilen daraus, vorbehalten. Kein Teil des Werkes darf ohne schriftliche Genehmigung des Verlages in irgendeiner Form (Fotokopie, Mikrofilm oder ein anderes Verfahren), auch nicht für Zwecke der Unterrichtsgestaltung – mit Ausnahme der in den §§ 53, 54 URG genannten Sonderfälle –, reproduziert oder unter Verwendung elektronischer Systeme verarbeitet, vervielfältigt oder verbreitet werden.

© 2024 Carl Hanser Verlag München, http://www.hanser-fachbuch.deLektorat: Sylvia HasselbachCopy editing: Sandra Gottmann, WasserburgLayout: der Autor mit LaTeXCoverkonzept: Marc Müller-Bremer, www.rebranding.de, MünchenCovergestaltung und Titelmotiv: Tom West, unter Verwendung von Grafiken von© shutterstock.com/Viktorus

Print-ISBN:        978-3-446-47913-5E-Book-ISBN:   978-3-446-47919-7E-Pub-ISBN:     978-3-446-48028-5

Dieses Buch möchte ich allen Lehrerinnen und Lehrern der ehemaligen Aufbaurealschule in Eslohe, Sauerland, widmen.

Besonders denke ich dabei an meinen Klassenlehrer und späteren Schulleiter, Herrn Schmidt. Durch Ihr stetes Bemühen um jeden Einzelnen sind Sie mir menschlich und als Lehrer ein Vorbild.

Inhalt

Titelei

Impressum

Inhalt

Vorwort zur 5. Auflage

Teil I Was man so wissen sollte

1 Datenbanksystem

1.1 Aufgaben und Komponenten

1.1.1 Datenbank

1.1.2 Datenbankmanagementsystem

1.2 Im Buch verwendete Server

1.2.1 MySQL und MariaDB

1.2.2 PostgreSQL

1.2.3 Microsoft SQL Server

2 Relationale Datenbanken

2.1 Einführung

2.1.1 Abgrenzung zu anderen Datenbanken

2.1.2 Tabelle, Zeile und Spalte

2.1.3 Schlüssel, Primärschlüssel und Fremdschlüssel

2.2 Kardinalitäten und ER-Modell

2.2.1 Darstellung von Tabellen im ER-Modell

2.2.2 1:1-Verknüpfung

2.2.2.1 Wann liegt eine 1:1-Verknüpfung vor?

2.2.2.2 Wie kann ich eine 1:1-Verknüpfung darstellen?

2.2.2.3 Kann ich die Kardinalität genauer beschreiben?

2.2.3 1:n-Verknüpfung

2.2.3.1 Wann liegt eine 1:n-Verknüpfung vor?

2.2.3.2 Wie kann ich eine 1:n-Verknüpfung darstellen?

2.2.3.3 Kann ich die Kardinalität genauer beschreiben?

2.2.4 n:m-Verknüpfung

2.2.4.1 Wann liegt eine n:m-Verknüpfung vor?

2.2.4.2 Wie kann ich eine n:m-Verknüpfung darstellen?

2.2.4.3 Kann ich die Kardinalität genauer beschreiben?

2.2.5 Aufgaben zum ER-Modell

2.3 Referenzielle Integrität

2.3.1 Verletzung der referenziellen Integrität durch Löschen

2.3.2 Verletzung der referenziellen Integrität durch Änderungen

2.4 Normalformen

2.4.1 Normalform 1

2.4.2 Normalform 2

2.4.3 Normalform 3

2.4.4 Normalform Rest

3 Unser Beispiel: Ein Online-Shop

3.1 Kundenverwaltung

3.2 Artikelverwaltung

3.3 Bestellwesen

Teil II Datenbank aufbauen

4 Installation des Servers

4.1 MySQL unter Windows 11

4.2 MariaDB unter Windows 11

4.3 Andere Installationen mit Docker

4.3.1 MySQL

4.3.2 MariaDB

4.3.3 PostgreSQL

4.3.4 Microsoft SQL Server

5 Datenbank und Tabellen anlegen

5.1 Die Programmiersprache SQL

5.2 Anlegen der Datenbank

5.2.1 Wie rufe ich den MySQL Client auf?

5.2.2 Wie lege ich eine Datenbank an?

5.2.3 Wie lösche ich eine Datenbank?

5.2.4 Wie weise ich einen Zeichensatz zu?

5.2.5 Wie weise ich eine Sortierung zu?

5.3 Anlegen der Tabellen

5.3.1 Welche Datentypen gibt es?

5.3.2 Wie lege ich eine Tabelle an?

5.3.3 Wann eine Aufzählung (ENUM) und wann eine neue Tabelle?

5.3.4 Wann ein DECIMAL und wann ein DOUBLE?

5.3.5 Wann verwende ich NOT NULL?

5.3.6 Wie lege ich einen Fremdschlüssel fest?

5.3.7 Wie kann ich Tabellen aus anderen herleiten?

5.3.8 Ich brauche mal eben kurz ’ne Tabelle!

6 Indizes anlegen

6.1 Index für Anfänger

6.1.1 Wann wird ein Index automatisch erstellt?

6.1.2 Wie kann ich einen Index manuell erstellen?

6.2 Und jetzt etwas genauer

6.2.1 Wie kann ich die Schlüsseleigenschaft erzwingen?

6.2.2 Wie kann ich Dubletten verhindern?

6.2.3 Was bedeutet Indexselektivität?

6.2.4 Wie kann ich einen Index löschen?

7 Werte in Tabellen einfügen

7.1 Daten importieren

7.1.1 Das CSV-Format

7.1.2 CSV-Daten laden mit LOAD DATA INFILE

7.1.3 Was ist, wenn ich geänderte Werte importieren will?

7.2 Daten anlegen

7.2.1 Wie lege ich mehrere Zeilen mit einem Befehl an?

7.2.2 Wie kann ich eine einzelne Zeile anlegen?

7.2.3 Vorsicht Constraints!

7.2.4 Einfügen von binären Daten über einen C#-Client

7.2.5 Einfügen von binären Daten LOAD FILE

7.3 Daten kopieren

Teil III Datenbank ändern

8 Datenbank und Tabellen umbauen

8.1 Eine Datenbank ändern

8.2 Eine Datenbank löschen

8.3 Eine Tabelle ändern

8.3.1 Wie kann ich den Namen der Tabelle ändern?

8.3.2 Wie kann ich eine Spalte hinzufügen?

8.3.3 Wie kann ich die Spezifikation einer Spalte ändern?

8.3.4 Zeichenbasierte Spalten in der Länge verändern

8.3.5 Zeichensatz verändern

8.3.6 Zeichenbasierte Spalten in numerische Spalten verändern

8.3.7 Numerische Spalten im Wertebereich verändern

8.3.8 Datum- oder Zeitspalten verändern

8.3.9 Wie kann ich aus einer Tabelle Spalten entfernen?

8.4 Eine Tabelle löschen

8.4.1 Einfach löschen

8.4.2 Was bedeuten CASCADE und RESTRICT?

9 Werte in Tabellen verändern

9.1 WHERE-Klausel

9.1.1 Wie formuliere ich eine einfache Bedingung?

9.1.2 Wird zwischen Groß- und Kleinschreibung unterschieden?

9.1.3 Wie formuliere ich eine zusammengesetzte Bedingung?

9.2 Tabelleninhalte verändern

9.2.1 Szenario 1: Einfache Wertzuweisung

9.2.2 Szenario 2: Berechnete Werte

9.2.3 Szenario 3: Gebastelte Zeichenketten

9.2.4 Was bedeuten LOW_PRIORITY und IGNORE?

9.3 Tabelleninhalte löschen

9.3.1 Und was passiert bei Constraints?

9.3.2 Was passiertmit dem AUTO_INCREMENT?

9.3.3 Was bedeuten LOW_PRIORITY, QUICK und IGNORE?

9.3.4 Wie kann ich eine Tabelle komplett leeren?

Teil IV Datenbank auswerten

10 Einfache Auswertungen

10.1 Ausdrücke

10.1.1 Konstanten

10.1.2 Wie kann ich Berechnungen vornehmen?

10.1.3 Wie ermittele ich Zufallszahlen?

10.1.4 Wie stecke ich das Berechnungsergebnis in eine Variable?

10.2 Zeilen- und Spaltenwahl

10.3 Sortierung

10.3.1 Was muss ich bei der Sortierung von Texten beachten?

10.3.2 Wird zwischen Groß- und Kleinschreibung unterschieden?

10.3.3 Wie werden Datums- und Uhrzeitwerte sortiert?

10.3.4 Wie kann ich das Sortieren beschleunigen?

10.4 Mehrfachausgaben unterbinden

10.4.1 Fallstudie: Datenimport von Bankdaten

10.4.2 Was muss ich beim DISTINCT bzgl. der Performance beachten?

10.5 Ergebnismenge ausschneiden

10.5.1 Wie kann ich die ersten n Datensätze ausschneiden?

10.5.2 Wie kann ich Teilmengen mittendrin ausschneiden?

10.6 Ergebnisse exportieren

10.6.1 Wie lege ich eine Exportdatei auf dem Server an?

10.6.2 Wie lege ich eine Exportdatei auf dem Client an?

10.6.3 Wie lese ich mithilfe eines C#-Client binäre Daten aus?

11 Tabellen verbinden

11.1 Heiße Liebe: Primär-Fremdschlüsselpaare

11.2 INNER JOIN zwischen zwei Tabellen

11.2.1 Bauanleitung für einen INNER JOIN

11.2.2 Abkürzende Schreibweisen

11.2.3 Als Datenquelle für temporäre Tabellen

11.2.4 JOIN über Nichtschlüsselspalten

11.3 INNER JOIN über mehr als zwei Tabellen

11.4 Es muss nicht immer heiße Liebe sein: OUTER JOIN

11.5 Narzissmus pur: Self Join

11.6 Eine Verknüpfung beschleunigen

12 Differenzierte Auswertungen

12.1 Statistisches mit Aggregatfunktionen

12.2 Tabelle in Gruppen zerlegen

12.3 Gruppenergebnisse filtern

12.4 Noch Fragen?

12.4.1 Kann ich nach Ausdrücken gruppieren?

12.4.2 Kann ich nach mehr als einer Spalte gruppieren?

12.4.3 Wie kann ich GROUP BY beschleunigen?

12.4.4 Parallele Bearbeitung – unterschiedliche Ergebnisse?

12.5 Aufgaben

13 Auswertungen mit Unterabfragen

13.1 Das Problem und die Lösung

13.2 Nicht korrelierende Unterabfrage

13.2.1 Skalarunterabfrage

13.2.1.1 Beispiel 1: Banken mit höchster BLZ

13.2.1.2 Beispiel 2: Überdurchschnittlich teure Artikel

13.2.1.3 Beispiel 3: Überdurchschnittlich wertvolle Bestellungen

13.2.2 Listenunterabfrage

13.2.2.1 Beispiel 1: IN()

13.2.2.2 Beispiel 2: ALL()

13.2.2.3 Beispiel 3: ALL()

13.2.2.4 Beispiel 4: ANY()

13.2.2.5 Unterschied zwischen IN(), ALL() und ANY()

13.2.2.6 Unterschied zwischen NOT IN() und <> ALL()

13.2.3 Tabellenunterabfrage

13.3 Korrelierende Unterabfrage

13.3.1 Beispiel 1: Rechnungen mit vielen Positionen

13.3.2 Beispiel 2: EXISTS

13.4 Common Table Expression versus Unterabfrage

13.5 Fallstudie Datenimport

13.6 Wie ticken Unterabfragen intern?

13.7 Aufgaben

14 Mengenoperationen

14.1 Die Vereinigung mit UNION

14.2 Die Schnittmenge

14.2.1 Mit INTERSECT

14.2.2 Mit Unterabfragen

14.3 Die Differenzmenge

14.3.1 Mit EXCEPT

14.3.2 Mit Unterabfragen

14.4 UNION, INTERSECT und EXCEPT ... versteh’ ich nicht!

15 Bedingungslogik

15.1 Warum ein CASE?

15.2 Einfacher CASE

15.3 Searched CASE

15.4 Fallbeispiele

15.4.1 Lagerbestand überprüfen

15.4.2 Kundengruppen ermitteln

15.4.3 Aktive Lieferanten ermitteln

15.4.4 Aufgaben

16 Ansichtssache

16.1 Was ist eine Ansicht?

16.1.1 Wie lege ich eine Ansicht an?

16.1.2 Wie wird eine Ansicht verarbeitet?

16.1.3 Wie lösche ich eine Ansicht?

16.1.4 Wie ändere ich eine Ansicht?

16.2 Anwendungsgebiet: Vereinfachung

16.3 Anwendungsgebiet: Datenschutz

16.4 Grenzen einer Ansicht

17 Exkurs NoSQL

17.1 Vorbereitung der MySQL-Shell

17.2 Datenmodellierung desWarenkorbs

17.2.1 JavaScript Object Notation (JSON)

17.2.2 Struktur unseres JSON-Dokuments

17.3 NoSQL:MySQLmit JavaScript-Client

17.3.1 Anlegen einesWarenkorbs

17.3.2 Inhalte des Warenkorbs anlegen

17.3.3 Inhalte des Warenkorbs auswerten

17.3.4 Inhalte des Warenkorbs verändern

17.4 NoSQL: klassisches SQL mit JSON-Funktionen

17.4.1 Anlegen einesWarenkorbs

17.4.2 Inhalte des Warenkorbs anlegen

17.4.3 Inhalte des Warenkorbs auswerten

17.4.4 Inhalte des Warenkorbs verändern

17.4.5 Inhalte des Warenkorbs löschen

Teil V Anweisungen kapseln

18 Locking

19 Transaktionen

19.1 Das Problem

19.2 Was ist eine Transaktion?

19.3 Isolationsebenen

19.3.1 READ UNCOMMITTED

19.3.2 READ COMMITTED

19.3.3 REPEATABLE READ

19.3.4 SERIALIZABLE

19.4 Fallbeispiel in C#

19.5 Deadlock

20 Prozeduren

20.1 Einstieg und Variablen

20.2 Verzweigung

20.2.1 Einfache Verzweigung mit IF

20.2.2 Mehrfache Verzweigung mit CASE

20.3 Schleifen

20.3.1 LOOP-Schleife

20.3.2 WHILE-Schleife

20.3.3 REPEAT-Schleife

20.4 Transaktion innerhalb einer Prozedur

20.5 Cursor

20.6 Aufgaben

21 Funktionen

22 Auslöser

22.1 Was ist das?

22.2 Ein Beispiel für einen INSERT-Trigger

22.3 Ein Beispiel für einen UPDATE-Trigger

22.4 Ein Beispiel für einen DELETE-Trigger

23 Ereignisse

23.1 Wie lege ich ein Ereignis an?

23.2 Wie werde ich Ereignisse wieder los?

Teil VI Anhänge

24 Datenbank administrieren

24.1 Daten sichern und wiederherstellen

24.1.1 Backup

24.1.2 Restore

24.2 Benutzerrechte

24.2.1 Benutzerrechte und Privilegien

24.2.2 Benutzer anlegen und Rechte zuweisen

24.2.2.1 CREATE USER bzw. CREATE ROLE

24.2.2.2 Rechte vergeben mit GRANT

24.2.2.3 Rechte entziehen mit REVOKE

24.3 MySQL und MariaDB Engines

25 SQL-Injection

25.1 Das Problem

25.2 Beispiel: Suchmaske

25.3 Gegenmaßnahmen

25.3.1 Never Trust an Unknown Input

25.3.2 Trennung von Anweisungen und Daten

25.3.2.1 Verwenden Sie Prozeduren oder Funktionen

25.3.2.2 Verwenden Sie Prepared Statements

25.3.3 Ich darf nur, was ich soll

25.3.4 Nichtssagende Fehlermeldungen

26 SQL-Referenz

26.1 Datentypen

26.1.1 Numerische Datentypen

26.1.1.1 Ganze Zahlen

26.1.1.2 Gebrochene Zahlen

26.1.2 Zeichen-Datentypen

26.1.3 Datums- und Zeit-Datentypen

26.1.4 Binäre Datentypen

26.1.5 JSON

26.1.6 Räumliche Datentypen

26.1.7 Standardwerte

26.1.8 Zusätze für Datentypen

26.2 Operatoren und Funktionen

26.2.1 Mathematische Operatoren

26.2.2 Mathematische Funktionen

26.2.3 Aggregatfunktionen

26.3 Bedingungen

26.3.1 Vergleichsoperatoren

26.3.2 Logikoperatoren

26.3.2.1 NOT, Negation, ¬

26.3.2.2 AND, Konjunktion, ∧

26.3.2.3 OR, Disjunktion, ∨

26.3.2.4 XOR, Antivalenz, ⊗

26.3.2.5 Verallgemeinerung auf mehr als zwei Operanden

26.4 Befehle

26.4.1 Data Definition Language

26.4.2 DataManipulation Language

26.4.3 Benutzerverwaltung

27 Ausgewählte Quelltexte

27.1 DOUBLE versus DECIMAL

27.2 Rundungsfehler

27.3 NULL versus NOT NULL

27.4 Suchen mit und ohne Index

27.5 Messen der Performance der Einfügeoperation

27.6 Messen der Indexselektivität

27.7 Sortieren ohne und mit Index

28 Quelltexte

28.1 MySQL/MariaDB

28.1.1 Quelltexte zu Teil II

28.1.2 Quelltexte zu Teil III

28.1.3 Quelltexte zu Teil IV

28.1.4 Quelltexte zu Teil V

28.1.5 Quelltexte zu Teil VI

28.2 PostgreSQL

28.2.1 Quelltexte zu Teil II

28.2.2 Quelltexte zu Teil III

28.2.3 Quelltexte zu Teil IV

28.2.4 Quelltexte zu Teil V

28.3 Microsoft SQL Server

28.3.1 Quelltexte zu Teil II

28.3.2 Quelltexte zu Teil III

28.3.3 Quelltexte zu Teil IV

Literatur

Vorwort zur 5. Auflage

Und noch ’n SQL-Buch. Es gibt so viele SQL-Bücher, dass man berechtigt die Frage stellen kann, warum man noch eines braucht. Ich kann die Frage nur indirekt beantworten. Als Lehrer für Anwendungsentwicklung an einemBerufskolleg habe ich über Jahre erlebt, dass die Auszubildenden sich sehr mit den üblichen Büchern abmühen.

Die fachlicheQualität dieser Bücher ist unbestritten. Aber die Sprache ist meist von IT-Profi zu IT-Profi, und genau damit sind Auszubildende und Berufsanfänger oft überfordert – zumindest wird der Einstieg erschwert.

Ich habe daher begonnen, leicht verständliche Skripte zu schreiben, aus denen sich dieses Buch speist. Dabei werden Befehle didaktisch reduziert und Beispielemöglichst lebensnah ausgesucht. Fachbegriffe werden nur verwendet, wenn sie IT-sprachlicher Umgang sind; akademische Begriffe werden vermieden, wobei ich ihre Berechtigung nicht in Abrede stellen möchte.

Primärziel ist ein möglichst umfangreicher Ersteinstieg, der dann durch berufliche Praxis ausgebaut werden kann. Trotzdem vertiefe ich an vielen Stellen im Buch den Einblick in SQL oder den MySQL Server – zum einen, um zu zeigen, dass ich auch ein bisschen was draufhabe, zumanderen, umNeugierde und Jagdtrieb beimLeser1 zu wecken.

Ein weiterer Grund für dieses Buch ist, dass es mir großen Spaß gemacht hat, es zu schreiben. Ich hoffe, dass es Ihnen genau so viel Spaß macht, es zu lesen und damit zu arbeiten. Falls Sie mich fachlich korrigieren oder ergänzen möchten, senden Sie mir doch bitte eine E-Mail an [email protected].

Der Titel des Buches ist SQL und nicht MySQL. Ich habe deshalb an vielen Stellen den Unterschied zwischen SQL-Standard und seinen Dialekten aufgezeigt. Trotzdem wird es schwer sein, die Beispiele einfach so auf andere DBMS zu übertragen. Auf jeden Fall werden Sie ein Verständnis für den allgemeinen Aufbau und die Funktionsweise der Befehle erwerben, sodass Sie leicht die verschiedenen SQL-Dialekte adaptieren können.

       Bitte beachten Sie, dass die Pfadangaben in den Skriptenmit LOAD DATA INFILE angepasst werden müssen, je nachdem, wo Sie die Daten entpacken.

       Ich habe angefangen, für die Aufgaben Musterlösungen bei YouTube (http://www.youtube.com/channel/UCu4ZybNXw1y4Rs4Mgx-4HKw) einzustellen. In diesen Videos kann ich einfach besser erklären, worauf es bei den Lösungen ankommt.

Wenn Sie auf

plus.hanser-fachbuch.de

den Code

plus-6qrL3-2dsm7

eingeben, können Sie Skripte, Beispiele und Musterlösungen downloaden. Diese wurden auf folgenden Servern getestet: MySQL Community Server 8.0.33, MariaDB 10.6.14, MariaDB 11.0.2, PostgreSQL 15.3 und MS SQL Server 2022 16.x. Alle Server liefen in einer Dockerinstanz unter Debian 12 (Bookworm). Für alle Quelltexte, die bis einschließlich Kapitel 16 vorgestellt werden, gibt es Varianten in MySQL/MariaDB, PostgreSQL und T-SQL. Nur bei ganz wenigen Ausnahmen, die durch die Dialekte oder Eigenheiten begründet sind, musste ich auf eine Transkription verzichten.

Seit kurzem gibt es außerdem im Hanser Verlag den Hanser eCampus, das adaptive Kursangebot für die Hochschullehre und die Unternehmensweiterbildung. Hier ist der E-Learning-Kurs Datenbankgrundlagen erschienen, der auf Teil I dieses Buches basiert. Weitere Infos zum Kurs und eine Demoversion finden Sie hier:https://www.hanser-ecampus.de/kurse/informatik/datenbankgrundlagen.

Danksagung

Als Erstes möchte ich mich bei Frau Sylvia Hasselbach vom Hanser Verlag dafür bedanken, dass sie diese Neuauflage – wie schon die Vorauflagen – angestoßen und vorangetrieben hat. Frau Rothe und Frau Gottmann haben sprachliche Ausrutscher und allzu flapsige Formulierungen glatt gebügelt. Das Layout wurde von Frau Irene Weilhart betreut.

Besonders will ich mich bei meinen Schülerinnen und Schülern der Technischen Beruflichen Schule 1 in Bochum (http://www.tbs1.de) bedanken. Die hier vorgestellten Beispiele und Konzepte sind in großen Teilen durch ihre schonungslose Kritik an bestehenden Lehrmaterialien entstanden. Das penetrante Kapier ich nicht! hat mich immer weiter angespornt, es noch verständlicher zu versuchen. Falls dieses Buch SQL gut vermittelt, ist das auch deren Verdienst.

Dass nun aber die 5. Auflage dieses Buchs erscheinen kann, ist in erster Linie Ihnen, liebe Leserinnen und Leser, zu verdanken; dafür ein herzliches Dankeschön!

Ralf Adams, September 2023

1 Der besseren Lesbarkeit wegen verzichte ich auf Weiblich-männlich-Konstruktionen. Bitte verstehen Sie dies nicht als stillschweigende Hinnahme des geringen Frauenanteils in den IT-Berufen.

TEIL IWas man so wissen sollte
1Datenbanksystem
1.1Aufgaben und Komponenten

Es werden die wichtigsten Aufgaben und Komponenten eines Datenbanksystems vorgestellt. Die Begriffe werden lediglich eingeführt, weil sich ein detailliertes Verständnis erst in den nachfolgenden Kapiteln entwickeln kann.

       Grundkurs

       Datenbank

       Datenbankmanagementsystem

       Datenbanksystem

Ein Datenbanksystem besteht aus einem Datenbankmanagementsystem (DBMS) und den Datenbanken (DB). Beide Komponenten sind in der Praxis eng miteinander verzahnt, sollten aber gedanklich unterschieden werden.

In Bild 1.1 ist der Aufbau eines Datenbanksystems schematisch dargestellt. Die Datenbanken enthalten die eigentlichen Daten und unmittelbar damit verknüpfte Datenobjekte wie z.B. eine Ansicht (siehe Kapitel 16). Über eine Kommunikationsschnittstelle werden diese Datenobjekte vom DBMS verwaltet. Das DBMS selbst besteht wiederum aus vielen kleinen Komponenten, die jeweils auf eine Aufgabe spezialisiert sind.

1.1.1Datenbank

Die Aufgabe der Datenbank ist die logische und physische Verwaltung der Daten und damit eng verbundener Datenobjekte. Alle diese Datenobjekte können vom Programmierer angelegt, geändert und gelöscht werden. Die Änderungen beziehen sich sowohl auf die Struktur als auch auf den Inhalt. So können einer Tabelle neue Spalten (z.B. zweiter Vorname bei einer Adresse) als auch neue Zeilen (z.B. eine neue Adresse) hinzugefügt werden.

Üblicherweise werden in einer Datenbank folgende Datenobjekte vorkommen1:

       Tabellen: Bei einer relationalen Datenbank werden die Daten in Tabellen organisiert (Kundentabelle, Artikeltabelle, Filmtabelle usw.). Deshalb sind die Tabellen das Herzstück einer Datenbank. Alle anderen Datenbankobjekte sind aus diesen Tabellen abgeleitet oder verwenden diese.

Bild 1.1Aufbau eines Datenbanksystems

       Temporäre Tabellen: Sie werden explizit vom Programmierer oder implizit vom Optimierer angelegt, um Zwischenergebnisse wiederverwendbar zu machen. In der Regel werden diese automatisch nach Beendigung einer Sitzung gelöscht.

       Indizes:Diese erlauben eine erhebliche Beschleunigung bestimmter Auswertungen. Die Daten aus den Tabellen werden dabei in frei wählbaren, aber festgelegten Reihenfolgen sortiert.

       Ansichten: Auf Vorrat gebastelte Auswertungen, die wie Tabellen verwendet werden können, ohne dabei einen eigenen Datenbestand aufzubauen.

       Prozeduren: Kleine, selbst geschriebene SQL-Programme, die auf dem Server ausgeführt werden.

       Trigger: Auch kleine, selbst geschriebene Programme, die aber automatisch aufgerufen werden, wenn Daten in den entsprechenden Tabellen verändert werden.

       Ereignisse: Schon wieder kleine, selbst geschriebene Programme, die zeitgesteuert aufgerufen werden.

Definition 1: Datenbank (eng)

Unter einer Datenbank im engeren Sinn versteht man eine Informationssammlung, die so strukturiert ist, dass sie zweckgebunden und effizient IT-gestützt verwaltet und ausgewertet werden kann.

Entscheidend ist, dass die Daten strukturiert sind! Jede Informationssammlung, die eine gewisse Struktur hat, kann letztlich von einem Computerprogramm verwaltet und ausgewertet werden. Fehlt die Struktur, sieht das Ganze schon anders aus.

Aufgabe 1.1: Überlegen Sie sich mindestens zwei Beispiele für strukturierte und unstrukturierte Datensammlungen.

In MySQL und MariaDB werden die Datenbanken durch die Storage Engines (z.B. InnoDB bzw. XtraDB) realisiert. Diese legen auf den Festspeicherplatten die Dateien an, in denen die Daten abgespeichert werden. Auch die Zugriffskontrolle erfolgt durch die Storage Engines.

1.1.2Datenbankmanagementsystem

Oben habe ich erwähnt, dass ein Datenbanksystem aus der Datenbank und einem Datenbankmanagementsystem besteht.

Definition 2: Datenbankmanagementsystem (DBMS)

Eine Toolsammmlung zur Verwaltung, Bearbeitung und Auswertung einer Datenbank nennt man Datenbankmanagementsystem (DBMS).

Dies sind die Aufgaben eines DBMS2:

       Sprachinterpreter: Herzstück desDBMS ist der Interpreter3. Dieser übersetzt die Befehle in einen ausführbaren Code. Die Sprache, die wir hier im Buch verwenden werden, ist SQL. Es gibt und gab aber auch andere Datenbankabfragesprachen wie zum Beispiel dBase, VB für MS-Access, OO-SQL, Sequel usw.

       Optimierer: Die Ausführung eines SQL-Befehls kann oft auf verschiedene Art undWeise passieren. Der Optimierer versucht, anhand von Schätzungen und Algorithmen einen Plan für die Ausführung anzulegen, der möglichst schnell abgearbeitet werden kann.

       Sitzungsverwaltung:Wann immer ein Befehl an den Server gesendet werden soll, muss man sich in einer Sitzung (engl. session) befinden. Dazu muss zuerst eine Sitzung geöffnet werden. Jetzt können beliebig viele SQL-Befehle gesendet und Daten empfangen werden. Zum Schluss wird die Sitzung serverseitig – z.B. durch einen Timeout – oder clientseitig beendet.

       Randbedingungsprüfer: Für Tabellen können Randbedingungen (engl. constraints) formuliert werden, die immer gelten müssen. Würde die Ausführung eines Befehls dazu führen, dass diese Randbedingungen nicht erfüllt sind, wird die Ausführung des Befehls in der Regel verweigert.

       Datenschutz: Durch die Vergabe von Zugriffsrechten kann das Recht auf lesende und schreibende Zugriffe so wie auf das Ausführen von Prozeduren passgenau zugeschnitten werden.

       Datensicherheit: Der Verlust von Daten ist der GAU4 schlechthin. Das DBMS muss sicherstellen, dass nicht durch Serverabsturz oder Ähnliches Daten verloren gehen.

       Transaktionsmanagement: Transaktionen ermöglichen parallelen Zugriff und eine Art undo im Fehlerfall. Das zu gewährleisten, erfordert eine Menge Mühe. Die Qualität des Transaktionsmanagements ist oft ein entscheidendes Merkmal eines DMBS.

       API5: Die Daten werden in der Regel durch eine oder mehrere Anwendungen (Clients) bearbeitet. Damit die Anwendung auf das DBMS zugreifen kann, braucht es eine Schnittstelle, über die es zu den Daten gelangt. Diese APIs werden in der MySQL-/MariaDB-Welt Konnektoren genannt. Der MySQL oder MariaDB Server bietet beispielsweise APIs für C, C++, C#/.NET, Node.js PHP, Perl, Python, Ruby und Tcl. Auch stehen APIs für JDBS6 und ODBC7 zur Verfügung. MariaDB kennt zusätzlich noch Schnittstellen zu Erlang, Jupyter, Excel, Swift und R.

       Metadaten: Verwaltungsinformationen, Statistiken etc., eben der ganze Rest.

Der Begriff Datenbankmanagementsystem wird oft anstelle von Datenbanksystem verwendet. Gerade die schematischen Darstellungen in den Dokumentationen der Hersteller unterscheiden nicht zwischen diesen beiden Begriffen.

Sind die Datenbanken eines Datenbankmanagementsystems in Form von Tabellen organisiert, so handelt es sich umein relationales Datenbankmanagementsystem(RDBMS); bei objektorientierten Datenbanken spricht man analog von objektorientierten Datenbankmanagementsystemen (OODBMS).

Und noch der Vollständigkeit halber:

Definition 3: Datenbanksystem

Ein System, welches die Datenbanken und das dazugehörige Datenbankmanagementsystem als Komplettpaket anbietet, nennt man Datenbanksystem.

1.2Im Buch verwendete Server

Kurzporträts der verwendeten SQL Server: Hersteller und Geschichte

Bild 1.2Ranking einiger RDBMSe, Quelle [DE23]

In der ersten Auflage dieses Buchs habe ich fast ausschließlich MySQL/MariaDB als Plattform genutzt. Um SQL breiter vorstellen zu können, wurden in der zweiten Auflage die meisten Beispiele auch in PostgreSQL angeboten. Konsequenterweise wird seit der dritten Auflage ein weiteres System bedient: der MS SQL Server. Wie Sie Bild 1.2 entnehmen können, decke ich damit eine Vielzahl von Installationen und SQL-Dialekten ab.

Wollen Sie auf die Installation vom Servern verzichten, können Sie auchOnline diverse Server verwenden, um SQL-Code auszuprobieren. Natürlich gibt es dabei Einschränkungen. Ich empfehle: http://sqlfiddle.com/ und https://dbfiddle.uk/.

1.2.1MySQL und MariaDB

Die schwedische Firma MySQL AB hat MySQL von 1994 bis 2008 entwickelt. Die ursprüngliche Intention war eine verbesserte und beschleunigte Verarbeitung eines selbst entwickelten Tabellensystems mit dem Namen ISAM. Dazu wurde mSQL (kein Tippfehler!) genutzt. Von 2008 bis 2010 wurde MySQL von Sun Microsystems gepflegt, und seit Januar 2010 wird MySQL unter dem Schirmvon Oracle weiterentwickelt.

Der Name MySQL kommt nicht vom englischen my (mein). Einer der Firmengründer, Michael Widenius, hat sympathischerweise den Vornamen My seiner Tochter verwendet. Der Name des Delphins im Logo ist Sakila. Er wurde in einem Wettbewerb ermittelt, den der Open Source-Entwickler Ambrose Twebaze aus Uganda gewann. Sakila ist ein Mädchenname in der Sprache siSwati und auch der Name einer Stadt in Tansania.

Nach der Übernahme von MySQL durch Oracle haben die Spannungen zwischen den Entwicklern und Oracle ständig zugenommen, sodass der Erfinder von MySQL – Michael Widenius – sich mit der neu erstellen Engine Aria von MySQL abgespalten und 2009 das Projekt MariaDB ins Leben gerufen hat. Wie MySQL ist auch dieses Projekt nach einer Tochter von Widenius benannt. Wegen seiner offeneren Lizenzpolitik und der schnelleren Umsetzung von Neuerungen und Bugfixes hat MariaDB an vielen Stellen – aber nicht, wie oft behauptet, an den meisten –MySQL abgelöst (siehe Bild 1.2).

MySQL und MariaDB sind Client-Server-Datenbanksysteme. Ein Server stellt alleine oder im Verbund mit anderen Servern den Anwendungen (Clients) die Datenbankdienste zur Verfügung. Der MySQL-/MariaDB-Server besteht – wie jedes DBMS – aus vielen Komponenten, die hier kurz angerissen werden.

Bild 1.3Komponenten von MySQL und MariaDB

       Konnektoren (Verbinder): Der Client baut über die Konnektoren eine Sitzung zum Server auf. Dies erfolgt über das TCP/IP-Protokoll und in der Regel über den Port 3306.

       Connection-Pool:Hier werden die Verbindungen zu den Clients verwaltet. Beim Verbindungsaufbau wird anhand des Benutzernamens und des Passworts die Verbindungsan-frage authentifiziert. Ist die Anzahl der maximal verfügbaren Verbindungen (Connections Limits) nicht überschritten, wird ein Verbindungsthread eingerichtet. Ebenso werden die anderen Grenzwerte für die Verbindung überwacht: Datenübertragungsvolumen, Timeout etc.

       SQL-Schnittstelle: Hier werden die SQL-Befehle entgegengenommen. Sie werden dann zum Parser weitergereicht.

       Parser: Der Parser überprüft die Syntax eines Befehls und ob man die Ausführungsrechte für diesen Befehl hat.

       Optimizer (Optimierer): Anhand von Schätzungen, Statistiken und Algorithmen wird für nicht triviale Befehle ein Ausführungsplan erstellt. Dieser Ausführungsplan berücksichtigt ggf. im Cache vorhandene Ergebnisse.

       Caches und Buffers (Zwischenspeicher): Daten und Ergebnisse können in Zwischenspeichern aufgehoben werden.8

       Storage Engines: Die Motoren des Servers. Hier werden die Daten tatsächlich verarbeitet. Jede Engine ist dabei für bestimmte Aufgabenstellungen besonders gut geeignet. Der große Vorteil von MySQL und MariaDB ist, dass jeder mit einem besonderen Bedarf eine Engine bauen kann. Er muss nur die Schnittstellen beachten (siehe [MyS21e]) und kann dann seine Speziallösungen anbieten.

       File System (Dateisystem): Je nach Betriebssystem werden hier Daten in unterschiedlichen Dateisystemen (NTFS, BTRFS, ETX4 etc.) abgelegt. Bis auf die Frage, ob das Dateisystem zwischen Groß- und Kleinschreibung unterscheidet, spielt dieses für die SQL-Programmierung keine Rolle.

       Management Services & Utilities: Parallel dazu gibt es die vielen kleinen Helferlein, ohne die nichts geht: für das Sichern und Wiederherstellen von Daten, Datenreplikation, Administration und Konfiguration, Datenmigration undMetadaten.

Zur Geschichte von MySQL gibt es einen netten Absatz in Wikipedia (https://de.wikipedia.org/wiki/MySQL#Geschichte) und Dokumentation und Downloads finden Sie auf http://www.mysql.com. Die Homepage von MariaDB ist unter https://mariadb.org zu finden. Eine kurze, aber gute Übersicht bezüglich der aktuellen Unterschiede zwischen MariaDB und MySQL, finden Sie unter [Ahm22].

In den nachfolgenden Kapiteln werden wir gemeinsam eine Datenbank planen, installieren, einrichten, verändern und verwenden. Dabei werden die vielen Fragen beantwortet, die Sie nach dieser kurzen Einführung mit Sicherheit haben werden, also nur Geduld . . .

1.2.2PostgreSQL

Geboren wurde PostgreSQL 1986 als Projekt an der Universität von Kalifornien, Berkeley. Professor Michael Stonebraker9 begann das Projekt als Nachfolgeprojekt der Ingres-Datenbank, welche ebenfalls noch heute verwendet wird. Daher leitet sich auch der Name her: post ingres. In den nächsten acht Jahren wurde Postgres von Prof. Stonebraker und seinen Studenten immer weiter entwickelt. Bis 1995 verstand Postgres allerdings kein SQL, sondern nur eine eigene Sprache namens POSTQUEL.Die beiden Doktoranden Andrew Yu und Jolly Chen haben Postgres um SQL erweitert und als Postgres95 veröffentlicht.

1996 wurde Postgres95 als Open-Source-Projekt der Netzgemeinde zur Verfügung gestellt und wird seitdem sehr stark von Unterstützern weiterentwickelt und gefördert. Ebenso wurde das Erscheinungsjahr aus dem Produktnamen entfernt und die Datenbank heißt seitdem PostgreSQL.

Weitere Informationen über die Geschichte von PostgreSQL und die aktuellen Features des Servers können Sie auf der Homepage des Projekts (https://www.postgresql.org) nachlesen. Von http://www.postgresql.org/download/ können Sie die aktuelle PostgreSQL-Version für Linux-Distributionen und Windows herunterladen. Eine sehr ausführliche Online-Dokumentation steht unter http://www.postgresql.org/docs/ zur Verfügung.

1.2.3Microsoft SQL Server

Anders als bei den anderen Datenbankservern kann ich hier keine Geschichten über Töchter oder Universitätslaufbahnen erzählen. Die Entwicklung des MS SQL Servers ist da schon etwas nüchterner ([Gar16]).

In Kooperation mit Sybase brachte Microsoft 1989 die erste Version seines Servers auf den Markt. Zielplattform war das Betriebssystem OS/2. Die Kooperation sah so aus, dass beide gemeinsam am Sybase Server arbeiteten und Sybase das Produkt unter seinem Namen auf UNIX-basierenden Systemen anbot und Microsoft auf OS/2. Spätestens seit 1992 speist sich der Quelltext beider Server-Produkte (Sybase 4.0 und MS SQL Server 4.2) gleichwertig aus beiden Firmen. Ab 1993 ist nicht mehr OS/2, sondern Windows NT die Zielplattform des MS SQL Servers. Mit der Portierung auf Windows NT wurden erhebliche Anpassungen notwendig, die nicht mehr für das Sybase-Produkt verwendet werden konnten; die beiden Systeme begannen sich voneinander zu entfernen. Besonders der Wunsch von Sybase, dass der Quelltext möglichst plattformneutral bleiben sollte, widersprach den strategischen Zielen Microsofts, die eine volle Unterstützung der damals wirklich bedeutsamen Neuerungen von Windows NT anstrebten.

Microsoft entschied, dass der SQL Server ein zentrales Produkt für die Windows NT Strategie werden sollte. Daher wurden von anderen Datenbankherstellern erfahrene Entwickler angeworben. Dieses geballte Know-how mündete 1998 in die Serverversion 7.0 mit dem Arbeitstitel Sphinx. Mit dieser völlig überarbeiteten Version wurde auch die Zusammenarbeit mit Sybase überflüssig und beide Produkte sind seitdem voneinander unabhängig. Es kamen Sprachelemente hinzu, die Sicherheit wurde verbessert, die Performance gesteigert, die Stabilität erhöht, andere Betriebssysteme werden unterstützt usw. Besonders das grafische Frontend und die hohe Integration in die Visual Studio Entwicklungsumgebung werden von vielen Entwicklern geschätzt.

Anders als MySQL/MariaDB oder PostgreSQL kommt der MS SQL Server aber nicht aus der Open-Source- oder Uni-Ecke. Er ist ein rein kommerzielles Produkt und hat daher in den entsprechenden Kreisen ein Imageproblem.

Der MS SQL Server kann in verschiedenen Varianten von https://www.microsoft.com/de-de/sql-server/sql-server-downloads bezogen werden; die Dokumentation liegt in https://docs.microsoft.com/de-de/sql/?view=sql-server-ver15.

1 Die Liste ist nicht vollständig. Ich werde mich aber in diesem Buch auf diese beschränken.

2 Je nach Hersteller oder Lesart finden Sie andere Aufgabensammlungen, aber mit dieser kommen wir schon sehr weit.

3 Es ist müßig, darüber zu streiten, ob es sich um einen Interpreter oder einen Compiler oder einen Jitter handelt. Warum? Weil es keinen interessiert ;-)

4 Abkürzung für: Größter anzunehmender Unfall

5 Abkürzung für: Application Programming Interface; engl. für Programmierschnittstelle

6 Abkürzung für: Java Database Connectivity: Programmierschnittstelle für JAVA

7 Abkürzung für: Open Database Connectivity: Eine offene standardisierte Schnittstelle. Sie wird von fast allen Datenbanksystemherstellern angeboten. Wer ODBC-Programme schreibt, kann leichter zwischen verschiedenen Datenbanksystemherstellern wechseln.

8 MySQL hat ab Version 8.0 den Cache abgeschafft ([MyS18c]); MariaDB verwendet ihn weiterhin ([Mar23b]).

9 Prof. Stonebraker ging später mit einem Fork von Postgres – Illustra – zu Informix, welche den Fork in den Universal Server integrierte. Auch diese Datenbank besteht heute noch.

2Relationale Datenbanken