What This Tool Does
This tool turns a CSV file into a queryable SQL table without leaving your browser. Drop your file and it's loaded into an in-memory table named data; type a SQL query — or start from one of the built-in examples — run it, and download the result as CSV or JSON.
Nothing is uploaded to make this work. A WebAssembly module loaded into your browser tab parses your file, builds the table, and runs your SQL entirely on your own device.
How to Use It
Drop a CSV file onto the tool. Your columns appear as a quick reference, and a preview query — SELECT * FROM data LIMIT 100 — runs automatically so you can see real rows right away. From there, edit the query box with whatever SQL you need, or click one of the example buttons (SELECT *, COUNT / GROUP BY, WHERE, ORDER BY) to start from a working query and adjust the column names. Click Run, check the result table, and download it as CSV or JSON — the download always includes every matching row, even though the on-screen table stops showing more after the first couple hundred.
Supported SQL
Queries run against a real SQL engine (GlueSQL) working entirely inside your browser, which supports a genuinely useful subset of SQL rather than the full surface of something like Postgres: SELECT with a column list, WHERE, GROUP BY, HAVING, ORDER BY, LIMIT, the aggregates SUM, COUNT, AVG, MIN, and MAX, and common scalar functions plus CAST. A few example queries to adapt to your own columns:
SELECT * FROM data WHERE age > 30
SELECT city, SUM(amount) AS total FROM data GROUP BY city ORDER BY total DESC
SELECT name, score FROM data ORDER BY score DESC LIMIT 10
SELECT category, COUNT(*) AS n FROM data GROUP BY category HAVING COUNT(*) > 5
If you write something outside that subset — a window function, an unusual subquery, a join against a second table that doesn't exist — the query doesn't run, and the tool shows the engine's own error message rather than guessing at what you meant.
How Column Types Are Inferred
A CSV has no concept of data types, so before your query runs this tool decides, column by column, whether it should behave as a number or as text. A column becomes a real number type only if every single value in it is a plain, finite number — no letters, no currency symbols, nothing left over. Two exceptions keep values as text even when they look numeric: a value with a leading zero other than a decimal like 0.5 (so a code such as 007 isn't silently turned into 7), and a value with more than fifteen digits (so a long account or card number isn't rounded). If even one row in a column is blank or doesn't parse cleanly, the entire column stays text, so a stray typo in one row can't quietly change what SUM or AVG on that column would mean.
If you do need to treat a text column as numbers for one query — say, a column of codes you know are safe to sum — wrap it with CAST(column_name AS FLOAT) rather than relying on automatic inference.
Nothing Leaves Your Browser
Loading your CSV into a table and running your SQL against it both happen through a WebAssembly module running inside your browser tab. There's no upload step, no server holding a copy of your file, and no dependency on your internet connection once the page and its WebAssembly have loaded — your data stays on your device from drop to download.
Limits
This tool handles files up to 50 MB and 1,000,000 rows. A file past either limit is rejected up front with a clear message, before any table is built or query attempted, so you're not left waiting on a browser tab that's quietly run out of memory.
Where to Go Next
If you'd rather reshape your CSV without writing SQL, CSV to JSON and JSON to CSV handle straightforward format conversion, and CSV to Excel turns your file into a real XLSX workbook you can open directly in Excel or Google Sheets.