FREE Β· Learn by doing

Learn SQL on data you'll actually enjoy.

6databases
6lessons
$0forever
4SQL engines

Pick a world to explore.

Load any with one click in Settings β†’ Learn SQL, or grab the raw files from the public repo β€” credits & example queries included.

⭐ Star Wars

61 planets and 87 characters, linked by a foreign key β€” perfect for learning JOINs.
"Which characters are from Tatooine?"

starwars.db ↓

Data from alexisrolland/star-wars-data (SWAPI). Inspired by Cockroach Labs and the starwarsdb R package.

⚑ Pokémon

All 800 PokΓ©mon with types and battle stats β€” great for SELECT, WHERE, ORDER BY, and aggregates.
"Show the strongest Water types."

pokemon.db ↓

The classic Kaggle PokΓ©mon dataset. Learning ideas from TempeHS, Yi Zheng, and lucvalsal.

🎡 Music store

A full digital music store β€” customers, invoices, tracks, albums and artists across 11 tables. Great for complex joins and subqueries. Loaded by default.
"Which artist earned the most revenue?"

chinook.db ↓

The Chinook sample database (MIT licensed).

🌍 World countries

All 250 countries with population, GDP, area, capital, region and languages β€” the perfect playground for GROUP BY and aggregates.
"Rank continents by total population."

countries.db ↓

Country data from mledoze/countries (MIT); population & GDP from the World Bank (CC BY 4.0).

πŸ… Olympic medals

Medal counts by country, sport, year and type from 1896–2016, plus a country lookup table. Superb for joins and trend charts.
"Chart USA golds by year."

olympics.db ↓  Β·  per-medal detail ↓

From the 120 years of Olympic history dataset (originally compiled by Sports Reference).

🦸 Marvel & DC

23,000+ comic characters with alignment, appearances and first appearance β€” compare Marvel vs DC with GROUP BY and filters.
"Who has the most appearances?"

comics.db ↓

FiveThirtyEight's comic-characters data (CC BY 4.0), from the Marvel & DC wikis.

More on the way. Want one, or have data to share? Join the discussion β†’

Load a database in one click.

No files to move, no setup β€” everything installs into ~/Documents/pouncesql/learn and pins to your tree.

PounceSQL's Settings β†’ Learn SQL dashboard: a summary of datasets, and cards for Star Wars, PokΓ©mon, Music store, World countries, Olympic medals and Marvel & DC, each with a one-click Load, Remove or Download button.
  1. Open Settings β†’ Learn SQL.
  2. Click Load next to any database β€” it installs (downloading first if needed) and appears in your tree.
  3. Expand it to see the tables β€” or just ask the AI: "what's in this database?"
  4. Done exploring? Click Remove to hide it; reload it any time.

Prefer to do it by hand? Download a .db from the Databases tab, then use Add β†’ SQLite β†’ Browse… in the tree. Tip: right-click any table to preview rows, count them, or generate a starter query.

Turn on the assistant for $0.

The AI is optional and off until you add a provider. Both of these are free.

🟒 Google Gemini free tier

  1. Go to aistudio.google.com/apikey and sign in.
  2. Click Create API key and copy it.
  3. In PounceSQL: Settings β†’ AI Provider β†’ Google, paste the key.
  4. Pick gemini-2.5-flash and start chatting. Free-tier limits are generous for learning.

πŸ”’ Ollama 100% local

  1. Install Ollama (or brew install ollama).
  2. Pull a coding-tuned model: ollama pull qwen2.5-coder
  3. In PounceSQL: Settings β†’ AI Provider β†’ Ollama, endpoint http://localhost:11434.
  4. Load the model list, pick your model β€” nothing ever leaves your Mac.

Prefer the big models? A few dollars of OpenAI or Anthropic credits go a long way.

From your first query to charts.

Paste each query into the editor and hit Run (βŒ˜β†΅), or ask the AI. Work top to bottom β€” every lesson builds on the last.

  1. 1

    Your first query

    pokemon.db

    SELECT chooses columns, WHERE filters rows, ORDER BY sorts, LIMIT caps the count. Find the ten hardest-hitting Fire types:

    SELECT name, type1, attack
    FROM pokemon
    WHERE type1 = 'Fire'
    ORDER BY attack DESC
    LIMIT 10;

    Try next: change 'Fire' to 'Water', or sort by speed.

  2. 2

    Count & group

    pokemon.db

    Aggregate functions summarise many rows. GROUP BY makes one row per group β€” here, per type β€” with a count and an average:

    SELECT type1,
           COUNT(*)            AS count,
           ROUND(AVG(total), 0) AS avg_power
    FROM pokemon
    GROUP BY type1
    ORDER BY count DESC;

    Try next: add HAVING COUNT(*) > 40 to keep only the common types.

  3. 3

    Join two tables

    starwars.db

    Real data lives in linked tables. A JOIN follows the foreign key β€” each character's planet_id points at a planet:

    SELECT people.name, planet.name AS homeworld
    FROM people
    JOIN planet ON people.planet_id = planet.id
    WHERE planet.name = 'Tatooine';

    Try next: swap in 'Naboo', or add people.height and sort by it.

  4. 4

    Let the AI write it

    any database Β· AI

    Don't know the syntax yet? Type the question in the AI Assistant and it writes engine-correct SQL you can read, tweak, and run with Use in editor:

    Ask: β€œWhich homeworld has produced the most characters?”

    Read the JOIN + GROUP BY it generates β€” that's lesson 2 and 3 combined. Then ask it "explain that query."

  5. 5

    See it as a chart

    any database Β· AI

    Numbers are easier to grasp as pictures. Ask for a chart and PounceSQL renders it inline β€” then export it as PNG:

    Ask: β€œChart the average attack by PokΓ©mon type.”

    Also try: "give me the KPIs for this database" for a dashboard of headline numbers.

  6. 6

    Map the whole schema

    any database Β· AI

    New database? Get the lay of the land instantly β€” the AI draws an entity-relationship diagram of the tables and how they connect:

    Ask: β€œDiagram the relationships in this database.”

    Now you can see which columns to JOIN on before you write a line of SQL.