SQL Grundlagen lernen
Bisher haben wir mit Python ohne SQL-Grundlagenwissen einfach Datenbankerstellung und Datenbankzugriffe durchgeführt. Dabei kamen wir bei verschiedenen Aktionen schnell an unsere Grenzen durch die fehlenden Grundlagenkenntnisse. Grundlagen haben Vorteile und bringen Sicherheit in die Anwendung und Nutzung von Datenbanken bzw. SQL. Wenn wir von SQL sprechen, sprechen wir von einem relationalem Datenbankmanagementsystem (RDBMS: Relational Database Management System). Flapsig gesagt: Daten stehen in einer Beziehung – einer Relation. Diese Beziehungen können ausgewertet und ausgegeben werden.
Das Kürzel SQL stehen für „Structured Query Language“ – eine strukturierte Abfrage-Sprache.

SQL selber hat 4 große Bereiche:
- DDL: Data Definition Language
- DML: Data Manipulation Language
- DQL: Data Query Language
- DCL: Data Control Language
Was machen diese Bereiche für uns?
DDL: Data Definition Language – Daten-Definitions-Sprache

Bevor wir ein Datenbanksystem nutzen können, müssen wir erst unsere Datenbank mit deren Tabellen einrichten. Auf gut Deutsch: welche Felder gibt es und wie nennen wir diese, damit wir komfortable wieder darauf zugreifen können. Wir definieren also unsere Daten bzw. Datenfelder und können die gewünschte Struktur über eine SQL-Anweisung in der Datenbank erzeugen. Ohne eine Datenbank und Daten können wir auch nicht die folgenden Bereiche nutzen wie die Datenbank mit Daten zu füllen bzw. auszuwerten.
DML: Data Manipulation Language – Daten-Manipulations-Sprache

Nachdem wir unsere gewünschte Struktur über die DDL erstellt haben, wollen wir Daten in unser Datenbanksystem hineinschreiben, ändern und löschen können. Genau das macht man mit der DML.
DQL: Data Query Language – Daten Abfrage Sprache

Auslesen der Datenbank auch mit bestimmten Bedingungen (man will ja nicht immer alle Daten). Hier können auch mehrere Tabellen miteinander verknüpft werden und daraus das Ergebnis ausgegeben werden.
DCL: Data Control Language – Daten-Kontroll-Sprache

Data Control Language: Daten-Kontroll-Sprache (Besser Zugriffs-Kontroll-Sprache)
Nicht jeder darf auf alle Daten zugreifen. Daher ergibt es Sinn, hier eine Kontrolle einzubauen.
Zur DCL gehört auch die Transaktionssteuerung, damit es auch sichergestellt ist, dass alle Änderungen bzw. Aktionen in der Datenbank stattfinden. Ansonsten (je nach System) gibt es automatisch ein zurück auf den definierten Ausgangspunkt. Einfach einmal eine Banküberweisung sich vorstellen, wo beim Bezahlenden abgebucht wird, aber nicht beim Empfänger gutgeschrieben wird. Das gibt Ärger! Daher entweder beides oder gar nichts!
ANSI-SQL
Hier der Begriff ANSI-SQL, damit man es mal gelesen hat und verorten kann. Das American National Standards Institut (ANSI) hat festgelegte Standards. Diese gibt es auch für SQL. Allerdings gibt es da über die Jahre mehrere verschiedene, da es bei SQL Verbesserungen und Erweiterungen gegeben hat. Die verschiedenen SQL-Server bieten im Kern die gleiche Funktion, die aber in der Nutzung leicht unterschiedlich sein kann, was hier am Anfang über das von uns benötigte Wissen hinausgeht. Sollte man mal schlaflose Nächte haben, kann man sich mit den verschiedenen ANSI-SQL-Varianten die Nacht vertreiben.
MySQL, MariaSQL, Microsoft SQL Server (MSSQL), Oracle – verschiedene Datenbanksysteme
Es gibt verschiedene und am Anfang nutzt man eins um in die Materie hineinzukommen.
Lustig am Rande: MySQL – die ersten 2 Buchstaben vom Namen der Datenbank kommen von dem Vornamen „My“. Diese ist die Tochter des MySQL-AB-Mitgründers Michael Widenius (Monty genannt). Seine zweite Tochter heißt Maria (wurde auch als Namen für ein Datenbanksystem verwendet: MariaSQL).
Die verschiedenen Datenbankserver orientieren sich alle am Standard der aktuellen SQL-Version.
Begriffe rund um SQL
Anweisungen, Statement: SQL ist eine Anweisungssprache, keine Programmiersprache!
Schlüsselwörter:
einzelne SQL-Befehle
Anwendung:
- nicht case-sensitiv (Groß- und Kleinschreibung macht keinen Unterschied), es gibt aber Empfehlungen in Form von Schlüsselworten immer in Großbuchstaben, Rest in Kleinschreibung bzw. gemischte Schreibweise.
- Leerzeichen, Tabulatoren und Zeilenumbrüche dürfen nach Belieben genutzt werden. Hier ist die bestmögliche Lesbarkeit das Ziel!
Speicherung der Daten mit SQL
Die Daten werden in Tabellen gespeichert. Dabei wird jeder Spalte (man spricht auch von Feldern bzw. Datenfelder) mit einem Namen benannt um später darauf zugreifen zu können. Es wird festgelegt, ob in dieses Datenfeld nur Text, ganze Zahlen, Zahlen mit Nachkommastellen oder z.B. ein Datum zukünftig gespeichert werden soll. Hier spricht man von Datentypen, die verfügbar sind. Grob gesagt haben wir hier Zahlen, alphanumerische Zeichen (flapsig gesagt also Texte, die zusätzlich Zahlen enthalten können, mit denen wir aber nicht rechnen) und Datumstypen. Die Festlegung der Datentypen ist sehr wichtig, da nur mit Zahlen gerechnet werden kann und auch es auf Sortierungen Auswirkungen hat. In der Anwendung werden wir dann bei der Definition der Felder noch präzise den benötigten Datentyp definieren. Das dann später genauer im passenden Kapitel.
Zusätzlich wird auch für die meisten Datentypen eine Feldlänge vergeben.
Bezeichnung Datensatz: Die Zeilen in der Tabelle werden als Datensätze bezeichnet. Hier haben wir dann alle Einzeldaten, die zu diesem Datensatz gehört. Bei einem Telefonbuch gäbe es dann z.B. Vorname, Nachname, PLZ, Telefonnummer
Tabellen beherbergen somit gleichartige Informationen.
Ein Datensatz ist eine Zusammenstellung von einzelnen Informationen, die sinnvoll zusammengehören und daher schlecht getrennt werden können. In unserem Beispiel vom Telefonbuch macht es Sinn, dass der Vorname und der Nachname in der gleichen Tabelle als Datenfelder vorhanden sind.
Primärschlüssel (Primärschlüsselspalte): Um bei der Anwendung exakt auf einen gewünschten Datensatz zugreifen zu können, benötigen wir Primärschlüssel. Anhand des Primärschlüssels können wir den benötigten Datensatz bearbeiten. Hätten wir keinen Primärschlüssel, hätte z.B. der Name Müller öfters Pech, da ab einer gewissen Anzahl von Adressen mehrere Müller vorkommen können. Man kann also schlecht nach dem Nachnamen suchen und erwarten, dass dort immer exakt nur 1 Treffer zurückkommt. Daher benötigen wir eine eindeutige Zahl. Wird in unserer Tabelle ein Primärschlüssel definiert, müssen wir uns meistens nicht mehr darum kümmern, dass dieser einmalig ist. Versucht man einen Primärschlüssel mehrfach zu vergeben, erhalten wir eine Fehlermeldung vom DBMS – somit ist sichergestellt, dass es nur einen gibt. Die Vergabe des Primärschlüssels kann automatisch laufen und somit ist sichergestellt, dass eindeutige Zugriffe möglich sind.
Beziehungen in relationaler Datenbank: Schauen wir unser Beispiel mit der Telefonliste an. Neben dem Vor- und Nachnamen speichern wir die Postleitzahl – aber keinen Ort! Warum? Hier kommt der Vorteil von relationalen Datenbanken ins Spiel. Es geht um Beziehungen: Unser Postleitzahlensystem in Deutschland hat zu jeder Postleitzahl genau einen Ort. Es macht also wenig Sinn zusätzlich neben der PLZ den Ort in der Tabelle mit den Namen zu speichern. Für die Orte können wir eine weitere Tabelle anlegen, in der nur Postleitzahl und zugehörige Orte gespeichert werden. In dem Fall der neuen Tabelle ist unsere PLZ der Primärschlüssel unserer Tabelle „ortsnamen“ (wir gehen jetzt einfach nur von Orten in Deutschland aus). Unser Feld PLZ in der Tabelle „telefonbuch“ nennt sich auch „Fremdschlüssel“. Dieser Fremdschlüssel aus der Tabelle „telefonbuch“ zeigt auf den Primärschlüssel „PLZ“ in der Tabelle „ortsnamen“.
Diese Beziehungen können in Datenbankdiagrammen dargestellt werden.
[bild[Beispiel Datenbankdiagrammen]]Den Primärschlüssel sieht man i.d.R. anhand eines Schlüsselsymbols und die Art der Verknüpfung der Daten ist sofort sichtbar anhand einer Linie. Die Enden der Linien zeigen die Art der Relation (Verknüpfung):
- Schlüssel: Primärschlüssel
- Unendlichzeichen: es können 0, 1 oder mehrere Datensätze betroffen sein
Referentielle Integrität (RI): die Referentielle Integrität dient zur Sicherstellung der Datenintegrität zwischen den Tabellen. Durch die Verknüpfung von Fremdschlüssel und Primärschlüssel kann das Datenbanksystem kontrollieren, ob ein Datensatz vorhanden ist und der Fremdschlüssel verwendet werden darf. Auch ist es nicht einfach möglich den Primärschlüssel zu verändern, wenn dieser als Fremdschlüssel bereits verwendet wird.
Es kann nur auf die formale Korrektheit kontrolliert werden – inhaltlich ist immer noch der Nutzer in der Pflicht mitzudenken!
Schauen wir uns diese Grundlagen in konkreten Anwendungen an. Dann wird es auch greifbar. Im folgenden Kapitel nutzen wir den Primärschlüssel für die eindeutige Auswahl eines Datensatzes.