Learning Path
Pick a track, or jump straight to any topic — no gates.
SQL Basics
Introduction to SQL
The language every database speaks — and why you should too
SELECT Statement
Control exactly which columns appear in your output
WHERE Clause
Filter rows — get only the data you actually need
AND Operator
Require multiple conditions to all be true at once
OR Operator
Match rows where at least one condition is true
ORDER BY
Sort results by any column — ascending, descending, or both
LIMIT & OFFSET
Cap the number of rows returned — and paginate through results
Working with NULL
The most misunderstood concept in SQL — and how to handle it
CREATE TABLE
Define a table — columns, types, and the constraints that keep data clean
INSERT Statement
Add new rows — one, many, or copied from another query
UPDATE & DELETE
Change and remove rows — and why WHERE is not optional
ALTER TABLE & DROP TABLE
Evolve your schema — add columns, rename tables, clean up
Filtering & Conditions
DISTINCT
Collapse duplicate rows into unique values
IN Operator
Check a value against a list — cleaner than chained ORs
BETWEEN
Filter values within a range — inclusive on both ends
LIKE & Pattern Matching
Search text with wildcard patterns — partial matches, prefixes, suffixes
CASE WHEN
Add if-then-else logic directly inside your queries
Aggregation
COUNT Function
Count rows, count values, count unique values — and know the difference
SUM Function
Add up numeric values — with support for conditional totals
AVG Function
Compute the mean — and understand how NULLs change the result
MIN & MAX
Find the smallest and largest values in a column
GROUP BY
Split data into groups and aggregate each one separately
HAVING
Filter groups after aggregation — the WHERE for aggregated results
NULLs in Aggregations
How NULL silently changes COUNT, SUM, AVG, and GROUP BY
Joins & Subqueries
INNER JOIN
Combine rows from two tables where a condition matches
LEFT JOIN
Keep all left rows — even when there's no match on the right
RIGHT JOIN
Keep all right rows — the mirror of LEFT JOIN
FULL OUTER JOIN
Keep every row from both sides — the union of LEFT and RIGHT
SELF JOIN
Join a table to itself — for hierarchies and row comparisons
CROSS JOIN
Generate every possible combination of rows from two tables
Subqueries
Nest one query inside another for multi-step logic
EXISTS vs IN
Two ways to check for related rows — and when each one wins
Advanced SQL
Common Table Expressions (CTEs)
Name your query steps with WITH — no more nested subquery spaghetti
Introduction to Window Functions
Add aggregated or ranked values to every row — without collapsing anything
ROW_NUMBER()
Assign unique sequential numbers — and solve top-N-per-group
RANK()
Rank rows with tied values getting the same position — gaps after ties
DENSE_RANK()
Rank without gaps — consecutive numbers even when values tie
LAG()
Access the previous row's value — essential for trend analysis
LEAD()
Look ahead to the next row's value — the mirror of LAG