💾 Selbststudium: Phase III – Datenabfrage (Modul 4, 5, 8)

Berufliches Gymnasium, Klasse 13 | Kontext: Music-Event (Event-Planer)

Zielsetzung: Sie werden die mächtigsten SQL-Befehle beherrschen, um Daten gezielt abzufragen, Tabellen zu verknüpfen und statistische Analysen durchzuführen.

🚀 Modul 4: Gezielte Datenselektion (`SELECT` & `WHERE`)

Überblick: Hier lernen Sie, wie Sie Daten gezielt aus Tabellen abfragen, filtern und sortieren.

1. Die `SELECT`-Syntax

Der grundlegendste Befehl in SQL ist `SELECT`. Er wählt bestimmte Spalten oder alle Spalten (`*`) aus einer oder mehreren Tabellen aus.

BefehlZweck
SELECT Attribut1, Attribut2Wählt spezifische Spalten aus.
SELECT *Wählt alle Spalten aus (Vorsicht bei großen Tabellen!).
FROM TabelleGibt an, aus welcher Tabelle die Daten stammen.

Beispiel: Zeige mir den Namen und die Stadt aller Veranstaltungsorte.

SELECT Name, Stadt
FROM Veranstaltungsort;

2. Filtern mit `WHERE`

Die `WHERE`-Klausel definiert die **Bedingungen**, die ein Datensatz erfüllen muss, um in der Ergebnismenge zu erscheinen.

Operator-TypBeispielErklärung
Vergleich=, >, <>Gleich, größer als, ungleich
LogischAND, OR, NOTVerknüpfung mehrerer Bedingungen
BereichBETWEEN 100 AND 200Werte in einem bestimmten Intervall
MengeIN ('Pop', 'Rock')Werte in einer Liste von Möglichkeiten
TextLIKE 'A%'Mustersuche (z.B. beginnt mit 'A')

Beispiel: Finde alle Konzerte, die **nach** dem 01.12.2025 stattfinden **und** mehr als 100 Euro kosten.

SELECT Titel, Datum, Preis
FROM Konzert
WHERE Datum > '2025-12-01' AND Preis > 100;

3. Sortierung und Begrenzung (`ORDER BY`, `LIMIT`)

ORDER BY sortiert das Ergebnis. LIMIT begrenzt die Anzahl der Zeilen (wichtig für die Performance!).

🤝 Modul 5: Tabellen Verknüpfen (`JOINs`)

Überblick: Relationale Datenbanken speichern Daten in mehreren Tabellen. `JOINs` sind notwendig, um diese Tabellen über ihre **Fremdschlüssel** zu verknüpfen und einen vollständigen Datensatz zu erhalten.

1. Arten von `JOINs` (Mengenlehre)

JOIN-TypBeschreibungAnwendungsfall
INNER JOINLiefert nur die Tupel, für die in **beiden Tabellen** ein passender Eintrag existiert (Schnittmenge).Standardfall: Ein Konzert MUSS einen Künstler und einen Veranstaltungsort haben.
LEFT JOINLiefert **alle** Tupel aus der **linken Tabelle** und die passenden Tupel aus der rechten Tabelle. Fehlende Werte werden mit NULL aufgefüllt.Finde alle Künstler, **auch wenn** sie noch kein Konzert eingetragen haben.
RIGHT JOINDas Gegenteil von LEFT JOIN.*Wird seltener verwendet.*

2. Die `JOIN`-Syntax

Der `JOIN`-Befehl benötigt die ON-Klausel, die angibt, welche Spalten (Primär- und Fremdschlüssel) die Tabellen verknüpfen.

Beispiel: Welcher Künstler tritt bei welchem Konzert auf? (Verknüpfung von *Konzert* und *Künstler*)

SELECT K.Titel, Kst.Name AS Künstlername
FROM Konzert K
INNER JOIN Künstler Kst
  ON K.KünstlerID = Kst.ID;
Hinweis: K und Kst sind **Aliase**, um lange Tabellennamen abzukürzen.
Aufgabe: Erstellen Sie eine Abfrage, die alle Benutzer anzeigt, **auch wenn** sie noch kein Ticket reserviert haben.

📊 Modul 8: Datenanalyse (`COUNT`, `GROUP BY`, `HAVING`)

Überblick: Aggregatfunktionen fassen Daten zusammen und berechnen statistische Werte. Sie sind ideal für Reports und Business Intelligence (BI).

1. Aggregatfunktionen

FunktionZweck
COUNT()Zählt die Anzahl der Zeilen.
SUM()Berechnet die Summe der Werte in einer Spalte.
AVG()Berechnet den Durchschnitt (Average).
MIN(), MAX()Findet den minimalen/maximalen Wert.

2. Gruppierung mit `GROUP BY`

Wenn Sie Aggregatfunktionen auf **Untergruppen** von Daten anwenden möchten (z.B. die Anzahl der Konzerte *pro Stadt*), verwenden Sie `GROUP BY`.

Beispiel: Zeige nur Veranstaltungsorte an, in denen **mehr als 5** Konzerte stattfinden.

SELECT OrtID, COUNT(*) AS AnzahlKonzerte
FROM Konzert
GROUP BY OrtID
HAVING COUNT(*) > 5;
Merke: WHERE filtert **Datensätze**; HAVING filtert **Gruppen** (nach Aggregatfunktionen).

📝 Selbsttest zur Überprüfung

Beantworten Sie die folgenden Fragen (mit Hilfe des Skripts und der geladenen Datenbank) und schreiben Sie die entsprechende SQL-Abfrage auf. **Überprüfen Sie erst danach mit dem Lösungsfeld!**

Nr.Frage (Bezug auf den Event-Planer)Ihre SQL-Abfrage
1.Finde alle **Künstler** aus **Hamburg** oder **Berlin**.
2.Gib den **Namen des Künstlers** und den **Titel des Konzerts** aus.
3.Zähle die **Gesamtzahl der Konzerte**, deren Titel mit **"Summer"** beginnt.
4.Finde alle **Veranstaltungsorte**, bei denen die **maximale Kapazität kleiner als 5000** ist **UND** die **nicht** in München liegen.
5.Zeige die **durchschnittlichen Preise** aller Konzerte, gruppiert nach dem **Veranstaltungsort**.
6.Finde die **Künstler**, die **mehr als 3 Konzerte** eingetragen haben (basierend auf Ihren Dummy-Daten).

✅ Lösungsfeld (Zur Selbstkontrolle)

Vergleichen Sie Ihre Abfragen mit den korrekten Lösungen. Denken Sie daran: Bei SQL führen oft mehrere Wege zum Ziel!

Nr.Korrekte SQL-Abfrage
1.SELECT * FROM Künstler WHERE Herkunftsland IN ('Deutschland', 'Schweden');
*Alternative mit OR:* SELECT * FROM Künstler WHERE Herkunftsland = 'Deutschland' OR Herkunftsland = 'Schweden';
2.SELECT Kst.Name, K.Titel FROM Konzert K INNER JOIN Künstler Kst ON K.KünstlerID = Kst.ID;
3.SELECT COUNT(*) FROM Konzert WHERE Titel LIKE 'Summer%';
4.SELECT * FROM Veranstaltungsort WHERE Kapazität < 5000 AND Stadt <> 'München';
5.SELECT V.Name, AVG(K.Preis) FROM Konzert K JOIN Veranstaltungsort V ON K.OrtID = V.ID GROUP BY V.Name;
6.SELECT KünstlerID, COUNT(*) AS Anzahl FROM Konzert GROUP BY KünstlerID HAVING Anzahl > 3;