How to read Access queries without Microsoft Access
A saved query is often where the real logic of an Access database lives: which orders count as late, how a total is worked out, what gets deleted at month-end. You can read Access queries without Access itself, because every saved query is stored in the file as SQL.
Short answer
Access stores each saved query as SQL text inside the database. Open the file in Keyfield, go to the Queries tab and tap a query: you see its SQL, its type (select, crosstab, update and so on), and the tables it reads from, with a button to copy the SQL. Keyfield shows queries; it doesn’t run them.
Get Keyfield Opens .accdb and .mdb files. Viewing is free, with no account.
Where the queries are
In Access, you normally see a query in Design view: boxes for tables, lines between them, a grid of fields. That picture is drawn from SQL, and the SQL is what the file actually stores. Any tool that can read the database can show it, which is why you don’t need Access to find out what a query does.
In Keyfield, the Queries tab lists every saved query in the database with its type. Tap one to see the SQL, laid out as Access saved it, and a Reads from list of the tables it uses. Copy SQL puts it on the clipboard, which is handy for sending it to whoever maintains the database.
How to read the common kinds
Access SQL is close to standard SQL, with a few habits of its own. A typical select query looks like this (an example, not from a real file):
SELECT Orders.OrderID, Customers.Name, Orders.Total FROM Customers INNER JOIN Orders ON Customers.CustomerID = Orders.CustomerID WHERE Orders.OrderDate >= #2026-01-01# AND Orders.Paid = False ORDER BY Orders.Total DESC;
- SELECT … FROM … WHERE is a question: these columns, from these tables, for the rows that match.
- INNER JOIN … ON matches rows across two tables, here each order with its customer.
- Dates sit between
#signs, names with spaces sit in[square brackets], and functions such asIIf()andNz()are Access’s own: an if-then-else, and “use this value when the field is empty”. - A bracketed prompt like
[Enter start date]in a WHERE clause is a parameter: Access asks for it each time the query runs.
Crosstab queries begin with TRANSFORM and end with PIVOT: they turn the values of one column into column headings, like a pivot table. Action queries change data instead of showing it: UPDATE, DELETE, INSERT INTO (an append query) and SELECT … INTO (a make-table query). Reading those tells you exactly what a month-end routine will change, which is worth knowing before anyone runs it.
Why a viewer doesn’t run them
Keyfield reads the SQL that Access saved; it doesn’t execute Access SQL, and it never changes the file, so an action query can’t do anything there by accident. If you need a select query’s answer on your phone, you can often get close with the table itself: the WHERE clause usually turns into one or two filters, and ORDER BY into a sort. Joins across tables and totals need Access, or the person who built the database.
What else is worth reading
The Relationships tab shows which tables join to which, one-to-many, and each table’s Fields tab lists every field with its type, named the way Access’s table designer names them. Together with the queries, that is usually enough to understand a database someone else built. If a query reads from a table marked LINKED, its data isn’t in this file: see what a linked table is.
See the SQL behind every saved query
Keyfield lists the saved queries, relationships and field types of any .accdb or .mdb it opens, free. Copy a query’s SQL and send it on.