87 hands-on JOIN challenges counted from the live bank — 8 Easy, 49 Medium, 26 Hard — from your first INNER JOIN to self-joins, cross joins and the anti-join pattern. 58 are free to play, including 1 free Hard preview; the rest are Pro. Real datasets, AI tutoring.
Start Practicing Free →Every challenge below is tagged LEFT JOIN: keep every row from the left table and let the unmatched side come back NULL. That NULL is the anti-join — LEFT JOIN … WHERE right.id IS NULL finds the customers who never ordered, the records with no match. Start with LEFT JOIN: Watch the NULLs Appear, the Easy one written to show the mechanism; the anti-join explained has the walkthrough.
Counted from the challenge bank, September 2026. Easy first, then Medium, then Hard.
Uses: LEFT JOIN COALESCE Aggregation GROUP BY
Uses: CROSS JOIN LEFT JOIN COUNT
Uses: LEFT JOIN IS NULL CTE
Uses: LEFT JOIN CTE GROUP BY
Uses: SELECT CTE LEFT JOIN GROUP BY julianday COUNT
Uses: SELECT CASE COALESCE LEFT JOIN CTE julianday
Uses: LEFT JOIN CTE CASE Window Functions
A table joined to itself — employees to their managers, orders to earlier orders by the same customer, pairs of rows that satisfy a condition. Start with Employee + Manager Pairs (Self Join); the Hard ones add date windows, non-equi conditions and a fraud-detection velocity rule.
Counted from the challenge bank, September 2026. Medium first, then Hard.
Finance & Banking track · Uses: Self-JOIN WHERE
Uses: Self-Join Date Functions DISTINCT BETWEEN
Finance & Banking track · Uses: GROUP BY Date Functions Self-Join
Uses: Self-JOIN JULIANDAY Date Functions