๐Ÿ”ฅNow in early access. Be one of the first detectives

Learn SQL by solving mysteries

Crack cases, write queries, and become a SQL detective. No experience needed.

โœ“ Free to startโœ“ No credit cardโœ“ Minutes to learn
The Process

How It Works

Become a data detective in three steps. No prior experience required.

1
?

Pick an Investigation

Browse Cases by difficulty and SQL topic. Each is self-contained with real data and a mystery to crack.

2

Query the Database

Write SQL in the browser. No setup needed. Get hints from Chief Fox when you get stuck.

3

Crack the Case

Use your results to name the suspect and close the case. Earn XP and level up your rank.

The Learning Path

Five Ranks.
One Journey.

๐Ÿ”
Recruit
Sign up and complete your first free case
๐Ÿ”ฐ
Rookie Detective
8 Cases + 2 Drills + Level Exam
๐Ÿ•ต๏ธ
Detective
18 Cases + 4 Drills + Level Exam
๐ŸŽ–๏ธ
Senior Detective
21 Cases + 5 Drills + Level Exam
๐Ÿ‘‘
Chief Detective
7 Cases + 1 Drill + Final Exam
๐ŸŽ“
Earn your Detective Certificate
Complete the path and get a shareable certificate, perfect for LinkedIn and job applications.
๐Ÿ”ฐRookie Detective
SELECTWHEREAND / ORIN / NOT INBETWEENLIKEORDER BYCOUNTGROUP BY
๐Ÿ•ต๏ธDetective
SUM / AVGMIN / MAXHAVINGDISTINCTIS NULLCOALESCEString FunctionsCAST
๐ŸŽ–๏ธSenior Detective
Date FunctionsCASE WHENSubqueriesINNER JOINLEFT JOINAnti-JoinUNIONCTEs (WITH)
๐Ÿ‘‘Chief Detective
ROW_NUMBER()RANK / DENSE_RANKSUM() OVERLAG / LEADPARTITION BYFull Capstone
Why It Works

Built for the way you
actually learn

๐ŸŽฏ
Learn by Doing

Every case requires real SQL against real data. No multiple choice, no hand-holding.

๐Ÿง 
Contextual Learning

Concepts appear when the story demands them. JOINs matter when suspects have alibis.

๐Ÿ“ˆ
Five Detective Ranks

Progress from Recruit to Chief Detective across four structured case sections.

โšก
Investigations

A separate timed feature: randomised mysteries where you name suspects and cite evidence.

Case #12 ยท The Late-Night Keycard

"The alarm was disabled at 22:13. Find who entered within five minutes of that, and whether they were on shift."

SELECT p.full_name, a.event_time
FROM access_logs a
JOIN personnel p ON p.id = a.person_id
WHERE a.door = 'EVIDENCE_LOCKER'
ย ย AND a.event_time BETWEEN '22:08' AND '22:18'
2 matches near alarm time
Sandbox Mode

Real Data. Free Exploration.

No case to solve, no pressure. Pick a dataset you care about and write freely. Seven real schemas, all running in your browser.

๐ŸŽฌ
IMDB Top 250
7 tables ยท 4,888 rows

The 250 highest-rated films ever made. Ratings, cast, directors and genres.

๐Ÿš”
Metro Crime
7 tables ยท 2,239 rows

A fictional police database. 200 cases spanning homicide, fraud, theft and more.

๐Ÿ›’
TechCart
5 tables ยท 5,595 rows

A fictional electronics retailer. Full-year revenue, customers, orders and marketing.

โšก
Pokemon
8 tables ยท 12,015 rows

All 1,025 base-form Pokemon. Stats, types, abilities and evolutions from PokรฉAPI.

๐ŸŽต
Alex's Spotify Wrapped
6 tables ยท 11,039 rows

One user's full 2025 listening history. 10,800 play events with skip rates and audio features.

๐Ÿ€
NBA 2024-25
4 tables ยท 794 rows

Full 2024-25 regular season. Player stats, standings and rosters for all 30 teams.

๐ŸŽฎ
Steam Games
7 tables ยท 8,855 rows

424 popular Steam titles with review scores, genres and community tags.

54
Cases to Solve
100%
Free to Start
5
Ranks, Rookie to Chief
Zero
Setup. Runs in your browser.

Ready to join the precinct?

Your first case is waiting. Start learning SQL today. It's free and you'll be writing queries in minutes.

Try for free now ยท No credit card required ยท First case in minutes