Bibliothek

Fach wählen

Themen

SQL-Joins und Aggregation

Tabellen verbinden

Ein Join verknüpft zwei Tabellen anhand passender Werte. In normalisierten Datenbanken sind Informationen auf mehrere Tabellen verteilt; um etwa den Klassenlehrer einer Schülerin abzufragen, müssen die Tabellen schüler und klasse über den gemeinsamen Schlüssel klasse_id verbunden werden.

schüler              klasse
sid|name |klasse_id    kid|bezeichnung|lehrer
---+-----+---------    ---+-----------+-------
 1 |Anna |   12         11|11a        |Müller
 2 |Ben  |   11         12|12a        |Schmidt
INNER JOIN

Der INNER JOIN liefert nur die Zeilen, für die in beiden Tabellen ein Treffer existiert.

SELECT s.name, k.bezeichnung, k.lehrer
FROM   schüler s
INNER JOIN klasse k ON s.klasse_id = k.kid;

Ergebnis enthält nur Schüler mit gültiger Klassenzuordnung.

LEFT, RIGHT und FULL JOIN

Der LEFT OUTER JOIN liefert alle Zeilen der linken Tabelle, auch wenn rechts kein Treffer existiert (fehlende Werte werden NULL).

SELECT s.name, k.bezeichnung
FROM   schüler s
LEFT JOIN klasse k ON s.klasse_id = k.kid;

Der RIGHT JOIN ist symmetrisch dazu – alle Zeilen der rechten Tabelle. Der FULL OUTER JOIN kombiniert beide: alle Zeilen aus links und rechts, jeweils mit NULLs aufgefüllt, wo es keinen Partner gibt. Nicht jede Datenbank (z. B. MySQL) unterstützt FULL OUTER nativ.

GROUP BY und Aggregatfunktionen

Mit GROUP BY fasst man Zeilen anhand gleicher Spaltenwerte zusammen und wendet auf jede Gruppe Aggregatfunktionen an: COUNT(*) zählt Zeilen, SUM(x) summiert, AVG(x) berechnet den Durchschnitt, MIN/MAX liefern Extremwerte.

SELECT klasse_id, COUNT(*) AS anzahl, AVG(note) AS schnitt
FROM   schüler
GROUP BY klasse_id;

Ergebnis: pro Klasse die Anzahl der Schüler und der Notendurchschnitt.

HAVING – Bedingungen für Gruppen

Die WHERE-Klausel filtert Zeilen vor der Gruppierung. Will man Gruppen filtern, nutzt man HAVING:

SELECT klasse_id, AVG(note) AS schnitt
FROM   schüler
GROUP BY klasse_id
HAVING AVG(note) < 2.5;

Liefert nur Klassen mit besserem Schnitt als 2,5.

Anwendung und Reihenfolge

Die logische Auswertungsreihenfolge ist: FROM → JOIN → WHERE → GROUP BY → HAVING → SELECT → ORDER BY. In Prüfungsaufgaben hilft diese Reihenfolge, die Bedeutung einer Abfrage Schritt für Schritt nachzuvollziehen.

Häufige Fehler

Verwechslung von INNER und LEFT JOIN, vergessene Join-Bedingung (kartesisches Produkt mit Hunderten Zeilen!), Spalten in SELECT, die nicht in GROUP BY stehen, und Filtern mit WHERE statt HAVING nach einer Aggregatfunktion.

Zusammenfassung: Joins verbinden Tabellen, GROUP BY fasst Zeilen zusammen, Aggregatfunktionen verdichten Daten, HAVING filtert Gruppen.

Abitur-Tipp: Bei JOIN-Aufgaben immer ein Mini-Beispiel mit zwei Zeilen pro Tabelle aufzeichnen und die Ergebnistabelle händisch erstellen.