Generate two small related tables and a real SQL join challenge to solve, with a fully explained solution showing exactly which rows matched and why.
You are a SQL tutor who treats a join as a specific question about which rows two tables agree on, and teaches it by making that agreement visible row by row instead of reciting definitions of inner and outer joins. My join type is [JOIN_TYPE:select:inner join,left join,right join,full outer join,you pick the one that fits a good challenge]. My scenario is [SCENARIO], described in plain language, such as customers and their orders, students and their enrolled classes, or employees and their departments. If I left that blank, pick a simple two-table relationship yourself and name which one you picked. Build two small tables by hand, five to eight rows each, for [SCENARIO], with primary and foreign keys clearly marked, and deliberately include at least one row in each table that has no match in the other, an order with no matching customer id, a customer with no orders, since a join exercise without any unmatched rows can't actually demonstrate what makes join types different from each other. Print both tables in full before the challenge. State one specific query challenge using [JOIN_TYPE], written as a question, such as list every customer along with any orders they've placed, including customers who haven't ordered anything yet, matched to the join type that actually answers it. If I chose you pick the one that fits a good challenge, pick whichever join type makes the unmatched rows in the tables meaningfully visible in the result. Give me a chance to attempt it by stating the challenge and stopping there, without writing the query yet, unless I explicitly ask for the solution right away. When I ask for the solution, write the SQL query, then show the actual resulting rows the query would produce against my exact two tables, and for the unmatched rows specifically, explain in plain language what NULL means in that row and why that row appears or doesn't appear given the join type chosen. Then explain briefly what would change about the result if a different join type were used instead, tied to the same two tables, so the contrast between join types is concrete rather than abstract. If I ask for another challenge on the same tables, write a new query question using a different join type or an added condition, such as filtering or sorting, instead of repeating the same challenge.
Use this prompt anywhere
10,000+ expert prompts for ChatGPT, Claude, Gemini, and wherever you use AI.
Get Early AccessJoin definitions read the same on every reference site and rarely stick. Seeing which specific rows drop out of an inner join, or which specific rows show up as NULL in a left join, sticks a lot faster. This tool builds two small related tables with deliberate unmatched rows, then a real challenge that makes the difference between join types visible.
Set [JOIN_TYPE], or let the tool pick whichever join makes the unmatched rows meaningful, and describe [SCENARIO], customers and orders, students and classes, employees and departments. Two five-to-eight row tables print in full, each one built with at least one row that has no match in the other, since a join exercise with nothing unmatched can't show what actually separates an inner join from a left join. Attempt the challenge yourself first. Ask for the solution and you get the query, the actual resulting rows against your exact tables, and a plain explanation of what NULL means for each unmatched row and why it appears or doesn't.
Ask for another challenge on the same tables and get a different join type or an added filter, not a repeat. Once joins click, put the same tables through the database normalization practice generator to see why they were split into two tables in the first place, or look up any unfamiliar term in the programming term definition explainer.
Build it in the Dock Editor to keep a running set of join exercises and their solutions.
Copy the full prompt into your AI tool of choice, the Dock Editor, ChatGPT, Claude, or Gemini. Set [JOIN_TYPE] to inner, left, right, or full outer, or let the tool pick whichever type makes the exercise's unmatched rows meaningful.
Fill in [SCENARIO] with a simple two-table relationship, customers and orders, students and classes, anything with a clear key relationship.
Two small tables print in full, five to eight rows each, deliberately including rows with no match on the other side.
A specific query question gets stated first, and the query itself waits until you ask for it, so you get a real shot at writing it yourself.
The solution shows the actual resulting rows against your exact tables, with every NULL and unmatched row explained in plain language.
See exactly which rows an inner join drops compared to a left join, using the same two tables, instead of memorizing a Venn diagram.
Run through several join challenges in a row across different scenarios to build real speed recognizing which join type a question actually needs.
Practice reasoning through unmatched rows and NULLs before writing joins against an actual production database.
Refresh the difference between join types with concrete row-level examples before a project that leans heavily on multi-table queries.
Discover more prompts that could help with your workflow.
Build a small working program that calls a real public API, with the request, response, and API key setup explained step by step.
Explain a core functional programming idea, such as pure functions or immutability, with a broken code example and its fixed version shown side by side.
Explain a built-in math function, square root, power, absolute value, or rounding, covering math and syntax, then generate practice calls to predict before revealing results.
10,000+ expert-curated prompts for ChatGPT, Claude, Gemini, and wherever you use AI. Our extension helps any prompt deliver better results.