Joining tables helps combine related information from different places. The join engine matches rows to find pairs that belong together.
How the join engine matches rows in SQL
Start learning this pattern below
Jump into concepts and practice - no test required
SELECT columns FROM table1 JOIN_TYPE JOIN table2 ON table1.common_column = table2.common_column;
JOIN_TYPE can be INNER, LEFT, RIGHT, or FULL depending on what rows you want.
The ON clause tells the engine how to match rows between tables.
SELECT * FROM customers INNER JOIN orders ON customers.customer_id = orders.customer_id;
SELECT * FROM employees LEFT JOIN departments ON employees.dept_id = departments.dept_id;
SELECT * FROM products RIGHT JOIN suppliers ON products.supplier_id = suppliers.supplier_id;
This example creates two tables: customers and orders. It then finds which products each customer bought by matching customer IDs.
CREATE TABLE customers ( customer_id INT, name VARCHAR(50) ); CREATE TABLE orders ( order_id INT, customer_id INT, product VARCHAR(50) ); INSERT INTO customers VALUES (1, 'Alice'), (2, 'Bob'), (3, 'Charlie'); INSERT INTO orders VALUES (101, 1, 'Book'), (102, 2, 'Pen'), (103, 1, 'Notebook'); SELECT customers.name, orders.product FROM customers INNER JOIN orders ON customers.customer_id = orders.customer_id ORDER BY customers.name;
The join engine looks at each row in the first table and tries to find matching rows in the second table based on the ON condition.
For INNER JOIN, only rows with matches in both tables appear.
For LEFT JOIN, all rows from the first table appear, even if no match is found in the second table.
Joins combine rows from two tables by matching values in specified columns.
The join engine uses the ON condition to find matching pairs of rows.
Different join types control which rows appear when matches are missing.
Practice
Solution
Step 1: Understand the role of the ON condition
TheONcondition defines which columns from each table must have matching values for rows to join.Step 2: Recognize what the join engine uses
The join engine uses this condition to pair rows correctly, ignoring row order or table names alone.Final Answer:
TheONcondition specifying matching columns -> Option AQuick Check:
Join engine matches rows using ON condition [OK]
- Thinking row order affects join matching
- Assuming table names determine matches
- Confusing number of columns with matching criteria
Employees and Departments on the column DeptID?Solution
Step 1: Identify correct JOIN syntax
The correct JOIN syntax usesJOIN ... ON ...to specify the matching condition.Step 2: Check each option
SELECT * FROM Employees JOIN Departments ON Employees.DeptID = Departments.DeptID; usesJOIN ... ONcorrectly. SELECT * FROM Employees JOIN Departments WHERE Employees.DeptID = Departments.DeptID; wrongly uses WHERE instead of ON. SELECT * FROM Employees, Departments ON Employees.DeptID = Departments.DeptID; misuses ON with comma join. SELECT * FROM Employees JOIN Departments USING Employees.DeptID; misuses USING syntax with table prefix.Final Answer:
SELECT * FROM Employees JOIN Departments ON Employees.DeptID = Departments.DeptID; -> Option DQuick Check:
JOIN syntax requires ON condition [OK]
- Using WHERE instead of ON for join condition
- Mixing comma joins with ON clause
- Incorrect USING syntax with table prefixes
Orders and Customers with columns CustomerID, what will be the result of this query?SELECT Orders.OrderID, Customers.Name FROM Orders JOIN Customers ON Orders.CustomerID = Customers.CustomerID;
Assuming Orders has 3 rows with CustomerIDs 1, 2, 4 and Customers has 2 rows with CustomerIDs 1, 2.
Solution
Step 1: Understand INNER JOIN behavior
INNER JOIN returns only rows where the join condition matches in both tables.Step 2: Apply to given data
Orders have CustomerIDs 1, 2, 4; Customers have 1, 2. Only CustomerIDs 1 and 2 match, so only those rows appear.Final Answer:
2 rows with OrderIDs 1 and 2 only, matching customer names -> Option BQuick Check:
INNER JOIN returns only matching rows [OK]
- Expecting unmatched rows to appear with NULLs
- Confusing INNER JOIN with LEFT JOIN
- Assuming all rows from first table appear
SELECT * FROM Products JOIN Categories ON Products.CategoryID = Categories.ID;
What is the most likely cause?
Solution
Step 1: Analyze INNER JOIN behavior
INNER JOIN returns only rows where the join condition matches in both tables.Step 2: Consider missing matches
If some Products have CategoryID values not in Categories, those Products are excluded, reducing rows.Final Answer:
There are Products with CategoryID values not present in Categories -> Option AQuick Check:
Missing matches cause fewer rows in INNER JOIN [OK]
- Thinking swapped column names cause fewer rows
- Assuming JOIN keyword missing causes fewer rows
- Believing WHERE clause is needed to fix join
Solution
Step 1: Understand join types and their row inclusion
INNER JOIN includes only matching rows; LEFT JOIN includes all rows from the left table and matches from right; RIGHT JOIN is opposite; FULL JOIN includes all rows from both.Step 2: Apply to employees and departments
To list all employees even if no department exists, use LEFT JOIN from Employees (left) to Departments (right).Final Answer:
LEFT JOIN -> Option CQuick Check:
LEFT JOIN keeps all left table rows [OK]
- Using INNER JOIN and missing employees without departments
- Confusing RIGHT JOIN with LEFT JOIN
- Assuming FULL JOIN is needed when LEFT JOIN suffices
