You do not need a server, a cloud account or a credit card
Most SQL courses assume you already have a database. Most people do not, and the setup step is where a lot of learners stop. So here are four honest options, in order of how little they ask of you. All are free, all run offline, and none of them expire.
SQLite: a database that is one file
SQLite is the most widely deployed database in the world. It is inside your phone, your browser and your car. A whole database is a single file you can email to somebody.
If you have Python, you already have it:
python3 -c "import sqlite3; sqlite3.connect('school.db').close()"
sqlite3 school.dbIf the sqlite3 command is missing, install it (apt install sqlite3, brew install sqlite), or use DB Browser for SQLite: a free graphical tool with a table view, an import-CSV button and a query tab. Job ads say Microsoft Access or Excel; DB Browser does the same teaching job for nothing, on Windows, macOS and Linux.
CREATE TABLE students (id integer primary key, full_name text, class_level int);
INSERT INTO students (full_name, class_level) VALUES ('Rukmini R', 9), ('Ade O', 10);
SELECT * FROM students;The honest limitation, and it matters for this course: SQLite does not really enforce types. Its columns have type affinity, not type constraints, so INSERT INTO students (full_name, class_level) VALUES ('Ade', 'Grade Nine') succeeds. Everything else you learn transfers; that one protection does not exist until you turn on strict tables (CREATE TABLE ... STRICT, SQLite 3.37 or later). Do turn it on.
DuckDB: SQLite’s analytical cousin
DuckDB is a single binary that queries CSV and Parquet files directly, without loading them first.
duckdb -c "SELECT city, count(*) FROM read_csv_auto('payments.csv') GROUP BY city"That one line is the fastest route from a downloaded export to a real answer, and it is what most of this course’s cleaning work is comfortable in. It is built for reading large tables fast, not for many people writing at once, so it is a superb analysis tool and the wrong choice for an application’s live data.
PostgreSQL: the one the jobs ask for
Postgres is the reference implementation for almost everything in this course. Install it locally:
# Debian / Ubuntu
sudo apt install postgresql
sudo -u postgres createdb school
psql school
# macOS
brew install postgresql@17 && brew services start postgresql@17
createdb school && psql schoolOr run it in Docker without installing anything permanent:
docker run --name pg -e POSTGRES_PASSWORD=dev -p 5432:5432 -d postgres:17
psql "postgres://postgres:dev@localhost:5432/postgres"If your laptop cannot run either, several providers give a small Postgres database on a free tier that never asks for a card. That is enough for every query in this course.
If all you have is a phone
This is a real constraint for a lot of readers, so it gets a real answer rather than an apology. On Android, Termux installs sqlite3 and python from a package manager and gives you a proper shell. On any phone, a browser-based SQL sandbox will run SQLite compiled to WebAssembly entirely on the device. Neither is comfortable for eight-hour days. Both are entirely sufficient for learning to think in tables, which is the part that transfers.
Get some data in
Empty databases teach nothing. Two moves:
-- Postgres, from a file on the server's disk
COPY payments FROM '/tmp/payments.csv' WITH (FORMAT csv, HEADER true);
-- Postgres, from a file on your own machine, via psql
\copy payments FROM 'payments.csv' WITH (FORMAT csv, HEADER true)That backslash matters. COPY runs as the database server and looks on the server’s disk. \copy runs in your client and reads your file. Almost every “permission denied” on a first import is this distinction.
In SQLite: .mode csv then .import payments.csv payments. In DuckDB you can skip importing entirely.
Good public data to practise on: a national statistics office’s open data portal, your city’s transport authority, or the World Bank’s open datasets. Prefer data you have some feel for: you will spot a wrong answer in data about your own city and you will not spot it in a synthetic sales table.
What to actually do now
Create one database. Load one CSV of at least a few thousand rows. Run SELECT * FROM yourtable LIMIT 20 and read it. That is the whole exercise, and doing it once removes the friction that otherwise sits between you and every remaining lesson in this course.
Every lesson here is open. Your progress is recorded once you pass the Building Apps with AI exam.
Check your understanding
A colleague sends you a 3-million-row CSV export and asks for the number of rows per branch by tomorrow morning. You have an ordinary laptop and no database installed. Which route gets a correct answer with the least ceremony?
Pick the one you would defend. Your answer stays private.
Stuck on something?Ask Divya, your AI tutor
