SQL Quest ist eine interaktive Lernanwendung, mit der Nutzer SQL Schritt für Schritt anhand eines Shop-Datenmodells üben können. Die Anwendung läuft direkt im Browser und führt SQL-Abfragen gegen eine vorbereitete SQLite-Datenbank aus.
- 80 interaktive SQL-Level mit direkter Abfrageausführung im Browser
- Hinweise und Lösungen je Level
- Sternesystem zur Freischaltung weiterer Level
- Gespeicherter Fortschritt im Browser
- Lernhilfen zu bereits freigeschalteten SQL-Bausteinen
- Tab „Was habe ich gelernt?“ mit Überblick über den Lernfortschritt
- Schwebender Zurück-Button und Nach-oben-Button
- Responsive Darstellung für Desktop und Mobilgeräte
- Abschlussseite nach Level 80 mit Punktzahl, gelösten Leveln und Sternen
- Automatisierte Node-Basistests und GitHub Actions für Syntax-, Diff- und Funktionstests
- Versteckter Testmodus für Entwicklung über
?testmode=1
- Level 1–30
- Themen:
SELECTundFROM- Spalten auswählen
WHEREORDER BYLIMITLIKEAND,ORundNOTCOUNT,AVG,SUM,MINundMAXDISTINCTGROUP BYundHAVING
- Wird nach Abschluss von Level 30 freigeschaltet
- Level 31–60
- Themen:
INNER JOINLEFT JOINON-Bedingungen- JOINs über mehrere Tabellen
COUNTundSUMmit JOINGROUP BY,ORDER BYundHAVINGmit JOIN- Bestellwerte und Shop-Auswertungen
- Unterabfragen
INundNOT INEXISTSundNOT EXISTS- Vergleiche mit
AVGund komplexere Filter
- Wird nach Abschluss von Level 60 freigeschaltet
- Level 61–80
- Themen:
CASE WHENfür Umsatzkategorien und verständliche Einordnungen- CTEs mit
WITHfür übersichtliche Zwischenergebnisse - verschachtelte Unterabfragen als Alternative für komplexe Vergleichswerte
- mehrstufige Unterabfragen mit
AVG,GROUP BYundHAVING - komplexe JOIN-Auswertungen über Kunden, Bestellungen, Bestellpositionen und Produkte
NULLundCOALESCE()für fehlende Daten und sinnvolle Ersatzwerte- SQLite-Datumsfunktionen wie
date()undstrftime()für Monats- und Jahresauswertungen - Window Functions mit
ROW_NUMBER(),RANK()undOVER (ORDER BY ...) PARTITION BYfür Rankings innerhalb von Gruppen- laufende Summen mit Window Functions
- Meister-Challenges mit
JOIN, Unterabfrage oder CTE,CASE WHEN,COALESCE,GROUP BY,HAVING, Window Functions undPARTITION BY - Bestellwertberechnung mit
menge * einzelpreis
- Neue Level werden normalerweise mit mindestens zwei Sternen im vorherigen Level freigeschaltet.
- Level 31 wird direkt nach dem Lösen von Level 30 freigeschaltet.
- Level 41 wird direkt nach dem Lösen von Level 40 freigeschaltet.
- Level 51 wird direkt nach dem Lösen von Level 50 freigeschaltet.
- Level 61 wird direkt nach dem Lösen von Level 60 freigeschaltet.
- Für Level 62–80 sind mindestens zwei Sterne im vorherigen Level erforderlich.
- Der aktuelle Fortschritt wird lokal im Browser gespeichert.
SQL Quest verwendet eine kleine Shop-Datenbank mit vier Tabellen:
kunden: Kundendaten wie Name, Stadt, Alter und Punkteprodukte: Produktdaten wie Name, Kategorie, Preis und Lagerbestandbestellungen: Bestellungen mit Kundenzuordnung, Datum und Statusbestellpositionen: Einzelne Positionen einer Bestellung mit Produkt, Menge und Einzelpreis
Diese Tabellen werden für realistische Shop-Abfragen und JOIN-Übungen verwendet.
SQL Quest ist eine statische HTML/CSS/JavaScript-Anwendung. Es wird kein Build-Schritt benötigt. Die automatisierten Tests laufen mit Node.js und npm test.
Repository klonen und einen einfachen lokalen Webserver starten:
git clone <repository-url>
cd sql-quest
python3 -m http.serverDanach im Browser öffnen:
http://localhost:8000
Alternativ kann index.html direkt in einem modernen Browser geöffnet werden. Für sql.js wird eine Internetverbindung benötigt, weil die Bibliothek über ein CDN geladen wird.
- HTML
- CSS
- JavaScript
- sql.js / SQLite im Browser
index.html
style.css
app.js
levels.js
database.js
README.md
quest-logic.js
tests/run-tests.js
.github/workflows/tests.yml
Die Anwendung ist über GitHub Pages erreichbar:
Zum schnellen Testen aller Level kann der Testmodus über diesen Link geöffnet werden:
Im Testmodus können alle Level freigeschaltet, alle Level als gelöst markiert, der Fortschritt zurückgesetzt sowie die Bereiche Anfänger, Fortgeschritten und Meister direkt geöffnet werden.
Ohne den URL-Parameter ?testmode=1 bleibt dieser Bereich in der Anwendung unsichtbar.
Die Basis-Tests prüfen Levelstruktur, Freischaltlogik, SQL-Sicherheitslogik und Testmodus-Helfer. Lokal ausführen:
node --check app.js
node --check levels.js
git diff --check
npm testDer Workflow .github/workflows/tests.yml führt diese Checks automatisch bei Pushes und Pull Requests aus.
Nach erfolgreichem Lösen von Level 80 erscheint eine Abschlusskarte mit gelösten Leveln, Gesamtpunktzahl, erreichten Sternen und der Bestätigung, dass Anfänger-, Fortgeschrittenen- und Meisterbereich abgeschlossen wurden. Der Abschluss bleibt nach einem Neuladen über den gespeicherten Browser-Fortschritt erreichbar und wird durch „Fortschritt zurücksetzen“ entfernt.