Bisher haben wir gelernt, Tabellen zu erstellen, zu verknüpfen und einfache CRUD-Operationen durchzuführen.
In diesem Kapitel gehen wir einen Schritt weiter: Wir kombinieren Tabellen mit JOINs, fassen Daten mit GROUP BY zusammen und nutzen Aggregatfunktionen wie COUNT(), SUM(), AVG().

🔹 JOIN – Daten aus mehreren Tabellen kombinieren

Beispiel 1: Kunden mit ihren Bestellungen

SELECT k.vorname, k.nachname, b.produkt, b.preis, b.bestelldatum
FROM kunden k
JOIN bestellungen b ON k.id = b.kunde_id;

Beispiel 2: Kunden ohne Bestellungen (LEFT JOIN) 

SELECT k.vorname, k.nachname, b.produkt
FROM kunden k
LEFT JOIN bestellungen b ON k.id = b.kunde_id;

👉 Hinweis: Alle Kunden werden angezeigt, auch die ohne Bestellungen (dann sind Bestellwerte NULL).

SELECT k.vorname, k.nachname, p.name AS produkt, p.preis
FROM kunden k
JOIN kunden_produkte kp ON k.id = kp.kunde_id
JOIN produkte p ON kp.produkt_id = p.id;

Beispiel 3: Produkte eines Kunden (n:m über Zwischentabelle)

SELECT k.vorname, k.nachname, p.name AS produkt, p.preis
FROM kunden k
JOIN kunden_produkte kp ON k.id = kp.kunde_id
JOIN produkte p ON kp.produkt_id = p.id;

🔹 GROUP BY – Daten zusammenfassen

Beispiel 1: Anzahl der Bestellungen pro Kunde

SELECT k.vorname, k.nachname, COUNT(b.id) AS anzahl_bestellungen
FROM kunden k
LEFT JOIN bestellungen b ON k.id = b.kunde_id
GROUP BY k.id;

Beispiel 2: Gesamtausgaben pro Kunde

SELECT k.vorname, k.nachname, SUM(b.preis) AS gesamt_ausgaben
FROM kunden k
JOIN bestellungen b ON k.id = b.kunde_id
GROUP BY k.id;

Beispiel 3: Durchschnittspreis pro Produkt

SELECT p.name, AVG(b.preis) AS durchschnitt_preis
FROM produkte p
JOIN kunden_produkte kp ON p.id = kp.produkt_id
JOIN bestellungen b ON b.produkt = p.name
GROUP BY p.id;

🔹 HAVING – Bedingungen auf Gruppen anwenden

HAVING ist wie WHERE, nur für Gruppenergebnisse.

Beispiel: Nur Kunden anzeigen, die mehr als eine Bestellung haben.

SELECT k.vorname, k.nachname, COUNT(b.id) AS anzahl
FROM kunden k
JOIN bestellungen b ON k.id = b.kunde_id
GROUP BY k.id
HAVING COUNT(b.id) > 1;

🔹 Subqueries – Abfragen in Abfragen

Beispiel: Kunden mit Bestellungen über 50 €

SELECT vorname, nachname
FROM kunden
WHERE id IN (
    SELECT kunde_id FROM bestellungen WHERE preis > 50
);

🔹 Übung

  1. Liste alle Kunden mit der Anzahl ihrer Bestellungen.
  2. Berechne die Gesamtausgaben je Kunde.
  3. Finde alle Kunden, die keine Bestellungen haben.
  4. Erstelle eine Abfrage, die alle Produkte auflistet, die von mehr als einem Kunden gekauft wurden.

✅ Zusammenfassung

  • JOIN verbindet Tabellen (INNER, LEFT, RIGHT).
  • GROUP BY fasst Daten zusammen (z. B. pro Kunde).
  • Aggregatfunktionen wie COUNT, SUM, AVG liefern Statistiken.
  • HAVING filtert Gruppenergebnisse.
  • Subqueries erlauben verschachtelte Abfragen.

Im nächsten Kapitel schauen wir uns an, wie man eine Datenbank optimiert und verwaltet: Indexe, Views und Transaktionen.

📚 Inhaltsverzeichnis

👉 MariaDB Kapitel 1: Einführung & Installation im Terminal
👉 MariaDB Kapitel 2: Benutzer & Rechteverwaltung
👉 MariaDB Kapitel 3: Tabellen sauber anlegen (Primär- & Fremdschlüssel)
👉 MariaDB Kapitel 4: Grundbefehle & Kurzschreibweisen in der MariaDB-Konsole
👉 MariaDB Kapitel 5: CRUD-Befehle  – Daten einfügen, lesen, ändern und löschen
👉 MariaDB Kapitel 6: Primär- und Fremdschlüssel – Tabellen verknüpfen
👉 MariaDB Kapitel 7: Profi-Abfragen mit JOIN, GROUP BY & Aggregatfunktionen
👉 MariaDB Kapitel 8: Indexe, Views & Transaktionen
👉 MariaDB Kapitel 9: Produktivbetrieb – Sicherheit, Backups & Verwaltung
👉 MariaDB Kapitel 10: Abschlussprojekt – Ein Mini-Shop

📚 Bonus-Kapitel Ideen

👉 MariaDB Kapitel 11: Stored Procedures – Automatisierte Abläufe
👉 MariaDB Kapitel 12: Trigger – Aktionen bei Änderungen
👉 MariaDB Kapitel 13: Events – Zeitgesteuerte Aufgaben
👉 MariaDB Kapitel 14: Sicherheit & Best Practices
👉 MariaDB Kapitel 15: Performance-Tuning & Optimierung