From your first SELECT to window functions, data modeling, and interview patterns. Practice with a built-in SQL playground running real queries in your browser.
Understand what databases are, why SQL matters, and write your first SELECT query. See results instantly in the built-in SQL playground.
Filter rows with WHERE, use comparison operators, combine conditions with AND/OR/NOT, and sort results with ORDER BY.
Summarize data with aggregate functions. Group results with GROUP BY and filter groups with HAVING.
Master INNER JOIN, LEFT JOIN, RIGHT JOIN, FULL JOIN, and CROSS JOIN. Understand when to use each type.
Write subqueries in WHERE, FROM, and SELECT clauses. Use Common Table Expressions (WITH) for readable, reusable query logic.
Calculate running totals, rankings, and moving averages without collapsing rows. The most powerful feature in modern SQL.
Add new rows, update existing data, and delete records safely. Understand transactions and the importance of WHERE in UPDATE/DELETE.
Design tables with proper data types, constraints (PRIMARY KEY, NOT NULL, UNIQUE, FOREIGN KEY), and defaults.
Understand how indexes speed up queries, when to create them, and how to read EXPLAIN plans to optimize slow queries.
Design databases with normalization (1NF-3NF), star schema for analytics, and entity-relationship diagrams.
Transform data with CASE expressions, handle NULLs with COALESCE, manipulate strings, and work with dates.
Cohort analysis, funnel metrics, retention rates, and A/B test analysis. The SQL patterns data scientists use daily.
Master the SQL patterns asked at Google, Meta, Amazon, and Uber. Top-N per group, gap analysis, pivot tables, and recursive queries.
12 interactive labs — hands-on exercises for this track
Write SQL queries and see results instantly — SQLite running in your browser with sample data
Watch INNER, LEFT, RIGHT, FULL, and CROSS JOINs animate row-by-row. See exactly which rows survive each join — and why LEFT JOIN keeps unmatched rows with NULLs.
See how adding indexes collapses a query plan. Toggle indexes and watch Sequential Scans turn into Index Scans — cost drops from 10,000 to 12.
Animate ROW_NUMBER, RANK, LAG, LEAD, and SUM-OVER row-by-row. Toggle PARTITION BY to watch the function restart at each group boundary.
Transform a denormalized Orders table into clean relational schema step-by-step. Each step animates the change and explains which redundancy it removes.
See how Common Table Expressions break a complex query into named steps. Toggle between CTEs and nested subqueries to feel the readability difference.
Watch two concurrent transactions collide. Pick Read Uncommitted → Serializable and see exactly what T1 reads, which anomalies fire.
Watch two transactions lock rows in opposite orders and form a wait-for cycle — the database's definition of a deadlock. Flip to consistent ordering and the cycle disappears.
Same complex query on 3 tabs — regular view, materialized view, no view. See freshness-vs-speed tradeoff in live timings.
BEFORE INSERT computes tax. AFTER UPDATE writes audit log. Toggle triggers off and see how 'app-level code' forgets.
1M-row orders table split by Range (date) or Hash (customer_id). See why partitioning only helps when filter matches partition key.
Nested JSONB document with 5 ops: ->>, ->, @>, jsonb_set, jsonb_path_query. See the traversed path highlighted.
325 questions across 13 modules — check how well you understood this track.