Run SQL online (SQLite)
A real SQLite engine — the same one that runs on billions of devices — compiled to WebAssembly and running in this page. Version 3.49, full SQL support including window functions, CTEs, and JSON operators.
press RUN (or Ctrl+Enter) — everything executes in your browser, nothing is uploaded
Full SQLite, not a toy parser
Because this is the real engine, everything SQLite supports works: recursive CTEs, window
functions, json_each, partial indexes, generated columns, UPSERT, strict tables.
The EXPLAIN mode shows the actual query plan (EXPLAIN QUERY PLAN) and warns when a
query would do a full table scan instead of using an index you declared.
SQLite quirks this page surfaces
SQLite is famously permissive, and that permissiveness hides bugs you'll meet later on stricter
engines. Three examples this tool flags automatically: double-quoted strings silently
become identifiers-or-strings depending on context (use single quotes); columns can store any type
regardless of declaration unless the table is STRICT; and integer division truncates
(7/2 = 3) where DuckDB or MySQL return 3.5. The dialect-notes panel under every result
lists exactly which of these apply to your query.
For AI-generated SQL
If an LLM wrote your query, don't trust a review — run it. Column hallucinations
(oi.price when the column is unit_price) come back as a typed
unknown_column error with a rule-based "did you mean" suggestion computed from your
actual schema. There's also a paid MCP endpoint so your agent can do this
check itself.
FAQ
Which SQLite version is this?
SQLite 3.49 via sql.js 1.14, compiled to WebAssembly. The same engine build backs the sqlai.dev API, so browser and API results match.
Does it support window functions and CTEs?
Yes — it is the complete engine. OVER/PARTITION BY, recursive CTEs, JSON functions, and UPSERT all work.
Can I see the query plan?
Yes. Switch to "explain" mode to get EXPLAIN QUERY PLAN output plus warnings about full table scans.
Is there a row limit?
Results display up to 500 rows. The response still reports the true row count (up to 10,000 scanned) and flags truncation.
Related: Run DuckDB SQL online · Test SQL without a database · Fixing "no such column"