SQL Pattern Tracker

16 weeks, 96 practical questions on one seeded company database. Read the lesson, write the query in the browser, check it, log the tell.

Saved in this browser
0 / 96 solved 0 unaided 0 to revisit
solved unaided revisit Start date
Practice database: 11 tables, one small e-commerce company (SQLite dialect) Loading engine…

Every question runs against these tables, in your browser. Data changes you make (DELETE, UPDATE, indexes) persist until you click Reset data or reload. Bold columns are primary keys. Timestamps are text in YYYY-MM-DD HH:MM:SS; the reference "today" used by date questions is 2026-09-27.

Dialect notes: this is SQLite, so use strftime/date()/julianday() for dates, || to concatenate, GROUP_CONCAT instead of STRING_AGG, and IS NOT for null-safe inequality. Window functions, CTEs (including recursive), UPSERT and partial indexes all work. Each lesson's template notes the Postgres/MySQL spelling.