Bird
Raised Fist0
SQLquery~5 mins

INNER JOIN with ON condition in SQL - Cheat Sheet & Quick Revision

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Recall & Review
beginner
What does an INNER JOIN do in SQL?
An INNER JOIN returns only the rows where there is a match in both tables based on the specified condition.
Click to reveal answer
beginner
What is the purpose of the ON condition in an INNER JOIN?
The ON condition specifies how to match rows from the two tables, usually by comparing columns with related data.
Click to reveal answer
beginner
Write a simple INNER JOIN query to get matching rows from tables Employees and Departments where Employees.DepartmentID equals Departments.ID.
SELECT * FROM Employees INNER JOIN Departments ON Employees.DepartmentID = Departments.ID;
Click to reveal answer
beginner
If an INNER JOIN query returns zero rows, what does it mean about the data?
It means there are no matching rows between the two tables based on the ON condition.
Click to reveal answer
intermediate
Can you use multiple conditions in the ON clause of an INNER JOIN? How?
Yes, you can combine multiple conditions using AND or OR inside the ON clause to match rows more precisely.
Click to reveal answer
What does the ON clause specify in an INNER JOIN?
AHow to match rows between tables
BWhich columns to select
CThe order of rows in the result
DThe database to use
What rows does an INNER JOIN return?
AAll rows from the first table
BOnly rows with matching values in both tables
CAll rows from the second table
DAll rows from both tables
Which SQL keyword is used to combine rows from two tables based on a condition?
AINNER JOIN
BGROUP BY
CORDER BY
DWHERE
Can the ON condition use more than one column to match rows?
ANo, only one column is allowed
BOnly in LEFT JOIN
CYes, by using AND or OR to combine conditions
DOnly if the columns have the same name
If you want to join tables but keep all rows from the first table even if no match exists, should you use INNER JOIN?
ANo, use CROSS JOIN
BYes, INNER JOIN keeps all rows from the first table
CYes, but only with ON condition
DNo, use LEFT JOIN instead
Explain in your own words what an INNER JOIN with an ON condition does.
Think about how you find common friends between two groups.
You got /3 concepts.
    Write a simple INNER JOIN query example and describe what it returns.
    Use two example tables like Employees and Departments.
    You got /4 concepts.

      Practice

      (1/5)
      1. What does an INNER JOIN do in SQL when used with an ON condition?
      easy
      A. It returns all rows from the first table regardless of matches.
      B. It returns all rows from both tables, matching or not.
      C. It returns all rows from the second table regardless of matches.
      D. It returns only rows where the join condition matches in both tables.

      Solution

      1. Step 1: Understand INNER JOIN behavior

        INNER JOIN returns rows only when the join condition matches rows in both tables.
      2. Step 2: Compare with other join types

        Unlike LEFT or RIGHT JOIN, INNER JOIN excludes rows without matches.
      3. Final Answer:

        It returns only rows where the join condition matches in both tables. -> Option D
      4. Quick Check:

        INNER JOIN = matching rows only [OK]
      Hint: INNER JOIN keeps only matching rows from both tables [OK]
      Common Mistakes:
      • Thinking INNER JOIN returns unmatched rows
      • Confusing INNER JOIN with LEFT JOIN
      • Ignoring the ON condition effect
      2. Which of the following is the correct syntax for an INNER JOIN with an ON condition between tables Employees and Departments on DepartmentID?
      easy
      A. SELECT * FROM Employees INNER JOIN Departments ON Employees.DepartmentID = Departments.DepartmentID;
      B. SELECT * FROM Employees INNER JOIN Departments ON Employees.ID = Departments.ID;
      C. SELECT * FROM Employees JOIN Departments USING DepartmentID;
      D. SELECT * FROM Employees INNER JOIN Departments WHERE Employees.DepartmentID = Departments.DepartmentID;

      Solution

      1. Step 1: Identify correct INNER JOIN syntax

        The INNER JOIN requires the ON keyword followed by the join condition.
      2. Step 2: Check the join condition correctness

        The join should be on Employees.DepartmentID = Departments.DepartmentID, not just ID or WHERE clause.
      3. Final Answer:

        SELECT * FROM Employees INNER JOIN Departments ON Employees.DepartmentID = Departments.DepartmentID; -> Option A
      4. Quick Check:

        INNER JOIN uses ON with condition [OK]
      Hint: Use ON keyword with join condition for INNER JOIN [OK]
      Common Mistakes:
      • Using WHERE instead of ON for join condition
      • Joining on wrong columns
      • Omitting ON keyword
      3. Given these tables:

      Employees
      ID | Name | DeptID
      1 | Alice | 10
      2 | Bob | 20
      3 | Carol | 30

      Departments
      DeptID | DeptName
      10 | Sales
      20 | HR
      40 | IT

      What is the result of this query?
      SELECT Employees.Name, Departments.DeptName FROM Employees INNER JOIN Departments ON Employees.DeptID = Departments.DeptID;
      medium
      A. [('Alice', 'Sales'), ('Bob', 'HR')]
      B. [('Alice', 'Sales'), ('Bob', 'HR'), ('Carol', 'IT')]
      C. [('Alice', 'Sales'), ('Carol', 'IT')]
      D. [('Bob', 'HR'), ('Carol', 'IT')]

      Solution

      1. Step 1: Match Employees.DeptID with Departments.DeptID

        Employees have DeptIDs 10, 20, 30; Departments have 10, 20, 40.
      2. Step 2: Find matching DeptIDs

        Matches are 10 and 20 only; 30 (Carol) has no matching department.
      3. Final Answer:

        [('Alice', 'Sales'), ('Bob', 'HR')] -> Option A
      4. Quick Check:

        INNER JOIN returns only matching DeptIDs [OK]
      Hint: Only rows with matching DeptID appear in INNER JOIN result [OK]
      Common Mistakes:
      • Including unmatched rows like Carol's
      • Confusing DeptID with ID
      • Assuming all departments join
      4. Consider this query:
      SELECT e.Name, d.DeptName FROM Employees e INNER JOIN Departments d ON e.DeptID = d.ID;

      Given Departments has column DeptID but no ID column, what is the issue?
      medium
      A. The query will join on wrong columns but still return rows.
      B. The query will run but return no rows.
      C. The query will cause a syntax error due to wrong column name.
      D. The query will join correctly because aliases fix column names.

      Solution

      1. Step 1: Check column names in ON condition

        The query uses d.ID but Departments table has DeptID, not ID.
      2. Step 2: Understand SQL error on invalid column

        Referencing a non-existent column causes a syntax or runtime error.
      3. Final Answer:

        The query will cause a syntax error due to wrong column name. -> Option C
      4. Quick Check:

        Wrong column in ON causes error [OK]
      Hint: Verify column names in ON condition to avoid errors [OK]
      Common Mistakes:
      • Assuming aliases rename columns automatically
      • Using wrong column names in ON clause
      • Expecting empty result instead of error
      5. You have two tables:

      Orders
      OrderID | CustomerID | Amount
      1 | 101 | 50
      2 | 102 | 75
      3 | 103 | 100
      4 | 101 | 25

      Customers
      CustomerID | Name
      101 | John
      102 | Jane
      104 | Mike

      Write an INNER JOIN query to find total order amount per customer name, including only customers with orders. Which query is correct?
      hard
      A. SELECT c.Name, SUM(o.Amount) FROM Customers c INNER JOIN Orders o ON c.CustomerID = o.CustomerID GROUP BY c.CustomerID;
      B. SELECT c.Name, SUM(o.Amount) FROM Orders o INNER JOIN Customers c ON o.CustomerID = c.CustomerID GROUP BY c.Name;
      C. SELECT c.Name, SUM(o.Amount) FROM Customers c LEFT JOIN Orders o ON c.CustomerID = o.CustomerID GROUP BY c.Name;
      D. SELECT c.Name, SUM(o.Amount) FROM Orders o INNER JOIN Customers c ON o.CustomerID = c.CustomerID GROUP BY o.CustomerID;

      Solution

      1. Step 1: Understand requirement - total per customer with orders only

        INNER JOIN keeps only customers with matching orders; GROUP BY customer name to sum amounts.
      2. Step 2: Check query correctness

        SELECT c.Name, SUM(o.Amount) FROM Orders o INNER JOIN Customers c ON o.CustomerID = c.CustomerID GROUP BY c.Name; joins Orders to Customers on CustomerID and groups by c.Name, matching requirement exactly.
      3. Step 3: Compare other options

        SELECT c.Name, SUM(o.Amount) FROM Customers c INNER JOIN Orders o ON c.CustomerID = o.CustomerID GROUP BY c.CustomerID; groups by CustomerID but c.Name not grouped (SQL error). SELECT c.Name, SUM(o.Amount) FROM Customers c LEFT JOIN Orders o ON c.CustomerID = o.CustomerID GROUP BY c.Name; uses LEFT JOIN (includes customers without orders). SELECT c.Name, SUM(o.Amount) FROM Orders o INNER JOIN Customers c ON o.CustomerID = c.CustomerID GROUP BY o.CustomerID; groups by o.CustomerID (not customer name).
      4. Final Answer:

        SELECT c.Name, SUM(o.Amount) FROM Orders o INNER JOIN Customers c ON o.CustomerID = c.CustomerID GROUP BY c.Name; -> Option B
      5. Quick Check:

        INNER JOIN with GROUP BY customer name sums orders [OK]
      Hint: Join Orders to Customers, group by customer name for totals [OK]
      Common Mistakes:
      • Using LEFT JOIN includes customers without orders
      • Grouping by wrong column
      • Joining tables in wrong order causing confusion