SQL Grundlagen

SQL (Structured Query Language) ist eine Datenbanksprache, welche zur Definition von Datenstrukturen in relationalen Datenbanken sowie zur Abfrage und Bearbeitung von Datenbeständen der Datenbank genutzt wird.


Erklärung

Um Informationen dauerhaft zu speichern, werden Datenbanksysteme verwendet. Ein Datenbanksystem besteht dabei immer aus dem Datenbankmanagementsystem (DBMS) und der Datenbank.

Auf der Abbildung ist ein Austausch zwischen Anwenderprogramm und Datenbankmanagementsystem zu sehen. Des Weiteren ist der Austausch zwischen der Datenbank und dem Datenbankmanagementsystem zu sehen.

Wofür SQL?

Damit das DBMS mit der Datenbank kommunizieren kann, wird bei relationalen Datenbanken (also Datenbanken, die auf der relationalen Algebra aufbauen) SQL verwendet. Dabei bietet die Datenbanksprache SQL folgende drei wichtige Funktionalitäten:

  1. Tabellen in der Datenbank erzeugen
  2. Einträge in Tabellen bearbeiten
  3. Datensätze abfragen

Eine relationale Datenbank ist eine Sammlung von Tabellen (den Relationen). Diese Tabellen haben Spalten und Zeilen.

  • Die Tabellen-Spalten werden als Attribute bezeichnet und sind durch ihren Namen klassifiziert. (Orange)
  • Eine Tabellen-Zeile ist ein Datensatz und wird auch Tupel genannt. (Blau)
  • Ein Wert in einem Feld der Tabelle wird Attributwert genannt. (Grün)
\text{Vorname}Vorname\text{Vorname}
\text{Name}Name\text{Name}
\text{Alter}Alter\text{Alter}
\text{Wohnort}Wohnort\text{Wohnort}
\text{Leon}Leon\text{Leon}
\text{Maier}Maier\text{Maier}
\text{18}18\text{18}
\text{München}Mu¨nchen\text{München}
\text{Emma}Emma\text{Emma}
\text{Maier}Maier\text{Maier}
\text{16}16\text{16}
\text{Paris}Paris\text{Paris}
\text{Max}Max\text{Max}
\text{Mustermann}Mustermann\text{Mustermann}
\text{25}25\text{25}
\text{Berlin}Berlin\text{Berlin}
\text{Amir}Amir\text{Amir}
\text{Schneider}Schneider\text{Schneider}
\text{17}17\text{17}
\text{München}Mu¨nchen\text{München}

Schlüssel in Datenbanken

  • Damit Tupel (Zeilen) in einer Relation (Tabelle) eindeutig identifiziert werden können, wird ein Schlüssel benötigt.
  • Der Schlüssel besteht dabei aus einem/mehreren Attribut/en (Spalten).
  • Die Attribute werden so gewählt, dass alle Attributwerte der Tupel über die zugehörigen Attribute eine einzigartige Kombination ergeben.

Ein (Primär-)Schlüssel muss dabei drei Anforderungen entsprechen:

  1. Eindeutigkeit: Ein Schlüssel muss so gewählt sein, dass jedes Tupel der Tabelle eindeutig identifiziert wird.
  2. Minimalität: Die Anzahl an Attributen für einen Schlüssel muss möglichst klein sein. Der Schlüssel darf also keine unnötigen Attribute enthalten.
  3. Definiertheit: Ein jeder Attributwert der zum Schlüssel gehörigen Attribute muss für alle Tupel definiert sein. Einträge, die in Schlüsselspalten stehen, dürfen also nicht leer sein.

Primärschlüssel

Die für den Schlüssel einer Tabelle ausgewählte Menge an Attributen wird Primärschlüssel genannt. Der Primärschlüssel muss die drei oben genannten Eigenschaften erfüllen. Um den Primärschlüssel in einer Tabelle zu kennzeichnen, werden die zum Schlüssel gehörigen Attribute unterstrichen:

\underline{\text{Vorname}}Vorname\underline{\text{Vorname}}
\underline{\text{Nachname}}Nachname\underline{\text{Nachname}}
\text{Alter}Alter\text{Alter}
\text{Wohnort}Wohnort\text{Wohnort}
\text{Leon}Leon\text{Leon}
\text{Maier}Maier\text{Maier}
\text{18}18\text{18}
\text{München}Mu¨nchen\text{München}
\text{Emma}Emma\text{Emma}
\text{Maier}Maier\text{Maier}
\text{16}16\text{16}
\text{Paris}Paris\text{Paris}
\text{Max}Max\text{Max}
\text{Mustermann}Mustermann\text{Mustermann}
\text{25}25\text{25}
\text{Berlin}Berlin\text{Berlin}
\text{Amir}Amir\text{Amir}
\text{Schneider}Schneider\text{Schneider}
\text{17}17\text{17}
\text{München}Mu¨nchen\text{München}

In diesem Beispiel ist der Primärschlüssel aus den Attributen Vorname und Nachname zusammengesetzt. Dies ist zulässig, da in der Beispieltabelle jede Kombination aus Vorname und Nachname eindeutig ist!

Aber Vorsicht: Wenn weitere Personen eingefügt werden, kann es jedoch passieren, dass die Kombination aus Vorname und Nachname nicht mehr eindeutig ist. Daher benutzt du hier am besten einen ...

Surrogatschlüssel (künstlicher Schlüssel)

Ein Surrogatschlüssel (auch künstlicher Schlüssel, synthetischer Schlüssel oder Ersatzschlüssel genannt) wird immer genau dann verwendet, wenn du nicht sicherstellen kannst, dass der Primärschlüssel immer eindeutig sein wird, egal welche Datensätze eingefügt werden. Ein Surrogatschlüssel ist daher meist eine fortlaufende künstlich angelegte Nummer, welche uns die Eindeutigkeit garantiert. Der Surrogatschlüssel ist somit ein spezieller Primärschlüssel, bestehend aus einem künstlich angelegten Attribut.

In diesem Beispiel könnte das so aussehen:

\underline{\text{PersonenID}}PersonenID\underline{\text{PersonenID}}
\text{Vorname}Vorname\text{Vorname}
\text{Nachname}Nachname\text{Nachname}
\text{Alter}Alter\text{Alter}
\text{Wohnort}Wohnort\text{Wohnort}
111
\text{Leon}Leon\text{Leon}
\text{Maier}Maier\text{Maier}
\text{18}18\text{18}
\text{München}Mu¨nchen\text{München}
222
\text{Emma}Emma\text{Emma}
\text{Maier}Maier\text{Maier}
\text{16}16\text{16}
\text{Paris}Paris\text{Paris}
333
\text{Max}Max\text{Max}
\text{Mustermann}Mustermann\text{Mustermann}
\text{25}25\text{25}
\text{Berlin}Berlin\text{Berlin}
444
\text{Amir}Amir\text{Amir}
\text{Schneider}Schneider\text{Schneider}
\text{17}17\text{17}
\text{München}Mu¨nchen\text{München}

Fremdschlüssel

Ein Fremdschlüssel ist ein Attribut, welches auf den Primärschlüssel einer anderen Tabelle verweist. Um den Fremdschlüssel zu kennzeichnen, wird dieser überstrichen:

\underline{\text{PersonenID}}PersonenID\underline{\text{PersonenID}}
\text{Vorname}Vorname\text{Vorname}
\text{Nachname}Nachname\text{Nachname}
\text{Alter}Alter\text{Alter}
\overline{\text{Wohnort}}Wohnort\overline{\text{Wohnort}}
\text{1}1\text{1}
\text{Leon}Leon\text{Leon}
\text{Maier}Maier\text{Maier}
\text{18}18\text{18}
\text{3}3\text{3}
\text{2}2\text{2}
\text{Emma}Emma\text{Emma}
\text{Maier}Maier\text{Maier}
\text{16}16\text{16}
\text{2}2\text{2}
\text{3}3\text{3}
\text{Max}Max\text{Max}
\text{Mustermann}Mustermann\text{Mustermann}
\text{25}25\text{25}
\text{1}1\text{1}
\text{4}4\text{4}
\text{Amir}Amir\text{Amir}
\text{Schneider}Schneider\text{Schneider}
\text{17}17\text{17}
\text{3}3\text{3}

Der Fremdschlüssel Wohnort aus der Tabelle Personen verweist dabei auf den Primärschlüssel StadtID der Tabelle Städte:

\underline{\text{StadtID}}StadtID\underline{\text{StadtID}}
\text{Name}Name\text{Name}
\text{Einwohnerzahl}Einwohnerzahl\text{Einwohnerzahl}
\text{Land}Land\text{Land}
\text{1}1\text{1}
\text{Berlin}Berlin\text{Berlin}
\text{3.600.000}3.600.000\text{3.600.000}
\text{Deutschland}Deutschland\text{Deutschland}
\text{2}2\text{2}
\text{Paris}Paris\text{Paris}
\text{2.100.000}2.100.000\text{2.100.000}
\text{Frankreich}Frankreich\text{Frankreich}
\text{3}3\text{3}
\text{München}Mu¨nchen\text{München}
\text{1.400.000}1.400.000\text{1.400.000}
\text{Deutschland}Deutschland\text{Deutschland}

Beispiel

Im folgenden Beispiel werden die Tabellen der Datenbank einer Schule betrachtet. Es gibt die Tabelle "Klassen" und die Tabelle "Lehrkräfte":

Wichtig: Es gibt unterschiedliche Möglichkeiten, wie Datenbanken modelliert werden können! Daher ist das folgende Beispiel nur eine Möglichkeit von vielen.

\text{Klasse}Klasse\text{Klasse}
\text{AnzahlSchueler}AnzahlSchueler\text{AnzahlSchueler}
\text{Klassenleiter}Klassenleiter\text{Klassenleiter}
\text{7b}7b\text{7b}
\text{23}23\text{23}
\text{Hilbert}Hilbert\text{Hilbert}
\text{8a}8a\text{8a}
\text{21}21\text{21}
\text{Franklin}Franklin\text{Franklin}
\text{10a}10a\text{10a}
\text{17}17\text{17}
\text{Curie}Curie\text{Curie}
\text{5c}5c\text{5c}
\text{18}18\text{18}
\text{Franklin}Franklin\text{Franklin}
\text{Vorname}Vorname\text{Vorname}
\text{Nachname}Nachname\text{Nachname}
\text{Fach}Fach\text{Fach}
\text{David}David\text{David}
\text{Hilbert}Hilbert\text{Hilbert}
\text{Mathematik}Mathematik\text{Mathematik}
\text{Marie}Marie\text{Marie}
\text{Curie}Curie\text{Curie}
\text{Chemie}Chemie\text{Chemie}
\text{Rosalind}Rosalind\text{Rosalind}
\text{Franklin}Franklin\text{Franklin}
\text{Biologie}Biologie\text{Biologie}
\text{Benjamin}Benjamin\text{Benjamin}
\text{Franklin}Franklin\text{Franklin}
\text{Physik}Physik\text{Physik}

Die Aufgabe ist es, die Tabellen so anzupassen, dass sie in der Datenbank alle Anforderungen erfüllen. Dazu muss zunächst in beiden Tabellen ein Primärschlüssel festgelegt werden.

Da das Klassenkürzel (z.B. 7b) an einer Schule eindeutig ist, handelt es sich hierbei um einen geeigneten Primärschlüssel. Anders sieht es bei den Lehrkräften aus. Bei der Kombination aus Vor- und Nachnamen kann NICHT sichergestellt werden, dass diese Kombination immer eindeutig bleibt. Also muss ein Surrogatschlüssel eingeführt werden:

\underline{\text{Klasse}}Klasse\underline{\text{Klasse}}
\text{AnzahlSchueler}AnzahlSchueler\text{AnzahlSchueler}
\text{Klassenleiter}Klassenleiter\text{Klassenleiter}
\text{7b}7b\text{7b}
\text{23}23\text{23}
\text{Hilbert}Hilbert\text{Hilbert}
\text{8a}8a\text{8a}
\text{21}21\text{21}
\text{Franklin}Franklin\text{Franklin}
\text{10a}10a\text{10a}
\text{17}17\text{17}
\text{Curie}Curie\text{Curie}
\text{5c}5c\text{5c}
\text{18}18\text{18}
\text{Franklin}Franklin\text{Franklin}
\underline{\text{LehrID}}LehrID\underline{\text{LehrID}}
\text{Vorname}Vorname\text{Vorname}
\text{Nachname}Nachname\text{Nachname}
\text{Fach}Fach\text{Fach}
\text{1}1\text{1}
\text{David}David\text{David}
\text{Hilbert}Hilbert\text{Hilbert}
\text{Mathematik}Mathematik\text{Mathematik}
\text{2}2\text{2}
\text{Marie}Marie\text{Marie}
\text{Curie}Curie\text{Curie}
\text{Physik}Physik\text{Physik}
\text{3}3\text{3}
\text{Rosalind}Rosalind\text{Rosalind}
\text{Franklin}Franklin\text{Franklin}
\text{Biologie}Biologie\text{Biologie}
\text{4}4\text{4}
\text{Benjamin}Benjamin\text{Benjamin}
\text{Franklin}Franklin\text{Franklin}
\text{Physik}Physik\text{Physik}

Jetzt haben beide Tabellen eindeutig definierte Primärschlüssel. Allerdings fällt auf, dass die Klassenleiter "Franklin" NICHT unterschieden werden können. Bei den Klassenleitern "Franklin" könnte es sich um "Rosalind Franklin" oder "Benjamin Franklin" handeln. Um dies zu vermeiden, muss das Attribut Kassenleiter als Fremdschlüssel definiert werden. Dieser Fremdschlüssel verweist auf den eindeutigen Primärschlüssel der Tabelle "Lehrkräfte" und ermöglicht die Unterscheidung, da der Primärschlüssel von Lehrkräfte wiederum eindeutig ist:

\underline{\text{Klasse}}Klasse\underline{\text{Klasse}}
\text{AnzahlSchueler}AnzahlSchueler\text{AnzahlSchueler}
\overline{\text{Klassenleiter}}Klassenleiter\overline{\text{Klassenleiter}}
\text{7b}7b\text{7b}
\text{23}23\text{23}
\text{1}1\text{1}
\text{8a}8a\text{8a}
\text{21}21\text{21}
\text{4}4\text{4}
\text{10a}10a\text{10a}
\text{17}17\text{17}
\text{2}2\text{2}
\text{5c}5c\text{5c}
\text{18}18\text{18}
\text{3}3\text{3}
\underline{\text{LehrID}}LehrID\underline{\text{LehrID}}
\text{Vorname}Vorname\text{Vorname}
\text{Nachname}Nachname\text{Nachname}
\text{Fach}Fach\text{Fach}
\text{1}1\text{1}
\text{David}David\text{David}
\text{Hilbert}Hilbert\text{Hilbert}
\text{Mathematik}Mathematik\text{Mathematik}
\text{2}2\text{2}
\text{Marie}Marie\text{Marie}
\text{Curie}Curie\text{Curie}
\text{Physik}Physik\text{Physik}
\text{3}3\text{3}
\text{Rosalind}Rosalind\text{Rosalind}
\text{Franklin}Franklin\text{Franklin}
\text{Biologie}Biologie\text{Biologie}
\text{4}4\text{4}
\text{Benjamin}Benjamin\text{Benjamin}
\text{Franklin}Franklin\text{Franklin}
\text{Physik}Physik\text{Physik}

Nun sind alle Bedingungen erfüllt und die Tabellen sind fertig.

Next topic:
SQL DDL

Continue
SQL DDL

Jetzt unlimited holen!

Mit simpleclub unlimited bekommst du Vollzugang zur App: Du boostest deine Noten, hast mehr Freizeit und gehst sicher in jede Klausur!

Jetzt unlimited holen

Jetzt simpleclub Azubi holen!

Mit simpleclub Azubi bekommst du Vollzugang zur App: Wir bereiten dich in deiner Ausbildung optimal auf deine Prüfungen in der Berufsschule vor. Von Ausbilder*innen empfohlen.

Jetzt simpleclub Azubi holen