Bird
Raised Fist0
MySQLquery~10 mins

Multiple table JOINs in MySQL - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - Multiple table JOINs
Start with Table A
↓
JOIN Table B on condition
↓
JOIN Table C on condition
↓
Combine rows where conditions match
↓
Return combined result set
Multiple table JOINs combine rows from several tables based on matching conditions, step-by-step.
Execution Sample
MySQL
SELECT orders.id, customers.name, products.name
FROM orders
JOIN customers ON orders.customer_id = customers.id
JOIN products ON orders.product_id = products.id;
This query joins three tables to get order IDs with customer and product names.
Execution Table
StepActionTables InvolvedMatching ConditionResult Rows
1Start with orders tableordersN/A3 rows (orders 1,2,3)
2Join customers on orders.customer_id = customers.idorders, customersorders.customer_id = customers.id3 rows matched with customers
3Join products on orders.product_id = products.idorders, customers, productsorders.product_id = products.id3 rows matched with products
4Return combined rows with order id, customer name, product nameorders, customers, productsN/A3 rows with combined data
💡 All orders matched with customers and products, query returns combined rows.
Variable Tracker
VariableStartAfter Step 2After Step 3Final
Result Rowsorders rows (3)orders + customers matched (3)orders + customers + products matched (3)3 combined rows with all data
Key Moments - 2 Insights
Why do we join tables one after another instead of all at once?
Each JOIN adds matching rows step-by-step, as shown in execution_table rows 2 and 3, building the combined result gradually.
What happens if a row in orders has no matching customer?
That row would be excluded in INNER JOINs like this example, so fewer rows appear after the join step (see execution_table row 2).
Visual Quiz - 3 Questions
Test your understanding
Look at the execution table, how many rows are in the result after joining customers?
A3 rows
B0 rows
C1 row
D5 rows
💡 Hint
Check execution_table row 2 under 'Result Rows' column.
At which step do products get joined to the existing tables?
AStep 1
BStep 3
CStep 2
DStep 4
💡 Hint
Look at execution_table rows and find when products table is added.
If an order has a product_id not in products table, what happens to that order row?
AIt duplicates the row
BIt appears with NULL product data
CIt is excluded from the final result
DIt causes an error
💡 Hint
INNER JOIN excludes unmatched rows, see explanation in key_moments about missing matches.
Concept Snapshot
Multiple table JOINs combine rows from several tables step-by-step.
Syntax: SELECT ... FROM A JOIN B ON condition JOIN C ON condition ...
Each JOIN matches rows based on conditions.
Only rows matching all JOINs appear in result (INNER JOIN).
Useful to combine related data from different tables.
Full Transcript
This visual execution shows how multiple table JOINs work in SQL. We start with the orders table, then join customers based on matching customer_id, then join products based on product_id. Each step adds matching rows from the new table to the existing combined rows. The final result has rows with order id, customer name, and product name. If any join condition fails for a row, that row is excluded in INNER JOINs. This step-by-step joining helps combine related data from multiple tables into one result set.

Practice

(1/5)
1. What is the main purpose of using JOIN with multiple tables in MySQL?
easy
A. To delete rows from multiple tables at once
B. To combine rows from two or more tables based on a related column
C. To create a new table from existing tables
D. To update multiple tables simultaneously

Solution

  1. Step 1: Understand the role of JOIN

    JOIN is used to combine rows from two or more tables based on a related column, allowing us to see related data together.
  2. Step 2: Compare with other options

    Deleting, creating, or updating tables are different SQL operations and not the main purpose of JOIN.
  3. Final Answer:

    To combine rows from two or more tables based on a related column -> Option B
  4. Quick Check:

    JOIN combines tables = To combine rows [OK]
Hint: JOIN connects tables by matching columns [OK]
Common Mistakes:
  • Confusing JOIN with DELETE or UPDATE operations
  • Thinking JOIN creates new tables permanently
  • Assuming JOIN works without specifying related columns
2. Which of the following is the correct syntax to join two tables employees and departments on the column department_id?
easy
A. SELECT * FROM employees JOIN departments ON employees.department_id = departments.department_id;
B. SELECT * FROM employees JOIN departments WHERE employees.department_id = departments.department_id;
C. SELECT * FROM employees, departments ON employees.department_id = departments.department_id;
D. SELECT * FROM employees JOIN departments USING employees.department_id;

Solution

  1. Step 1: Check JOIN syntax with ON clause

    The correct syntax uses JOIN followed by ON to specify the matching columns: JOIN departments ON employees.department_id = departments.department_id.
  2. Step 2: Identify errors in other options

    SELECT * FROM employees JOIN departments WHERE employees.department_id = departments.department_id; uses WHERE instead of ON, which is incorrect for JOIN conditions. SELECT * FROM employees, departments ON employees.department_id = departments.department_id; uses ON without JOIN keyword properly. SELECT * FROM employees JOIN departments USING employees.department_id; uses USING incorrectly with full column name.
  3. Final Answer:

    SELECT * FROM employees JOIN departments ON employees.department_id = departments.department_id; -> Option A
  4. Quick Check:

    JOIN with ON = SELECT * FROM employees JOIN departments ON employees.department_id = departments.department_id; [OK]
Hint: JOIN needs ON, not WHERE, to link tables [OK]
Common Mistakes:
  • Using WHERE instead of ON for JOIN condition
  • Using USING with full table.column syntax
  • Omitting JOIN keyword or ON clause
3. Given the tables:
students(id, name, class_id)
classes(id, class_name)
What is the output of this query?
SELECT students.name, classes.class_name FROM students JOIN classes ON students.class_id = classes.id WHERE classes.class_name = 'Math';
medium
A. Empty result because of missing WHERE clause
B. List of all students with their class names
C. List of class names only
D. List of student names who are in the Math class

Solution

  1. Step 1: Understand the JOIN and WHERE clause

    The JOIN connects students with their classes by matching class_id and id. The WHERE clause filters only classes named 'Math'.
  2. Step 2: Determine the output columns and rows

    The SELECT returns student names and class names only for students in 'Math' class, so the output is a list of those students with 'Math' as class_name.
  3. Final Answer:

    List of student names who are in the Math class -> Option D
  4. Quick Check:

    JOIN + WHERE filters = students in Math [OK]
Hint: WHERE filters after JOIN to limit rows [OK]
Common Mistakes:
  • Thinking it returns all students regardless of class
  • Confusing output columns with only class names
  • Assuming WHERE is missing and causes empty result
4. Identify the error in this query joining orders and customers:
SELECT orders.id, customers.name FROM orders JOIN customers WHERE orders.customer_id = customers.id;
medium
A. Missing ON keyword before join condition
B. Using WHERE instead of HAVING
C. Incorrect table names
D. Missing SELECT keyword

Solution

  1. Step 1: Check JOIN syntax

    The JOIN clause must be followed by ON to specify the join condition. Here, WHERE is incorrectly used instead of ON.
  2. Step 2: Confirm other parts are correct

    Table names and SELECT keyword are correct. HAVING is not used for join conditions.
  3. Final Answer:

    Missing ON keyword before join condition -> Option A
  4. Quick Check:

    JOIN needs ON, not WHERE [OK]
Hint: JOIN requires ON before condition, not WHERE [OK]
Common Mistakes:
  • Replacing ON with WHERE in JOIN
  • Confusing WHERE with HAVING clause
  • Ignoring syntax errors in JOIN statements
5. You have three tables:
products(id, name, category_id)
categories(id, category_name)
sales(product_id, quantity)
Which query correctly lists each product's name, its category name, and total quantity sold?
hard
A. SELECT p.name, c.category_name, SUM(s.quantity) FROM products p LEFT JOIN categories c ON p.category_id = c.id LEFT JOIN sales s ON p.id = s.product_id GROUP BY p.name;
B. SELECT p.name, c.category_name, s.quantity FROM products p JOIN categories c ON p.category_id = c.id JOIN sales s ON p.id = s.product_id;
C. SELECT p.name, c.category_name, SUM(s.quantity) FROM products p JOIN categories c ON p.category_id = c.id JOIN sales s ON p.id = s.product_id GROUP BY p.name, c.category_name;
D. SELECT p.name, c.category_name, SUM(s.quantity) FROM products p, categories c, sales s WHERE p.category_id = c.id AND p.id = s.product_id;

Solution

  1. Step 1: Understand the requirement

    We need product name, category name, and total quantity sold (sum of sales.quantity) grouped by product and category.
  2. Step 2: Analyze each option

    SELECT p.name, c.category_name, SUM(s.quantity) FROM products p JOIN categories c ON p.category_id = c.id JOIN sales s ON p.id = s.product_id GROUP BY p.name, c.category_name; uses JOINs with ON clauses correctly and groups by product and category names, summing quantity. SELECT p.name, c.category_name, s.quantity FROM products p JOIN categories c ON p.category_id = c.id JOIN sales s ON p.id = s.product_id; misses aggregation. SELECT p.name, c.category_name, SUM(s.quantity) FROM products p, categories c, sales s WHERE p.category_id = c.id AND p.id = s.product_id; uses implicit joins but misses GROUP BY. SELECT p.name, c.category_name, SUM(s.quantity) FROM products p LEFT JOIN categories c ON p.category_id = c.id LEFT JOIN sales s ON p.id = s.product_id GROUP BY p.name; uses LEFT JOIN but groups only by product name, missing category grouping.
  3. Final Answer:

    SELECT p.name, c.category_name, SUM(s.quantity) FROM products p JOIN categories c ON p.category_id = c.id JOIN sales s ON p.id = s.product_id GROUP BY p.name, c.category_name; -> Option C
  4. Quick Check:

    JOIN + GROUP BY + SUM = SELECT p.name, c.category_name, SUM(s.quantity) FROM products p JOIN categories c ON p.category_id = c.id JOIN sales s ON p.id = s.product_id GROUP BY p.name, c.category_name; [OK]
Hint: Use JOIN with GROUP BY and SUM for totals [OK]
Common Mistakes:
  • Missing GROUP BY when using SUM
  • Using WHERE instead of JOIN ON
  • Grouping by only one column when multiple needed
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard