The platform

A SQL Workbench on real-feeling hospital data, in the browser

SQLLab gives every student a hospital database to explore, query and change, with each answer saved and checked against the key. Nothing to install, and nothing a student runs can break the data.

  • 3 hospital databases
  • Answers checked automatically
  • Nothing to install
SQLLab · SQL Workbench
The SQL Workbench: the database schema on the left, a SQL editor and a results grid
SQL Workbench

Everything for querying health data, in one window

Each lab opens its database in the Workbench, with the schema, the editor, the patient view and the questions side by side.

Tables

3 parts

The database at a glance, before the first query.

  • Every table and its rows
  • Columns and data types
  • Primary and foreign keys

Relationships

2 parts

How the tables link, for writing joins.

  • Links between tables
  • Keys on both sides

Workbench

4 parts

Write, run and refine SQL.

  • SQL editor
  • Results grid
  • Download results as CSV
  • A fresh copy for every run

Patient chart

3 parts

One patient’s rows in every table, like a chart.

  • Encounters and diagnoses
  • Results and medications
  • Claims

Answers

3 parts

One answer per question, saved to the assignment.

  • A SQL box per question
  • Saves as students type
  • Checked against the key

SQL reference

4 parts

The syntax students need, in its own window.

  • Queries and joins
  • Grouping and subqueries
  • Window functions
  • Date, text and number functions
For students

Learn SQL by answering real hospital questions

Readmissions, care gaps, denials and unbilled accounts: students learn each part of SQL on the questions health data analysts are asked.

Safe to experiment

Every run starts from a fresh copy, so CREATE, INSERT, UPDATE and DELETE can be tried freely.

Answers that save themselves

Each answer saves a few seconds after students stop typing, on any computer, in class or at home.

Runaway queries stopped

A query that runs too long is stopped with a hint to check the joins and filters.

A Word sheet for every lab

Students copy their SQL and results into the activity document and answer its questions.

A clinician reviewing results on a tablet
For faculty

Run the whole SQL course from one place

Assign labs, see every query and its check result, and grade without running anyone’s SQL by hand.

Assignments

Choose labs, then a class, a section or teams, and set a due date and points.

Class codes

Share a class code and students create their own accounts, or add and import them yourself.

Answers checked for you

Each saved query is run and compared with the key’s result: see at a glance which match and why the others do not.

Practice mode

Choose whether students see if each saved answer matches, or only after grading.

Activity builder

Edit any lab, add your own questions with their key queries, or write a new lab.

Your own databases

Add a database of your own and build labs on it.

Realistic by design

Databases that behave like a real health system’s

Fictional, but never generic. Three databases cover querying, auditing data quality and designing a database from scratch.

195

Patients, Central Hospital

An EHR and billing database of 16 linked tables for January to September 2026: 383 encounters, ICD-10-CM diagnoses, procedures, lab results, medications, vital signs and claims.

1

Import batch to audit

Patients, encounters and diagnoses received from a clinic’s old system, with deliberate data quality problems to find before loading.

49

Visits, unnormalized

Westside Family Clinic’s spreadsheet-style visit log, with repeated details and repeating columns: the starting point for 1NF to 3NF.

Checked automatically

Every saved answer compared with the key

Students save one query per question. SQLLab runs it on a fresh copy of the database and compares the result with the answer key’s, so faculty see straight away which answers match.

  • Standard SQL as SQLite writes it
  • From SELECT to CTEs, window functions and views
  • 179 auto-checked questions across 30 labs
-- Lab 18 · every provider, including those with none
SELECT   pr.provider_id, pr.last_name,
         COUNT(e.encounter_id) AS encounters
FROM     providers pr
LEFT JOIN encounters e
       ON e.attending_id = pr.provider_id
GROUP BY pr.provider_id, pr.last_name
ORDER BY pr.provider_id;

See how the labs use the platform

30 ready-made labs put every part of the Workbench to work.