Zum Inhalt springen

Unabhängiges Lernangebot – nicht von einer IHK erstellt oder geprüft.

Datenbanken · AE und SI

SQL: SELECT, JOIN und GROUP BY üben

Lerne SQL-Abfragen mit Filtern, Tabellenverknüpfungen und Aggregaten. Bestimme Ergebnisse und erkenne typische Fehler anhand kleiner Datensätze.

Verantwortlich: Bär Softwareentwicklung UG (haftungsbeschränkt) / Aktualisiert: 07.10.2026

Automatisch bewertetes Thementraining

Wissen direkt in einem kurzen Set prüfen

Bearbeite bis zu 5 zufällig ausgewählte Aufgaben in etwa 5 Minuten. Du erhältst nach jeder Aufgabe Feedback und am Ende eine kompakte Auswertung.

SELECT und WHERE: Daten gezielt auswählen

SELECT benennt die Ausgabespalten, FROM die Datenquelle und WHERE die Bedingung für einzelne Zeilen. ORDER BY legt die Sortierung fest. Ohne ORDER BY ist keine bestimmte Ausgabeordnung zugesichert.

NULL kennzeichnet einen fehlenden beziehungsweise unbekannten Wert. Prüfe ihn mit IS NULL statt mit = NULL. Bei gemischten AND- und OR-Bedingungen helfen Klammern, die Absicht eindeutig auszudrücken.

  • SELECT name FROM kunden WHERE aktiv = 1 ORDER BY name
  • Fehlende Werte: IS NULL oder IS NOT NULL
  • AND bindet stärker als OR

JOIN: passende Zeilen verbinden

Ein INNER JOIN gibt passende Zeilenpaare aus. Ein LEFT JOIN behält auch Zeilen der linken Tabelle ohne Treffer; die rechten Spalten sind dann NULL.

Eine 1:n-Beziehung kann eine linke Zeile mehrfach im Ergebnis erscheinen lassen. Ein Filter auf die rechte Tabelle in WHERE kann beim LEFT JOIN die Zeilen ohne Treffer wieder entfernen.

  • JOIN kunden k ON b.kunde_id = k.id
  • Joinbedingungen ausdrücklich angeben
  • COUNT(b.id) zählt beim LEFT JOIN nur nicht leere Bestellungs-IDs

GROUP BY und HAVING: Gruppen auswerten

GROUP BY fasst Zeilen nach den genannten Spalten zusammen. COUNT, SUM und AVG berechnen Kennzahlen je Gruppe. Wähle für portable Abfragen nur gruppierte Spalten oder Aggregate aus.

WHERE filtert die Eingabezeilen vor der Gruppierung; HAVING prüft danach die Gruppen. COUNT(*) zählt alle Ergebniszeilen, COUNT(spalte) nur die Zeilen mit einem Nicht-NULL-Wert in dieser Spalte.

  • WHERE betrag > 0: einzelne Zeilen filtern
  • GROUP BY kunde_id: eine Gruppe je Kunde
  • HAVING SUM(betrag) > 100: Gruppen filtern

Durchgerechnetes Beispiel

Umsatz je Kunde

bestellungen enthält (kunde_id, betrag): (1, 40), (1, 80), (2, 50). Gesucht sind Kunden mit insgesamt mehr als 100 Euro.

  1. 01 Gruppiere mit GROUP BY kunde_id.
  2. 02 SUM(betrag) ergibt für Kunde 1 den Wert 120 und für Kunde 2 den Wert 50.
  3. 03 SELECT kunde_id, SUM(betrag) AS umsatz FROM bestellungen GROUP BY kunde_id HAVING SUM(betrag) > 100;

Ergebnis / Nur Kunde 1 erscheint mit 120 Euro.

Durchgerechnetes Beispiel

Auch Kunden ohne Bestellung zählen

kunden enthält IDs 1 und 2; bestellungen enthält die IDs 10 und 11, beide für Kunde 1.

  1. 01 Beginne mit kunden und verwende einen LEFT JOIN auf bestellungen.
  2. 02 SELECT k.id, COUNT(b.id) AS anzahl FROM kunden k LEFT JOIN bestellungen b ON b.kunde_id = k.id GROUP BY k.id ORDER BY k.id;
  3. 03 COUNT(b.id) zählt die NULL-Ergänzung für Kunde 2 nicht.

Ergebnis / Kunde 1 hat zwei Bestellungen, Kunde 2 hat null.

Beispiel verstanden?

Jetzt in etwa 5 Minuten selbst anwenden

Auf einen Blick
Baustein Zweck
WHEREEinzelne Zeilen filtern
INNER JOINNur passende Paare
LEFT JOINAlle linken Zeilen behalten
GROUP BYGruppen bilden
HAVINGGruppen filtern

Typische Fehler vermeiden

  • SUM(betrag) gehört als Gruppenbedingung in HAVING, nicht in WHERE.
  • COUNT(*) und COUNT(b.id) liefern bei einem LEFT JOIN nicht immer dasselbe Ergebnis.
  • Ein JOIN ohne passende Bedingung kann die Zeilenzahl vervielfachen.

Direkt anwenden

8 Übungen mit Lösungen

Beantworte die Aufgabe zuerst selbst. Öffne danach die Lösung, um Antwort und Rechenweg zu vergleichen.

  1. Aufgabe 01

    Anwendungsentwicklung

    Welche Bedingung findet Kunden, deren E-Mail-Adresse NULL ist?

    Übungsvorschau: Notiere hier zuerst deinen Ansatz oder starte dieselbe Aufgabe anschließend im bewerteten Lernmodus.

    Lösung anzeigen

    Musterlösung: WHERE email IS NULL

    IS NULL prüft fehlende Werte. Ein normaler Vergleich mit NULL liefert UNKNOWN.

  2. Aufgabe 02

    Systemintegration

    Die Tabelle umsaetze enthält Beträge 20, 30 und 70. SELECT COUNT(*) FROM umsaetze WHERE betrag >= 30 liefert welche Zahl?

    Übungsvorschau: Notiere hier zuerst deinen Ansatz oder starte dieselbe Aufgabe anschließend im bewerteten Lernmodus.

    Lösung anzeigen

    Musterlösung: 2

    30 und 70 erfüllen >= 30. COUNT(*) zählt diese zwei Zeilen.

  3. Aufgabe 03

    Anwendungsentwicklung

    Du möchtest alle Kunden samt eventuell vorhandenen Bestellungen sehen, einschließlich Kunden ohne Bestellung. Welcher JOIN passt?

    Übungsvorschau: Notiere hier zuerst deinen Ansatz oder starte dieselbe Aufgabe anschließend im bewerteten Lernmodus.

    Lösung anzeigen

    Musterlösung: kunden LEFT JOIN bestellungen ON bestellungen.kunde_id = kunden.id

    Der LEFT JOIN erhält alle Kunden der linken Tabelle; bei fehlender Bestellung sind die rechten Spalten NULL.

  4. Aufgabe 04

    Systemintegration

    kunden enthält IDs 1, 2 und 3. bestellungen enthält drei Zeilen mit kunde_id 1 und eine mit kunde_id 2. Wie viele Zeilen liefert ein INNER JOIN über kunde_id = kunden.id?

    Übungsvorschau: Notiere hier zuerst deinen Ansatz oder starte dieselbe Aufgabe anschließend im bewerteten Lernmodus.

    Lösung anzeigen

    Musterlösung: 4

    Kunde 1 liefert drei passende Paare, Kunde 2 eines, Kunde 3 keines. Insgesamt sind es vier Zeilen.

  5. Aufgabe 05

    Anwendungsentwicklung

    Welche Klausel filtert nach GROUP BY kunde_id die Gruppen mit mehr als zwei Bestellungen?

    Übungsvorschau: Notiere hier zuerst deinen Ansatz oder starte dieselbe Aufgabe anschließend im bewerteten Lernmodus.

    Lösung anzeigen

    Musterlösung: HAVING COUNT(*) > 2

    HAVING prüft die Gruppen nach der Aggregation. WHERE filtert vorher einzelne Eingabezeilen.

  6. Aufgabe 06

    Systemintegration

    kunden enthält nur IDs 1 und 2. bestellungen enthält IDs 10 und 11, beide für kunde_id 1. Welchen Wert liefert COUNT(b.id) für Kunde 2 bei einem LEFT JOIN von kunden k auf bestellungen b und GROUP BY k.id?

    Übungsvorschau: Notiere hier zuerst deinen Ansatz oder starte dieselbe Aufgabe anschließend im bewerteten Lernmodus.

    Lösung anzeigen

    Musterlösung: 0

    Kunde 2 erhält eine ergänzte Ergebniszeile mit b.id = NULL. COUNT(b.id) zählt sie nicht; COUNT(*) würde sie zählen.

  7. Aufgabe 07

    Anwendungsentwicklung

    bestellungen enthält (kunde_id, betrag): (1, 25), (1, 35), (2, 80). Welchen Wert liefert SUM(betrag) für Kunde 1 bei GROUP BY kunde_id?

    Übungsvorschau: Notiere hier zuerst deinen Ansatz oder starte dieselbe Aufgabe anschließend im bewerteten Lernmodus.

    Lösung anzeigen

    Musterlösung: 60

    Die beiden Zeilen für Kunde 1 werden zusammengefasst: 25 + 35 = 60.

  8. Aufgabe 08

    Systemintegration

    Ordne die SQL-Bausteine ihrer Hauptaufgabe zu.

    Übungsvorschau: Notiere hier zuerst deinen Ansatz oder starte dieselbe Aufgabe anschließend im bewerteten Lernmodus.

    Lösung anzeigen

    Musterlösung: WHERE → Einzelne Eingabezeilen filtern; GROUP BY → Zeilen zu Gruppen zusammenfassen; HAVING → Aggregierte Gruppen filtern; ORDER BY → Ergebnis sortieren

    WHERE wirkt vor der Gruppierung, HAVING danach. ORDER BY legt die Ausgabeordnung fest.

Kurz erklärt

Häufige Fragen

Muss ich SQL für ein bestimmtes Datenbanksystem lernen?

Die Beispiele nutzen verbreitete SQL-Grundlagen. Datentypen, Funktionen und Spezialsyntax können sich zwischen Systemen unterscheiden.

Wie finde ich NULL-Werte?

Mit IS NULL. Der Vergleich = NULL liefert keine normale Wahr/Falsch-Prüfung auf einen fehlenden Wert.

Fachliche Referenz: PostgreSQL: Tabellen mit JOIN verbinden. Die Erklärungen und Aufgaben auf dieser Seite sind eigenständig formuliert.