Learn SQL by breaking it on purpose.
Subquest is a SQL adventure for future data analysts. Explore worlds of realistic data, defeat boss queries, and unmask NULL — the ghost that haunts every database.
Free to play. No install. No account needed for world 1.

-- quest 302: where did everyone go? SELECT name, last_seen FROM adventurers WHERE last_seen = NULL;

Meet NULL.
Small, pale, and living in the gaps of your data. NULL isn't equal to anything — not even to itself — and it will quietly eat your rows, your averages, and your confidence. Every world hides it somewhere. Learning to catch it is the whole game.
NULL = NULL → NULL. Yes, really.
Playful about the journey. Dead serious about the craft.
Real Postgres, zero setup
Every query runs on a real Postgres engine inside your browser. No toy SQL, no watered-down dialect — the same engine you'll use on the job.
Watch your query think
A live pipeline view replays your query step by step — FROM, WHERE, GROUP BY — so you can see rows flow and find exactly where they vanish.
Mistakes planted on purpose
Duplicate joins, NULL comparisons, off-by-one dates: every classic trap is hidden in the data, waiting. Failure costs nothing here. It's where the XP is.
Worlds of realistic data.
Each world is a database with a story: a tavern chain, a guild ledger, a shipping fleet. Clear quests to earn XP, take side quests for extra loot, and face the boss query at the gate.

Every scar becomes a badge.
XP for every quest, achievements for the traps you survive. Your progress reads like an adventurer's log — and like a data analyst's CV.
Used IS NULL for the first time. NULL hissed and fled.
Defeated a boss query on the first attempt. The tavern cheers.
Survive a five-table join without duplicating a single row.
The AI writes the query. Someone still has to know when it's lying.
The models draft your SQL now — and confidently hand back the wrong rows, join the same table twice, and never notice NULL slipped through your =. Subquest is where you stay the one who catches it: read the query, predict the rows, find where they vanish. That instinct doesn't come from autocomplete — it comes from breaking things on purpose.
-- job security is a WHERE clause that actually works


Every query is a quest.
World 1 is open and the ghost is already waiting in the data. Bring nothing — Postgres, quests, and NULL are all in the browser.
Start playing