// for data analysts

Write the query. Trust the answer. Get it out.

You don’t need to know what a generation counter is to get value out of SQLly. This guide covers the three things you actually do all day: writing queries without fighting the editor, reading results without squinting, and exporting data without a second tool.

// getting oriented

Find your tables before you write a line of SQL

The Servers panel on the left groups every connection the way you actually think about your data - not just by hostname.

SQLly - Servers
SQLly query workspace with the Servers panel open on the left and an empty query tab

The Servers panel, an empty query tab, and the results pane - the three panes you’ll live in.

🗂️
connection grouping ✓ functional

Client, project, environment, or raw server

Flip between grouping modes across the top of the panel - None, Client, Project, Env, Server - so a scattered list of hostnames turns into “Acme Corp → Reporting → Prod.”

📑
tabs ✓ functional

One tab per train of thought

Every query lives in its own tab with its own server and database selection, so a quick lookup in one tab never bleeds into the report you’re building in another.

💾
crash-safe ✓ functional

Your tabs come back

Close SQLly, reopen it, and your open tabs - query text, layout, everything - are exactly where you left them. Nothing to save, nothing to lose.

// writing queries

Autocomplete that knows your data, not just your schema

Most SQL editors autocomplete table and column names. SQLly goes one level deeper.

SQLly - Query 2
SQLly editor showing IntelliSense suggesting SQL keywords like AND, AS, BETWEEN mid-query

Keyword and clause completion shows up as you type - no manual trigger.

⌨️
value autocomplete ✓ functional

Autocomplete for column values

Start typing inside a WHERE clause and SQLly suggests real values pulled from that column’s actual data - filtered live as you keep typing.

-- as you type, it filters live
WHERE CompanyName = 'Acme␣'  ⟶ Acme Corp, Acme Labs…
🔑
key ↔ name ○ planned

Type the name, not the key

Hunting for a row behind a foreign key? Type the human-readable name you’re actually after - SQLly resolves it and wires up the join, so you’re not hand-writing JOINs just to filter by customer name.

🌫️
incomplete schema ✓ functional

It still helps on a half-finished schema

If a table’s definition is still rough - a teammate’s draft migration, a sketch that doesn’t fully parse yet - SQLly overlays its best guess and keeps completions coming instead of giving up.

🏷️
readable results ◐ in progress

See names, not IDs, in results

Where SQLly can figure out the natural “display value” for a foreign key, it shows you Acme Corp in the grid instead of customer_id = 4827 - configurable per column when it guesses wrong.

// reading results

A result grid built for actually reading the data

Large result sets stay smooth because SQLly only renders the rows on screen - it doesn’t choke rendering 500,000 rows into the DOM at once.

SQLly - syntax highlighting
SQLly editor showing a multi-line aggregate query with syntax highlighting

Clean syntax highlighting for the query you actually wrote - keywords, functions, and identifiers in distinct colors.

📊
virtualized grid ✓ functional

Smooth scrolling, even on big result sets

The grid is virtualized - it only ever renders the slice of rows currently on screen, so paging through a six-figure result set feels the same as paging through ten rows.

🧭
paging ✓ functional

Results come back in pages, not all at once

SQLly pages large result sets instead of trying to hold everything in memory at once, so a query that returns way more than you expected doesn’t stall the whole app while it streams in.

🧮
custom formatting ◐ in progress

Format columns the way your team reads them

Set per-column formatting preferences - money, rounding, date shape - once, from the Preferences panel, instead of wrapping every query in FORMAT() calls.

🔀
comment-based pivot ✓ functional

Pivot results with a comment

Annotate the query and SQLly reshapes rows into columns right in the result grid - no wizard, no export to a pivot tool.

--! pivot rows=region cols=quarter value=revenue
📝
row editor ✓ functional

Edit a row without writing UPDATE by hand

Right-click any result row and SQLly builds a per-column edit form from the table’s own metadata - types, defaults, and constraints included. Edit, insert, duplicate, or delete rows with guarded, parameterized writes, and jump to related rows in their own tab.

🧬
structured cells ✓ functional

Read JSON and XML, not a wall of text

Cells holding JSON or XML open in a structured, pretty-printed viewer you can expand and collapse - instead of a single unreadable line crammed into a grid cell.

🪟
custom layouts ✓ functional

Arrange multiple result sets your way

Stop scrolling through result sets stacked one after another. Switch between tabbed, stacked, and free-form canvas layouts - or set rows and columns from a comment (-- sqlly 4x2) so several sets land where they make sense.

Want to poke the actual grid? The interactive sample in the docs runs the real result grid in your browser - sort, resize, pivot, and chart a bundled dataset without downloading a thing.
// getting data out

Export in whatever shape the next step needs

The report is rarely the query result itself - it’s a spreadsheet, a Slack message, or a migration script. SQLly exports straight into all of them.

📋
everyday formats ✓ functional

CSV, TSV, JSON, Markdown, HTML

Pick the shape that matches where the data is going next - a spreadsheet, an API payload, a README table, or a quick paste into a doc.

📗
real spreadsheets ✓ functional

Straight to XLSX

Export directly to an Excel file when “send me the numbers” means an actual spreadsheet, not a CSV someone has to reformat.

🧱
for engineers ✓ functional

Copy results as INSERT statements

Need to hand a developer a handful of rows to seed a test environment? Export the result set as ready-to-run INSERT statements instead of a CSV they have to reformat by hand.

⚖️
compare ✓ functional

Diff two result sets

Ran the same query before and after a change? Compare the two result sets and see exactly which rows were added, removed, or left alone - schema mismatches get called out, not silently mis-compared.

// why it feels fast

You shouldn’t have to think about performance. You won’t.

⚡
✓ functional

Autocomplete doesn’t wait on your database

SQLly keeps its own model of your schema in memory and refreshes it in the background, so IntelliSense stays instant even against a large or slow server - it’s not sending a live query to the database every time you type a letter.

🧠
✓ functional

It only re-checks what actually changed

Instead of re-scanning your entire schema on every keystroke, SQLly tracks what changed and re-validates just that - which is why it stays snappy even on databases with thousands of objects.

Curious why, exactly? The DBA & power user guide covers the tuning knobs, and the engineering deep dive covers the actual architecture - caching, snapshotting, and the Rust engine underneath it.

That’s the whole workflow.

Connect, write a query with real help, read the results without a headache, export it wherever it needs to go. No fourteen-step onboarding required.