A database is just a filing cabinet that can answer questions.
We'll start with drawers and folders — zero jargon. By the end, you'll be writing real queries and understanding how apps store and retrieve every piece of data you see.
The Filing Cabinet
Before any technical terms: a database is a filing cabinet. It has labeled drawers, and inside each drawer are folders with the same kind of information.
Click a drawer to peek inside
Each drawer holds one kind of thing. All the folders inside follow the same format — same labels, different details.
How it maps
This filing cabinet is a database. Each drawer is a table. Each folder inside is a row. The labels on each folder are columns.
Cabinet
The whole database. A collection of organized drawers (tables).
Drawer
One table. Holds many folders (rows) of the same kind of thing.
Folder
One row. A single record — one user, one order, one product.
Label
A column. The name of a piece of info: name, email, city.
Your First Table
A table is really just a spreadsheet with stricter rules. Every column has a name, every row follows the same format. Click any row or column header to learn more.
Click a row or column
We'll explain what that piece of data means and how it maps to the filing cabinet analogy.
Mapping: Spreadsheet → Database
The Four Operations
Everything you do with a database boils down to four actions. Developers call them CRUD — Create, Read, Update, Delete. Same four things you'd do with a filing cabinet.
Asking Questions
The most common thing you do with a database is ask questions. In SQL, that's called SELECT. Build a query by clicking the parts below — the results update live.
Relationships
Most databases have more than one table. The magic is how they connect. Think of it as two filing cabinets with a thread running between matching folders.
When you click a user, you're mentally doing what SQL calls a JOIN — pulling matching data from two tables at once. The
user_id column in orders is the thread connecting the two cabinets.
SELECT users.name, orders.item, orders.price FROM users JOIN orders ON users.id = orders.user_id -- Click a user above to see this filtered
SQL Playground
Write any SQL query against the mock dataset. Try the preset buttons or type your own. The data resets each time you reload the page.
Glossary
All the terms from this guide in one place. Search or filter — and every term comes with a real-world analogy.