Exploring a SQLite Database in a Browser Tab
SQLite is inside phones, browsers and countless desktop apps, and it is how a lot of data changes hands: one .db or .sqlite file, a whole database in it. Looking inside usually means installing something first. It does not have to.
The Usual Routes
| Approach | What it costs |
|---|---|
| The sqlite3 command-line shell | Small and excellent — a download, a terminal, and dot-commands such as .tables to learn. |
| DB Browser for SQLite | A good free desktop app. Still an install, which on a managed machine means a ticket. |
| Python’s sqlite3 module | Built into Python, if Python is there, and you write the code. |
| An online SQLite viewer | No install, but the database is uploaded to someone else’s server — with whatever an app kept in it. |
Doing It in the Browser
OmniSelect FileSQL opens the file with SQLite itself — the real SQLite library, compiled to WebAssembly (sql.js) and served from this site — so it reads what SQLite reads. It runs inside your browser tab and the database is never uploaded.
- Open the app.
- Drop the database onto the File Select panel.
.sqlite,.sqlite3,.db,.db3and.gpkgall work. The file gets a row with a one-letter table name in the Alias column —bookshop.sqlitebecomesB— and its Sheet list holds the database’s tables, then its views:authors,books,sales,bestsellers. - Pick a table. The first one is loaded to begin with. Choose
salesin the Sheet list andBis now the sales table:SELECT * FROM B
| sale_id | book_id | sold_on | qty | channel |
|---|---|---|---|---|
| 1 | 1 | 2026-05-02 | 3 | online |
| 2 | 4 | 2026-05-02 | 5 | shop |
| 3 | 2 | 2026-05-03 | 1 | online |
| 4 | 1 | 2026-05-04 | 2 | shop |
Ask in plain English and the SQL is written for you, inside your browser. total qty by channel becomes:
SELECT channel, SUM(qty) AS total_qty FROM B GROUP BY channel
| channel | total_qty |
|---|---|
| online | 13 |
| shop | 17 |
Two Tables From One Database
Each row of the File Select panel is one table. To join two tables of the same database, add the file a second time: it gets a second row and the next free letter — A here, since B is taken — and you choose a different table in that row’s Sheet list. With B on sales and A on books, copies and revenue per title:
SELECT A.title, SUM(B.qty) AS copies, SUM(B.qty * A.price) AS revenue FROM B JOIN A ON B.book_id = A.book_id GROUP BY A.title ORDER BY revenue DESC
| title | copies | revenue |
|---|---|---|
| Lagos by Night | 11 | 154 |
| The Salt Road | 9 | 116.91 |
| Paper Lanterns | 6 | 57 |
| Small Engines | 2 | 37 |
| Counting Rivers | 1 | 21 |
| Tidewater | 1 | 10.99 |
Add it a third time for a third table. Each copy is read on its own, and the file on your disk is never touched.
Drop a .db or .sqlite file in and see inside it.
Open the app →Views, and What Is Left Out
Views are in the Sheet list, after the tables. Choosing one runs the view’s own SQL inside SQLite and loads its result — bestsellers here gives each title with its copies sold, already totalled.
SQLite’s own bookkeeping is left out: the sqlite_ tables, and the metadata tables GeoPackage and SpatiaLite add. For a GeoPackage (.gpkg), the Sheet list shows the data tables the file itself lists as its contents.
Worth Knowing
- It is read-only. Only
SELECTqueries run;DELETE FROM Bis refused with Only SELECT queries can be run here. Nothing is ever written back to the file. - Close the app that owns the database first. While a program has a SQLite database open, its latest changes can sit in a
-walfile beside it. Only the main file is read, so close that program — or copy the database after it has closed — to be sure you see everything. - Not every
.dbis SQLite. The file’s first bytes are checked, so a.dbfrom another program, or an encrypted database, is refused with a message rather than read as nonsense. - No extension? Some programs keep SQLite databases in files with no extension at all. Copy the file and give the copy a
.sqliteending. - Values keep their types. Integers, decimals and text arrive as they are stored. Dates stored as text stay text; ISO dates such as
2026-05-06compare correctly as text, soWHERE sold_on >= '2026-05-06'works. Short binary values are shown as hex; longer ones as (N bytes of binary data). - Size. Up to 50 MB per file and 1,000,000 rows per table.
Getting Data Out
Any result exports from the Export menu as CSV, Excel, JSON or Parquet, holding every row of the result — not just the rows on screen. Pick a table, run SELECT * FROM B, and export it: that is a SQLite table turned into a spreadsheet, with no command line involved.
Reasonable Questions
How do I see a table’s columns?
Choose it in the Sheet list and run SELECT * FROM B LIMIT 1. The result headers are its columns.
Can I run INSERT, UPDATE or CREATE?
No — this is for reading. For changing a database, the sqlite3 shell or DB Browser for SQLite is the right tool.
Can I join a SQLite table to a CSV or Excel file?
Yes. Every file you add is a table, whatever its format — see one query across seven file formats.
Is anything uploaded?
No. SQLite runs inside the tab, and after the page has loaded it makes no network requests — check it yourself.