Bird
Raised Fist0
MySQLquery~5 mins

Multiple table JOINs in MySQL

Choose your learning style10 modes available
Introduction
Joining multiple tables helps you combine related information from different places into one view.
You want to see customer orders along with product details.
You need to list employees with their department and manager names.
You want to analyze sales data with customer and product info together.
You want to combine student grades with course and teacher details.
Syntax
MySQL
SELECT columns
FROM table1
JOIN table2 ON table1.column = table2.column
JOIN table3 ON table2.column = table3.column;
Use JOIN to connect tables based on matching columns.
Each JOIN adds another table to combine data from.
Examples
Join two tables: orders and customers to get order IDs with customer names.
MySQL
SELECT orders.id, customers.name
FROM orders
JOIN customers ON orders.customer_id = customers.id;
Join three tables to get order IDs, customer names, and product names.
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;
Sample Program
This example creates three tables and joins them to show order ID, customer name, and product name together.
MySQL
CREATE TABLE customers (id INT, name VARCHAR(20));
CREATE TABLE orders (id INT, customer_id INT, product_id INT);
CREATE TABLE products (id INT, name VARCHAR(20));

INSERT INTO customers VALUES (1, 'Alice'), (2, 'Bob');
INSERT INTO products VALUES (10, 'Pen'), (20, 'Notebook');
INSERT INTO orders VALUES (100, 1, 10), (101, 2, 20);

SELECT orders.id AS order_id, customers.name AS customer_name, products.name AS product_name
FROM orders
JOIN customers ON orders.customer_id = customers.id
JOIN products ON orders.product_id = products.id;
OutputSuccess
Important Notes
JOIN matches rows where the specified columns have the same value.
If a row in one table has no match in the other, it won't appear unless you use LEFT JOIN or RIGHT JOIN.
Order of JOINs matters when joining multiple tables; each JOIN uses the previous result.
Summary
Multiple table JOINs combine data from several tables into one result.
Use JOIN with ON to specify how tables connect.
This helps answer questions that need info from different tables.

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