SQL Schnellstart – Die Musikschule – ein SQL-Praxisbeispiel
Nach der ganzen Theorie möchte ich dir jetzt ein praxisorientiertes Beispiel zeigen, dass wir gemeinsam lösen werden. Nachfolgend findest du ein Diagramm zu einer fiktiven Musikschule.
Datenbank für unsere Musikschule:
Sieh dir folgendes Diagramm an:
Diese Art von Diagramm nennt man auch ER-Diagramm (Entity-Relationship Diagramm).
1. Jedes Viereck repräsentiert eine eigene Tabelle. Jede Tabelle enthält eigene Daten.
2. Die Kreise sind Attribute, also Spalten dieser Tabellen, wie du sie z.B. aus Excel kennst. Wie du siehst, sind einige dieser Attribute unterstrichen. Diese unterstrichenen Attribute nennt man Primärschlüssel. Sie identifizieren einen einzigartigen Datensatz, also jede Zeile. Eine Zeile in der Schülertabelle repräsentiert beispielsweise genau einen spezifischen Schüler.
3. Dir sollte auch auffallen, dass einige Vierecke zusätzliche Hinweise, wie bspw. "[0;n]" enthalten. Es handelt sich dabei um eine Mengenangabe in der sogenannten [Min;Max]-Schreibweise. Diese Mengenangabe drückt folgendes aus:
- Ein Mitarbeiter muss nicht unbedingt als Musiklehrer in unserer Musikschule arbeiten, kann aber auch eine oder mehrere Positionen als Musiklehrer einnehmen (z.B. einmal als Gitarrenlehrer und einmal Schlagzeuglehrer).
- Ein Musiklehrer ist immer ein Mitarbeitet in unserer Musikschule.
- Ein Musiklehrer kann keinen, einen oder mehrere Termine haben.
- Zu einem Termin gehört immer genau ein Musiklehrer.
- Zu einem Termin gehört immer genau ein Schüler.
- Ein Schüler kann keine, einen oder mehrere Termine haben.
Übersicht zu den Tabellen-Daten:
Unsere Datenbank enthält folgende Tabellen:
- Schueler
- Termin
- Musiklehrer
- Mitarbeiter
Schau dir die Daten dieser vier Datenbank-Tabellen nachfolgend an.
Inhalte der Schueler-Tabelle:
Beschreibung: Wie du siehst, hat jeder Schüler (jede Zeile) eine einzigartige ID (Primärschlüssel). Damit können wir Beziehungen zu den anderen Tabellen beschreiben und herstellen.
Inhalte der Termin-Tabelle:
Inhalte der Musiklehrer-Tabelle:
Beschreibung: Wenn du dir das oben gezeigte Diagramm angeschaut hast, dann wirst du bemerkt haben, dass in manchen Tabellen noch ein paar Attribute (Spalten) dazugekommen sind. All diese Attribute enden auf "_FK".
Was bedeutet _FK?
"_FK" steht für "Foreign Key", also Fremdschlüssel. Diese verweisen auf einen Primärschlüssel aus unseren anderen Tabellen, sodass wir "Beziehungen" (Relationships) zwischen den Tabellen (Entities) hergestellt haben. Mehr zu Primär- und Fremdschlüsseln (Primary- & Foreign-Keys) lernst du in Modul 3 dieses Schnellstart-Kurses.
Inhalte der Mitarbeiter-Tabelle:
Praxis-Beispiel: Terminplan für Peter Müller
Der Musiklehrer Peter Müller (MitarbeiterID = 1) möchte eine Übersicht seiner Termine und den jeweiligen Schülernamen haben. Die Ausgabe soll folgendermaßen aussehen:
Musikinstrument | Datum | Uhrzeit | Vorname | Nachname
Diese Frage lässt sich mit nur sechs Zeilen SQL beantworten:
Mit dem SELECT-Statement wählen wir die Spalten aus, die ausgegeben werden sollen.
Da unklar ist, ob wir den Vornamen und Nachnamen der Mitarbeiter oder Schüler haben möchten, müssen wir dies mit dem Tabellennamen der Schülertabelle näher spezifizieren. Über einen sogenannten JOIN (dazu später mehr) kann eine Tabelle einer anderen Tabelle beitreten.
Da wir nur Datensätze verknüpfen möchten, bei denen Fremdschlüssel und Primärschlüssel übereinstimmen, müssen wir mit ON eine Beitrittsbedingung angeben. Mit dem WHERE geben wir an, dass wir nur die Ausgabe für den Mitarbeiter mit der ID = 1 haben wollen. Kein Grund zur Panik, wenn du hiervon noch alles verstehst. Im Laufe dieses Kurses wirst du alles Schritt-für-Schritt lernen und verstehen!
Führen wir unsere SQL-Abfrage aus, dann erhalten wir folgendes Ergebnis:
Code-Aufgabe - Jetzt bist du gefragt:
Deine Aufgabe: Alle Termine ausgeben
Aufgabe: Für den Jahresbericht unserer Musikschule soll eine ausführliche Liste aller bereits vergangenen und anstehenden Termine ausgedruckt werden. Wir benötigen daher das Datum und die Uhrzeit aller Einträge aus der Tabelle "Termin". Erstelle dazu die passende SQL-Abfrage.
Die Lösung findest du unter dem Code-Editor.
[lp_spoiler title="Lösung anzeigen"]
Lösung:
SELECT Datum, Uhrzeit FROM Termin;
Ausgabe:
[/lp_spoiler]
Fazit
Du hast nun einen kleinen Einblick bekommen, wie man SQL in der Praxis anwenden kann. Du hast gesehen, dass du essenzielle Fragen mit wenigen Zeilen SQL schnell beantworten kannst. Im nächsten Modul erlernst du die wichtigsten SQL-Befehle, um Daten sehr präzise auszuwählen und zu manipulieren.