Developer tool · runs in your browser
Explain what a SQL query does in plain English
Paste a SELECT statement and pick the dialect. As you type, you see what one row of the result is, each join, filter and window in the order the engine applies them, and patterns worth checking. Nothing is executed.
Free, no account, no daily limitUp to 400 lines per query · the query never leaves your browser
- PostgreSQL, MySQL / MariaDB, SQL Server and SQLite
- CTEs, subqueries and window functions
- Copy the explanation or download it as a .md file
Explanation
Updates as you typeWhat the explanation contains
What it returns
One paragraph on what a single row of the result represents, for example one order per region with its rank.
Step by step
Each join, filter, group and window in logical order: FROM and joins first, then WHERE, GROUP BY, HAVING, windows, SELECT, ORDER BY and LIMIT.
Things to check
Patterns spotted in the text, such as a function around a filtered column, a leading wildcard in LIKE, a missing join condition or NOT IN against a subquery that can return null.
Copy or download
The whole reading as Markdown, ready for a code comment, a ticket or the repository where the report lives.
From paste to explanation
- 1
Paste the query and pick a dialect
Any SELECT, including CTEs, subqueries and window functions. The dialect changes how backticks, square brackets, backslashes and dollar quoting are read. If the query arrived as one long line, run it through the formatter first so you can follow along.
- 2
Read the summary, then the steps
The summary says what one row of the result represents. Below it, each step says what it does to the rows that survive. A LEFT JOIN that a WHERE condition turns into an inner join is named, so you can check which one you meant.
- 3
Keep it as documentation
Copy the explanation into a comment above the query or into a ticket. The next person who inherits the report starts from sentences instead of a wall of SQL.
What the performance notes can and cannot tell you
The notes come from reading the query text only. They flag a function wrapped around a filtered column, a LIKE pattern that starts with a wildcard, tables joined by comma or a JOIN without ON, an OR across different columns, a correlated subquery in the SELECT list and NOT IN against a subquery that can return null. They cannot see your indexes, your row counts or the plan the optimizer will choose. Run EXPLAIN on your own server for that, and treat the notes as a list of things to look at.
Questions before you run it
Does the explainer run my query?
No. Nothing is executed and no database connection is made. The query is parsed as text, so the explanation describes what the SQL says it will do, not what it did on your data.
Which SQL dialects does it handle?
PostgreSQL, MySQL / MariaDB, SQL Server and SQLite. Pick the dialect first, because backticks, square brackets, backslash escapes and dollar-quoted strings are read differently depending on the engine.
How is this different from the SQL formatter?
The formatter rewrites indentation and casing so a query is readable. This tool reads the query back to you in sentences: what the result set contains, how the tables are connected, which rows survive the filters. Formatting first usually makes the explanation easier to follow.
Are the performance notes the same as an EXPLAIN plan?
No. They are static checks on the query text alone, such as a function wrapped around a filtered column, a missing join condition or a leading wildcard in LIKE. A real EXPLAIN uses table statistics and index metadata from your server, which the tool cannot see.
Can I paste a query that contains company data?
The query is read by a script in this page and is not uploaded or stored. Nothing is sent to a server, so literal values stay on your device. Close the tab and the query is gone.