Write real SQL against real tables — running entirely in your browser.
Employees, departments and salaries. The classic shape for practising JOIN, GROUP BY and aggregate functions.
ORDER BY with a LIMIT — the first query worth running against any new table.
GROUP BY with two aggregates. Note that Ishaan, who has no department, is excluded by the inner join.
LEFT JOIN plus IS NULL — the standard way to find rows with no match. Swap it for JOIN and Research disappears.
A self-join: the same table twice under different aliases. Priya has no manager, so a LEFT JOIN keeps her.
A correlated subquery — the inner query re-runs for each row, using that row's department.
Loading…
This is real SQLite, compiled to WebAssembly and running inside your browser tab — not a simulator, and not a connection to any server. The tables are built from a seed script on your device, so you can DROP, DELETE or UPDATE anything without consequence; “Reset data” rebuilds it. Queries are capped at five seconds and 500 displayed rows so a runaway join cannot lock the page.
This SQL playground runs SQLite compiled to WebAssembly inside your browser tab, so queries execute on your own device with no server involved. Pick one of three sample databases, write any SQL you like — including DROP and DELETE — and reset the data whenever you want.
No, and that is the point. SQLite is compiled to WebAssembly and runs inside your browser tab. The tables are built from a seed script on your device when the page loads, so nothing you type reaches a server and there is no shared database anyone could damage.
Yes — run anything you like. The database exists only in your tab's memory, so destructive statements affect nobody, and "Reset data" rebuilds it from scratch. Practising a DELETE without a WHERE clause somewhere harmless is genuinely worth doing once.
SQLite, which covers the standard SQL most people need — joins, GROUP BY, HAVING, subqueries, CTEs and window functions. It differs from PostgreSQL and MySQL in some function names and type handling, so check your target database's docs before copying a query into production.
It is stopped after five seconds. The engine runs in a Web Worker specifically so a runaway query — a cross join, or a recursive CTE with no termination — can be terminated rather than freezing the page. The dataset reloads automatically afterwards.
21 categories · pick one to explore
Real journeys from the SkillVeris community — swipe for more.