Arbeite zuerst ohne Hilfen. Lies das jeweilige Schema und die erwarteten Spalten genau. Jede SQL-Ausführung erhält eine neue Kopie der angegebenen Datenbank; Änderungen aus einer anderen Aufgabe werden nicht übernommen. Der Lernstand zählt die bisher erfolgreich gelösten Aufgaben, nicht die Bearbeitungszeit.
Primärschlüssel
Fremdschlüssel
Normalform
Aggregation
Join
Beispiel
Plan: benötigte Tabellen → JOIN → WHERE → GROUP BY → HAVING → ORDER BY
Bei LEFT JOIN: Prüfe ausdrücklich einen Datensatz ohne Partner.
Typische Fehler
Eine Join-Bedingung vergessen
COUNT(*) mit der Zahl tatsächlich vorhandener Buchungen verwechseln
WHERE und HAVING vertauschen
Kurz zusammengefasst
Nutze deine Themenauswertung und wiederhole gezielt die passenden Lektionen. Dies ist ein selbst erstellter Lerncheck, keine offizielle Abiturprüfung.
Abi-Bezug
Begründe Schlüssel und Beziehungen. Prüfe SQL-Abfragen mit Randfällen und benenne die erwarteten Ergebnisspalten.
Abschlussaufgaben
Prüfe deine Lösung automatisch. Bei Bedarf helfen dir ein Tipp und anschließend die Musterlösung.
BPE 6J12 Punktemittel
Datenintegrität begründen
Noch nicht begonnen
Aufgabenstellung
Zwei verschiedene Teams erhalten versehentlich dieselbe team_id. Welche Regel verhindert das zuverlässig?
Ausgabe bzw. Vorschau
Noch nicht ausgeführt.
2 Tipps anzeigen
Gesucht ist eine Regel der Tabelle, nicht der Anzeige.
Ein Schlüsselwert darf nicht zwei Teams bezeichnen.
Lösung anzeigen
Ein Primärschlüssel identifiziert jeden Datensatz eindeutig. Eine Sortierung oder ein Alias verändert keine gespeicherten Integritätsregeln.
BPE 6J12 Punktemittel
Beziehung im Veranstaltungsmodell
Noch nicht begonnen
Aufgabenstellung
Ein Team kann mehrere Termine anbieten. Jeder Termin wird genau einem Team zugeordnet. Wähle beide zutreffenden Aussagen.
Ausgabe bzw. Vorschau
Noch nicht ausgeführt.
2 Tipps anzeigen
Lies die Regel aus beiden Blickrichtungen.
Unterscheide einen Entitätstyp von einem konkreten Exemplar.
Lösung anzeigen
Mehrere Termine können dasselbe Team haben; jeder Termin gehört aber nur einem Team. Ein einzelner Termin ist ein Objekt, kein neues Attribut.
BPE 6J12 Punktemittel
Fremdschlüssel platzieren
Noch nicht begonnen
Aufgabenstellung
Wie wird die beschriebene 1:n-Beziehung ohne wiederholende Attributgruppen umgesetzt?
Ausgabe bzw. Vorschau
Noch nicht ausgeführt.
2 Tipps anzeigen
Bestimme zuerst die n-Seite.
Gesucht ist eine skalierbare Verbindung über einen Schlüssel.
Lösung anzeigen
Die n-Seite Termin speichert den Schlüssel der 1-Seite Team. So kann jeder Termin genau ein Team referenzieren, während sich beliebig viele Termine auf dasselbe Team beziehen.
BPE 6J12 Punktemittel
Transitive Abhängigkeit erkennen
Noch nicht begonnen
Aufgabenstellung
In Termin(termin_id, team_id, team_name) gelten ausschließlich termin_id → team_id und team_id → team_name. termin_id ist der einzige Kandidatenschlüssel. Welche Zerlegung beseitigt die transitive Abhängigkeit?
Ausgabe bzw. Vorschau
Noch nicht ausgeführt.
2 Tipps anzeigen
Prüfe, welches Attribut der Teamname beschreibt.
Die Verbindung zwischen Termin und Team muss erhalten bleiben.
Lösung anzeigen
Der Teamname hängt vom Team ab, nicht unmittelbar vom Termin. Er wird in Team einmal gespeichert; Termin behält den Fremdschlüssel. So werden Änderungen an Teamnamen nicht mehrfach nötig.
BPE 6J13 Punkteanspruchsvoll
Neue Tabelle anlegen
Noch nicht begonnen
Aufgabenstellung
Lege zusätzlich hilfe(hilfe_id, name) an. hilfe_id soll INTEGER PRIMARY KEY sein, name TEXT NOT NULL. Es gibt noch keine Tabelle hilfe.
Schema und fiktive Ausgangsdaten anzeigen
Schlüssel: team.team_id, termin.termin_id, buchung.buchung_id. Fremdschlüssel: termin.team_id → team.team_id und buchung.termin_id → termin.termin_id. datum enthält ISO-Text; beitrag eine Dezimalzahl; IDs, Plätze und Anzahlen sind Ganzzahlen. Jeder Versuch beginnt mit diesen Daten.
team – Ausgangsdaten
team_id
name
1
Codewerk
2
Datenlabor
3
Netzclub
termin – Ausgangsdaten
termin_id
team_id
titel
datum
plaetze
beitrag
10
1
Pythonabend
2026-05-10
12
4
11
2
SQL-Werkstatt
2026-05-12
8
6
12
1
Robotik
2026-06-01
10
5
13
2
Datenrunde
2026-05-20
7
0
20
3
Archivtreff
2025-05-15
9
7
21
3
Junirunde
2026-06-15
9
2
buchung – Ausgangsdaten
buchung_id
termin_id
anzahl
100
10
2
101
10
3
102
11
1
103
12
4
Ausgabe bzw. Vorschau
Noch nicht ausgeführt.
2 Tipps anzeigen
BEGINNE mit CREATE TABLE hilfe und einer Spaltenliste in Klammern.
PRIMARY KEY gehört zu hilfe_id, NOT NULL zur Namensspalte.
Lösung anzeigen
CREATE TABLE hilfe (hilfe_id INTEGER PRIMARY KEY, name TEXT NOT NULL);
BPE 6J13 Punkteanspruchsvoll
Einen Termin erfassen
Noch nicht begonnen
Aufgabenstellung
Füge genau einen Termin ein: (14, 3, 'Netzabend', '2026-06-08', 9, 3) in der sichtbaren Spaltenreihenfolge. Alle vorhandenen Termine sollen erhalten bleiben.
Schema und fiktive Ausgangsdaten anzeigen
Schlüssel: team.team_id, termin.termin_id, buchung.buchung_id. Fremdschlüssel: termin.team_id → team.team_id und buchung.termin_id → termin.termin_id. datum enthält ISO-Text; beitrag eine Dezimalzahl; IDs, Plätze und Anzahlen sind Ganzzahlen. Jeder Versuch beginnt mit diesen Daten.
team – Ausgangsdaten
team_id
name
1
Codewerk
2
Datenlabor
3
Netzclub
termin – Ausgangsdaten
termin_id
team_id
titel
datum
plaetze
beitrag
10
1
Pythonabend
2026-05-10
12
4
11
2
SQL-Werkstatt
2026-05-12
8
6
12
1
Robotik
2026-06-01
10
5
13
2
Datenrunde
2026-05-20
7
0
20
3
Archivtreff
2025-05-15
9
7
21
3
Junirunde
2026-06-15
9
2
buchung – Ausgangsdaten
buchung_id
termin_id
anzahl
100
10
2
101
10
3
102
11
1
103
12
4
Ausgabe bzw. Vorschau
Noch nicht ausgeführt.
2 Tipps anzeigen
Schreibe Text und ISO-Datum in einfache Anführungszeichen.
Die team_id muss bereits in team existieren. Verwende eine neue termin_id.
Lösung anzeigen
INSERT INTO termin (termin_id, team_id, titel, datum, plaetze, beitrag) VALUES (14, 3, 'Netzabend', '2026-06-08', 9, 3);
BPE 6J13 Punkteanspruchsvoll
Titel gezielt auswählen
Noch nicht begonnen
Aufgabenstellung
Gib nur die Spalte titel aller Termine alphabetisch aufsteigend aus.
Schema und fiktive Ausgangsdaten anzeigen
Schlüssel: team.team_id, termin.termin_id, buchung.buchung_id. Fremdschlüssel: termin.team_id → team.team_id und buchung.termin_id → termin.termin_id. datum enthält ISO-Text; beitrag eine Dezimalzahl; IDs, Plätze und Anzahlen sind Ganzzahlen. Jeder Versuch beginnt mit diesen Daten.
team – Ausgangsdaten
team_id
name
1
Codewerk
2
Datenlabor
3
Netzclub
termin – Ausgangsdaten
termin_id
team_id
titel
datum
plaetze
beitrag
10
1
Pythonabend
2026-05-10
12
4
11
2
SQL-Werkstatt
2026-05-12
8
6
12
1
Robotik
2026-06-01
10
5
13
2
Datenrunde
2026-05-20
7
0
20
3
Archivtreff
2025-05-15
9
7
21
3
Junirunde
2026-06-15
9
2
buchung – Ausgangsdaten
buchung_id
termin_id
anzahl
100
10
2
101
10
3
102
11
1
103
12
4
Ausgabe bzw. Vorschau
Noch nicht ausgeführt.
2 Tipps anzeigen
Wähle genau eine Spalte aus.
ORDER BY titel ASC legt die verlangte Reihenfolge fest.
Lösung anzeigen
SELECT titel FROM termin ORDER BY titel ASC;
BPE 6J13 Punkteanspruchsvoll
Mai-Termine filtern
Noch nicht begonnen
Aufgabenstellung
Gesucht sind Termine im Mai 2026 mit mindestens acht Plätzen. Gib titel, plaetze aus, nach titel aufsteigend.
Schema und fiktive Ausgangsdaten anzeigen
Schlüssel: team.team_id, termin.termin_id, buchung.buchung_id. Fremdschlüssel: termin.team_id → team.team_id und buchung.termin_id → termin.termin_id. datum enthält ISO-Text; beitrag eine Dezimalzahl; IDs, Plätze und Anzahlen sind Ganzzahlen. Jeder Versuch beginnt mit diesen Daten.
team – Ausgangsdaten
team_id
name
1
Codewerk
2
Datenlabor
3
Netzclub
termin – Ausgangsdaten
termin_id
team_id
titel
datum
plaetze
beitrag
10
1
Pythonabend
2026-05-10
12
4
11
2
SQL-Werkstatt
2026-05-12
8
6
12
1
Robotik
2026-06-01
10
5
13
2
Datenrunde
2026-05-20
7
0
20
3
Archivtreff
2025-05-15
9
7
21
3
Junirunde
2026-06-15
9
2
buchung – Ausgangsdaten
buchung_id
termin_id
anzahl
100
10
2
101
10
3
102
11
1
103
12
4
Ausgabe bzw. Vorschau
Noch nicht ausgeführt.
2 Tipps anzeigen
Die Bedingungen für Datum und Platzzahl müssen gleichzeitig gelten.
Ein halboffenes Datumsintervall grenzt den Monat eindeutig ab.
Lösung anzeigen
SELECT titel, plaetze FROM termin WHERE datum >= '2026-05-01' AND datum < '2026-06-01' AND plaetze >= 8 ORDER BY titel;
BPE 6J13 Punkteanspruchsvoll
Kennzahlen berechnen
Noch nicht begonnen
Aufgabenstellung
Ermittle über alle Termine die Gesamtzahl der Plätze und den höchsten Beitrag. Verwende die Ergebnisspalten gesamt, maximum in dieser Reihenfolge.
Schema und fiktive Ausgangsdaten anzeigen
Schlüssel: team.team_id, termin.termin_id, buchung.buchung_id. Fremdschlüssel: termin.team_id → team.team_id und buchung.termin_id → termin.termin_id. datum enthält ISO-Text; beitrag eine Dezimalzahl; IDs, Plätze und Anzahlen sind Ganzzahlen. Jeder Versuch beginnt mit diesen Daten.
team – Ausgangsdaten
team_id
name
1
Codewerk
2
Datenlabor
3
Netzclub
termin – Ausgangsdaten
termin_id
team_id
titel
datum
plaetze
beitrag
10
1
Pythonabend
2026-05-10
12
4
11
2
SQL-Werkstatt
2026-05-12
8
6
12
1
Robotik
2026-06-01
10
5
13
2
Datenrunde
2026-05-20
7
0
20
3
Archivtreff
2025-05-15
9
7
21
3
Junirunde
2026-06-15
9
2
buchung – Ausgangsdaten
buchung_id
termin_id
anzahl
100
10
2
101
10
3
102
11
1
103
12
4
Ausgabe bzw. Vorschau
Noch nicht ausgeführt.
2 Tipps anzeigen
SUM addiert Werte über mehrere Datensätze.
MAX liefert den größten Beitrag; Aliase benennen die Ergebnisspalten.
Lösung anzeigen
SELECT SUM(plaetze) AS gesamt, MAX(beitrag) AS maximum FROM termin;
BPE 6J13 Punkteanspruchsvoll
Große Teamangebote finden
Noch nicht begonnen
Aufgabenstellung
Gib je team_id die Summe der Plätze als gesamt aus. Zeige nur Teams mit insgesamt mehr als 15 Plätzen, nach team_id sortiert. Ergebnisspalten: team_id, gesamt.
Schema und fiktive Ausgangsdaten anzeigen
Schlüssel: team.team_id, termin.termin_id, buchung.buchung_id. Fremdschlüssel: termin.team_id → team.team_id und buchung.termin_id → termin.termin_id. datum enthält ISO-Text; beitrag eine Dezimalzahl; IDs, Plätze und Anzahlen sind Ganzzahlen. Jeder Versuch beginnt mit diesen Daten.
team – Ausgangsdaten
team_id
name
1
Codewerk
2
Datenlabor
3
Netzclub
termin – Ausgangsdaten
termin_id
team_id
titel
datum
plaetze
beitrag
10
1
Pythonabend
2026-05-10
12
4
11
2
SQL-Werkstatt
2026-05-12
8
6
12
1
Robotik
2026-06-01
10
5
13
2
Datenrunde
2026-05-20
7
0
20
3
Archivtreff
2025-05-15
9
7
21
3
Junirunde
2026-06-15
9
2
buchung – Ausgangsdaten
buchung_id
termin_id
anzahl
100
10
2
101
10
3
102
11
1
103
12
4
Ausgabe bzw. Vorschau
Noch nicht ausgeführt.
2 Tipps anzeigen
GROUP BY erzeugt eine Gruppe pro Team.
Die Bedingung auf SUM gehört in HAVING, nicht in WHERE.
Lösung anzeigen
SELECT team_id, SUM(plaetze) AS gesamt FROM termin GROUP BY team_id HAVING SUM(plaetze) > 15 ORDER BY team_id;
BPE 6J13 Punkteanspruchsvoll
Kostenlose Angebote zuordnen
Noch nicht begonnen
Aufgabenstellung
Gib für alle kostenlosen Termine den Teamnamen und Titel aus. Spalten: name, titel; nach titel aufsteigend sortieren.
Schema und fiktive Ausgangsdaten anzeigen
Schlüssel: team.team_id, termin.termin_id, buchung.buchung_id. Fremdschlüssel: termin.team_id → team.team_id und buchung.termin_id → termin.termin_id. datum enthält ISO-Text; beitrag eine Dezimalzahl; IDs, Plätze und Anzahlen sind Ganzzahlen. Jeder Versuch beginnt mit diesen Daten.
team – Ausgangsdaten
team_id
name
1
Codewerk
2
Datenlabor
3
Netzclub
termin – Ausgangsdaten
termin_id
team_id
titel
datum
plaetze
beitrag
10
1
Pythonabend
2026-05-10
12
4
11
2
SQL-Werkstatt
2026-05-12
8
6
12
1
Robotik
2026-06-01
10
5
13
2
Datenrunde
2026-05-20
7
0
20
3
Archivtreff
2025-05-15
9
7
21
3
Junirunde
2026-06-15
9
2
buchung – Ausgangsdaten
buchung_id
termin_id
anzahl
100
10
2
101
10
3
102
11
1
103
12
4
Ausgabe bzw. Vorschau
Noch nicht ausgeführt.
2 Tipps anzeigen
Verbinde Team und Termin über team_id.
Kostenlos bedeutet beitrag = 0, nicht NULL.
Lösung anzeigen
SELECT team.name, termin.titel FROM team INNER JOIN termin ON team.team_id = termin.team_id WHERE termin.beitrag = 0 ORDER BY termin.titel;
BPE 6J13 Punkteanspruchsvoll
Auch ungebuchte Termine anzeigen
Noch nicht begonnen
Aufgabenstellung
Gib für jeden Termin die gebuchte Personenzahl aus. Ohne Buchung soll 0 erscheinen. Spalten: titel, gebucht; sortiere nach termin_id aufsteigend.
Schema und fiktive Ausgangsdaten anzeigen
Schlüssel: team.team_id, termin.termin_id, buchung.buchung_id. Fremdschlüssel: termin.team_id → team.team_id und buchung.termin_id → termin.termin_id. datum enthält ISO-Text; beitrag eine Dezimalzahl; IDs, Plätze und Anzahlen sind Ganzzahlen. Jeder Versuch beginnt mit diesen Daten.
team – Ausgangsdaten
team_id
name
1
Codewerk
2
Datenlabor
3
Netzclub
termin – Ausgangsdaten
termin_id
team_id
titel
datum
plaetze
beitrag
10
1
Pythonabend
2026-05-10
12
4
11
2
SQL-Werkstatt
2026-05-12
8
6
12
1
Robotik
2026-06-01
10
5
13
2
Datenrunde
2026-05-20
7
0
20
3
Archivtreff
2025-05-15
9
7
21
3
Junirunde
2026-06-15
9
2
buchung – Ausgangsdaten
buchung_id
termin_id
anzahl
100
10
2
101
10
3
102
11
1
103
12
4
Ausgabe bzw. Vorschau
Noch nicht ausgeführt.
2 Tipps anzeigen
LEFT JOIN erhält auch Termine ohne passende Buchung.
Summiere anzahl statt Buchungszeilen zu zählen. COALESCE ersetzt ein fehlendes Summenergebnis durch 0.
Lösung anzeigen
SELECT termin.titel, COALESCE(SUM(buchung.anzahl), 0) AS gebucht FROM termin LEFT JOIN buchung ON termin.termin_id = buchung.termin_id GROUP BY termin.termin_id, termin.titel ORDER BY termin.termin_id;
Gesamtergebnis
Bearbeite Aufgaben, um deine Auswertung zu sehen.
Die Auswertung ist vorläufig, solange Aufgaben noch offen sind.