0
0
SQLquery~20 mins

Self join concept in SQL - Practice Problems & Coding Challenges

Choose your learning style9 modes available
Challenge - 5 Problems
🎖️
Self Join Mastery
Get all challenges correct to earn this badge!
Test your skills under time pressure!
query_result
intermediate
2:00remaining
Output of a simple self join query
Consider a table Employees with columns id, name, and manager_id (which refers to the id of the employee's manager). What is the output of the following SQL query?
SELECT e.name AS Employee, m.name AS Manager
FROM Employees e
JOIN Employees m ON e.manager_id = m.id
ORDER BY e.id;
SQL
CREATE TABLE Employees (id INT, name VARCHAR(20), manager_id INT);
INSERT INTO Employees VALUES
(1, 'Alice', NULL),
(2, 'Bob', 1),
(3, 'Charlie', 1),
(4, 'David', 2);
A[{"Employee": "Bob", "Manager": "Alice"}, {"Employee": "Charlie", "Manager": "Alice"}, {"Employee": "David", "Manager": "Bob"}]
B[{"Employee": "Alice", "Manager": "Alice"}, {"Employee": "Bob", "Manager": "Bob"}, {"Employee": "Charlie", "Manager": "Charlie"}, {"Employee": "David", "Manager": "David"}]
C[{"Employee": "Alice", "Manager": null}, {"Employee": "Bob", "Manager": "Alice"}, {"Employee": "Charlie", "Manager": "Alice"}, {"Employee": "David", "Manager": "Bob"}]
D[]
Attempts:
2 left
💡 Hint
Think about how the join matches employees to their managers using the manager_id and id columns.
🧠 Conceptual
intermediate
1:30remaining
Understanding self join purpose
Why do we use a self join in SQL?
ATo delete duplicate rows from a table.
BTo combine rows from two different tables based on a related column.
CTo compare rows within the same table by joining it to itself.
DTo create a backup copy of a table.
Attempts:
2 left
💡 Hint
Think about when you want to relate rows inside the same table.
📝 Syntax
advanced
1:30remaining
Identify the syntax error in self join query
Which option contains a syntax error in this self join SQL query?
SELECT e.name, m.name
FROM Employees e
JOIN Employees m ON e.manager_id = m.id;
ASELECT e.name, m.name FROM Employees e JOIN Employees m ON e.manager_id = m.id;
BSELECT e.name, m.name FROM Employees e JOIN Employees m WHERE e.manager_id = m.id;
CSELECT e.name, m.name FROM Employees e INNER JOIN Employees m ON e.manager_id = m.id;
DSELECT e.name, m.name FROM Employees e JOIN Employees m ON e.manager_id = m.id ORDER BY e.name;
Attempts:
2 left
💡 Hint
Check the JOIN clause syntax carefully.
query_result
advanced
2:00remaining
Output of self join with NULL manager_id
Given the Employees table below, what will this query return?
SELECT e.name AS Employee, COALESCE(m.name, 'No Manager') AS Manager
FROM Employees e
LEFT JOIN Employees m ON e.manager_id = m.id
ORDER BY e.id;

Table data:
id | name    | manager_id
1  | Alice   | NULL
2  | Bob     | 1
3  | Charlie | 1
4  | David   | 2
A[{"Employee": "Alice", "Manager": "No Manager"}, {"Employee": "Bob", "Manager": "Alice"}, {"Employee": "Charlie", "Manager": "Alice"}, {"Employee": "David", "Manager": "Bob"}]
B[{"Employee": "Alice", "Manager": null}, {"Employee": "Bob", "Manager": "Alice"}, {"Employee": "Charlie", "Manager": "Alice"}, {"Employee": "David", "Manager": "Bob"}]
C[{"Employee": "Bob", "Manager": "Alice"}, {"Employee": "Charlie", "Manager": "Alice"}, {"Employee": "David", "Manager": "Bob"}]
D[]
Attempts:
2 left
💡 Hint
LEFT JOIN keeps all employees even if they have no manager.
optimization
expert
2:30remaining
Optimizing a self join query for large tables
You have a large Employees table with millions of rows. You want to find each employee's manager name using a self join. Which option is the best way to optimize this query?
SELECT e.name AS Employee, m.name AS Manager
FROM Employees e
JOIN Employees m ON e.manager_id = m.id;
AUse SELECT * instead of selecting specific columns.
BRewrite the query using a subquery instead of a join.
CAdd a WHERE clause filtering employees with manager_id IS NOT NULL.
DCreate an index on Employees.id and Employees.manager_id columns before running the query.
Attempts:
2 left
💡 Hint
Indexes help speed up join operations on large tables.