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
Understanding Why Joins Are Needed in SQL
📖 Scenario: Imagine you work at a small bookstore. You have two tables: one lists books with their IDs and titles, and another lists sales with book IDs and quantities sold. You want to see which books sold and how many copies each sold.
🎯 Goal: Build a simple SQL query using a JOIN to combine book titles with their sales quantities.
📋 What You'll Learn
Create a table called books with columns book_id and title.
Create a table called sales with columns sale_id, book_id, and quantity.
Insert specific rows into both tables as given.
Write a SQL query using JOIN to combine books and sales on book_id.
💡 Why This Matters
🌍 Real World
In real businesses, data is often split into multiple tables to keep it organized. Joins let you combine this data to answer questions like 'Which products sold the most?'
💼 Career
Understanding joins is essential for database work, data analysis, and backend development where combining data from multiple sources is common.
Progress0 / 4 steps
1
Create the books table and insert data
Create a table called books with columns book_id (integer) and title (text). Insert these rows exactly: (1, 'The Great Gatsby'), (2, '1984'), (3, 'To Kill a Mockingbird').
SQL
Hint
Use CREATE TABLE to make the table, then INSERT INTO to add rows.
2
Create the sales table and insert data
Create a table called sales with columns sale_id (integer), book_id (integer), and quantity (integer). Insert these rows exactly: (1, 1, 5), (2, 2, 3), (3, 1, 2).
SQL
Hint
Use CREATE TABLE and INSERT INTO like before, but with the new columns and values.
3
Write a JOIN query to combine books and sales
Write a SQL query that selects title and quantity by joining books and sales on the book_id column using an INNER JOIN.
SQL
Hint
Use INNER JOIN to combine rows where book_id matches in both tables.
4
Complete the query with ordering
Add an ORDER BY clause to the query to sort the results by quantity in descending order.
SQL
Hint
Use ORDER BY followed by the column name and DESC to sort from highest to lowest.
Practice
(1/5)
1. Why do we use JOIN in SQL when working with multiple tables?
easy
A. To combine related data from two or more tables into one result
B. To delete rows from a table
C. To create a new table
D. To change the data type of a column
Solution
Step 1: Understand the purpose of JOIN
JOIN is used to bring together rows from different tables based on a related column.
Step 2: Identify the correct use case
Deleting rows, creating tables, or changing data types are not done with JOIN.
Final Answer:
To combine related data from two or more tables into one result -> Option A
Quick Check:
JOIN combines tables = To combine related data from two or more tables into one result [OK]
Hint: JOIN merges tables on related columns to see connected data [OK]
Common Mistakes:
Thinking JOIN deletes or modifies tables
Confusing JOIN with CREATE or DELETE commands
Assuming JOIN changes data types
2. Which of the following is the correct syntax to join two tables Employees and Departments on the column DepartmentID?
easy
A. SELECT * FROM Employees WHERE DepartmentID = Departments.DepartmentID;
B. SELECT * FROM Employees JOIN Departments ON Employees.DepartmentID = Departments.DepartmentID;
C. SELECT * FROM Employees JOIN Departments USING (DepartmentID);
D. SELECT * FROM Employees JOIN Departments ON Employees.ID = Departments.ID;
Solution
Step 1: Check the JOIN condition syntax
The correct JOIN syntax uses ON with matching columns: Employees.DepartmentID = Departments.DepartmentID.
Step 2: Verify the options
SELECT * FROM Employees JOIN Departments ON Employees.DepartmentID = Departments.DepartmentID; uses correct ON syntax with matching columns. SELECT * FROM Employees WHERE DepartmentID = Departments.DepartmentID; uses WHERE incorrectly. SELECT * FROM Employees JOIN Departments USING (DepartmentID); uses USING with correct parentheses. SELECT * FROM Employees JOIN Departments ON Employees.ID = Departments.ID; joins on wrong columns.
Final Answer:
SELECT * FROM Employees JOIN Departments ON Employees.DepartmentID = Departments.DepartmentID; -> Option B
Quick Check:
JOIN with ON and matching columns = SELECT * FROM Employees JOIN Departments ON Employees.DepartmentID = Departments.DepartmentID; [OK]
Hint: Use JOIN ... ON table1.col = table2.col for correct syntax [OK]
Common Mistakes:
Using WHERE instead of ON for JOIN condition
Joining on wrong columns
Misusing USING without parentheses
3. Given two tables: Students(id, name) Grades(student_id, grade) What will this query return?
SELECT Students.name, Grades.grade FROM Students JOIN Grades ON Students.id = Grades.student_id;
medium
A. An error because of missing WHERE clause
B. All students with NULL grades included
C. Only grades without student names
D. A list of student names with their grades where student IDs match
Solution
Step 1: Understand INNER JOIN behavior
JOIN without specifying LEFT or RIGHT is INNER JOIN, which returns rows with matching keys in both tables.
Step 2: Analyze the query result
The query returns student names and grades only where Students.id matches Grades.student_id.
Final Answer:
A list of student names with their grades where student IDs match -> Option D
Quick Check:
INNER JOIN returns matching rows = A list of student names with their grades where student IDs match [OK]
Hint: INNER JOIN returns only matching rows from both tables [OK]
Common Mistakes:
Expecting all students even without grades
Thinking JOIN returns unmatched rows
Assuming WHERE is needed for JOIN condition
4. You wrote this query:
SELECT * FROM Orders JOIN Customers ON Orders.CustomerID = Customers.ID;
But it returns an error. What is the most likely cause?
medium
A. The column names in ON clause do not match actual table columns
B. JOIN keyword is not supported in SQL
C. Missing WHERE clause after JOIN
D. SELECT * cannot be used with JOIN
Solution
Step 1: Check column names in ON clause
If column names Orders.CustomerID or Customers.ID do not exist, SQL throws an error.
Step 2: Verify other options
JOIN is valid SQL keyword, WHERE is optional, and SELECT * works with JOIN.
Final Answer:
The column names in ON clause do not match actual table columns -> Option A
Quick Check:
Wrong column names cause JOIN errors = The column names in ON clause do not match actual table columns [OK]
Hint: Check column names in ON clause carefully to avoid errors [OK]
Common Mistakes:
Assuming JOIN keyword is invalid
Thinking WHERE is mandatory after JOIN
Believing SELECT * cannot be used with JOIN
5. You have two tables: Authors(author_id, name) Books(book_id, title, author_id) You want to list all authors and their books, including authors who have no books yet. Which SQL join should you use?
hard
A. INNER JOIN
B. RIGHT JOIN
C. LEFT JOIN
D. CROSS JOIN
Solution
Step 1: Understand the requirement
We want all authors listed, even if they have no books. This means we keep all rows from Authors.
Step 2: Choose the correct JOIN type
LEFT JOIN keeps all rows from the left table (Authors) and matches books if available, else NULL.
Step 3: Exclude other JOIN types
INNER JOIN excludes authors without books, RIGHT JOIN keeps all books, CROSS JOIN creates all combinations.
Final Answer:
LEFT JOIN -> Option C
Quick Check:
LEFT JOIN keeps all left table rows = LEFT JOIN [OK]
Hint: Use LEFT JOIN to keep all rows from the first table [OK]
Common Mistakes:
Using INNER JOIN and missing authors without books