Bird
Raised Fist0
PostgreSQLquery~5 mins

Self join patterns in PostgreSQL - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is a self join in SQL?
A self join is when a table is joined with itself to compare rows within the same table.
Click to reveal answer
beginner
Why use table aliases in a self join?
Aliases give different names to the same table so you can refer to it twice in the query clearly.
Click to reveal answer
intermediate
Example: How to find employees who have the same manager using self join?
Use a self join on the employee table matching manager_id to employee_id with aliases for clarity.
Click to reveal answer
intermediate
What is the difference between INNER JOIN and LEFT JOIN in self join patterns?
INNER JOIN returns only matching rows between the table and itself, LEFT JOIN returns all rows from the left side even if no match.
Click to reveal answer
advanced
How can self joins help in hierarchical data queries?
Self joins let you compare parent and child rows in the same table to explore hierarchy levels.
Click to reveal answer
What keyword is essential to distinguish the same table twice in a self join?
AHAVING
BGROUP BY
CDISTINCT
DAlias
In a self join, if you want all rows from the left table even if no match exists on the right, which join do you use?
ALEFT JOIN
BRIGHT JOIN
CINNER JOIN
DFULL JOIN
Which of these is a common use case for self joins?
AJoining two different tables
BComparing rows within the same table
CFiltering rows with WHERE
DCreating indexes
What does the ON clause specify in a self join?
AThe grouping of rows
BThe order of rows
CHow to match rows between the two aliases of the same table
DThe columns to select
If you want to find employees who share the same manager using a self join, which columns would you join on?
Aemployee.manager_id = manager.employee_id
Bemployee.employee_id = manager.employee_id
Cemployee.name = manager.name
Demployee.salary = manager.salary
Explain what a self join is and why table aliases are important in it.
Think about how you can use the same table twice in one query.
You got /3 concepts.
    Describe a real-life example where a self join can be used to find relationships within the same data set.
    Consider a company employee list with managers.
    You got /3 concepts.

      Practice

      (1/5)
      1. What is the main purpose of using a self join in PostgreSQL?
      easy
      A. To join a table to itself to compare rows within the same table
      B. To join two different tables based on a common column
      C. To create a backup of a table
      D. To delete duplicate rows from a table

      Solution

      1. Step 1: Understand the concept of self join

        A self join is used when you want to compare rows within the same table by joining the table to itself.
      2. Step 2: Differentiate from other joins

        Other joins combine different tables, but self join works on one table with aliases to distinguish instances.
      3. Final Answer:

        To join a table to itself to compare rows within the same table -> Option A
      4. Quick Check:

        Self join = join table to itself [OK]
      Hint: Self join means joining table to itself using aliases [OK]
      Common Mistakes:
      • Confusing self join with joining two different tables
      • Thinking self join creates a new table
      • Assuming self join deletes duplicates
      2. Which of the following is the correct syntax to perform a self join on a table named employees with aliases e1 and e2?
      easy
      A. SELECT * FROM employees e1 LEFT JOIN employees e2 ON e1.id = e2.manager_id;
      B. SELECT * FROM employees JOIN employees ON employees.manager_id = employees.id;
      C. SELECT * FROM employees AS e1, employees AS e2 WHERE e1.id = e2.id;
      D. SELECT * FROM employees e1 JOIN employees e2 ON e1.manager_id = e2.id;

      Solution

      1. Step 1: Identify correct alias usage

        Using aliases e1 and e2 for the same table employees is necessary to distinguish instances.
      2. Step 2: Check join condition

        The join condition e1.manager_id = e2.id correctly links employees to their managers.
      3. Final Answer:

        SELECT * FROM employees e1 JOIN employees e2 ON e1.manager_id = e2.id; -> Option D
      4. Quick Check:

        Use aliases and proper ON condition [OK]
      Hint: Use aliases and ON clause for self join syntax [OK]
      Common Mistakes:
      • Not using aliases causing ambiguity
      • Wrong join condition columns
      • Using comma join without ON clause
      3. Given the table employees(id, name, manager_id) with data:
      id | name  | manager_id
      ---+-------+-----------
      1  | Alice | NULL
      2  | Bob   | 1
      3  | Carol | 1
      4  | Dave  | 2

      What will be the output of this query?
      SELECT e1.name AS employee, e2.name AS manager
      FROM employees e1
      LEFT JOIN employees e2 ON e1.manager_id = e2.id
      ORDER BY e1.id;
      medium
      A. [{"employee": "Alice", "manager": null}, {"employee": "Bob", "manager": null}, {"employee": "Carol", "manager": null}, {"employee": "Dave", "manager": null}]
      B. [{"employee": "Alice", "manager": null}, {"employee": "Bob", "manager": "Alice"}, {"employee": "Carol", "manager": "Alice"}, {"employee": "Dave", "manager": "Bob"}]
      C. [{"employee": "Alice", "manager": "Alice"}, {"employee": "Bob", "manager": "Bob"}, {"employee": "Carol", "manager": "Carol"}, {"employee": "Dave", "manager": "Dave"}]
      D. [{"employee": "Alice", "manager": "Bob"}, {"employee": "Bob", "manager": "Carol"}, {"employee": "Carol", "manager": "Dave"}, {"employee": "Dave", "manager": null}]

      Solution

      1. Step 1: Understand the join logic

        The LEFT JOIN matches each employee's manager_id to the manager's id, returning manager's name or null if none.
      2. Step 2: Map each employee to their manager

        Alice has no manager (null), Bob and Carol have Alice as manager, Dave has Bob as manager.
      3. Final Answer:

        [{"employee": "Alice", "manager": null}, {"employee": "Bob", "manager": "Alice"}, {"employee": "Carol", "manager": "Alice"}, {"employee": "Dave", "manager": "Bob"}] -> Option B
      4. Quick Check:

        LEFT JOIN matches manager_id to id [OK]
      Hint: Match manager_id to id with LEFT JOIN for manager names [OK]
      Common Mistakes:
      • Confusing employee and manager columns
      • Using INNER JOIN losing employees without managers
      • Assuming manager_id is employee id
      4. Consider this query intended to find pairs of employees who share the same manager:
      SELECT e1.name, e2.name
      FROM employees e1
      JOIN employees e2 ON e1.manager_id = e2.manager_id
      WHERE e1.id != e2.id;

      What is the main issue with this query?
      medium
      A. It will return duplicate pairs in both orders (e.g., (Alice, Bob) and (Bob, Alice))
      B. It will not return any rows because of the WHERE clause
      C. It causes a syntax error due to missing aliases
      D. It only returns employees with no manager

      Solution

      1. Step 1: Analyze join condition

        The join matches employees with the same manager_id, including reversed pairs.
      2. Step 2: Check WHERE clause effect

        WHERE e1.id != e2.id avoids self-pairing but does not prevent duplicate pairs in reverse order.
      3. Final Answer:

        It will return duplicate pairs in both orders (e.g., (Alice, Bob) and (Bob, Alice)) -> Option A
      4. Quick Check:

        Self join can produce reversed duplicate pairs [OK]
      Hint: Self join pairs may appear twice reversed; use filtering [OK]
      Common Mistakes:
      • Assuming WHERE clause removes duplicates
      • Thinking query causes syntax error
      • Believing it returns only employees without managers
      5. You want to find all employees who are managers themselves, i.e., employees who have at least one other employee reporting to them. Which self join query correctly achieves this?
      hard
      A. SELECT e1.name FROM employees e1 JOIN employees e2 ON e1.manager_id = e2.id;
      B. SELECT e1.name FROM employees e1 LEFT JOIN employees e2 ON e1.id = e2.manager_id WHERE e2.id IS NULL;
      C. SELECT DISTINCT e1.name FROM employees e1 JOIN employees e2 ON e1.id = e2.manager_id;
      D. SELECT e1.name FROM employees e1 WHERE e1.manager_id IS NOT NULL;

      Solution

      1. Step 1: Understand the requirement

        Managers are employees whose id appears as manager_id for others.
      2. Step 2: Analyze each option

        SELECT DISTINCT e1.name FROM employees e1 JOIN employees e2 ON e1.id = e2.manager_id; joins employees where e1.id = e2.manager_id, selecting distinct managers correctly.
      3. Final Answer:

        SELECT DISTINCT e1.name FROM employees e1 JOIN employees e2 ON e1.id = e2.manager_id; -> Option C
      4. Quick Check:

        Join on id = manager_id finds managers [OK]
      Hint: Join employees where id = manager_id to find managers [OK]
      Common Mistakes:
      • Using LEFT JOIN with IS NULL returns non-managers
      • Joining on wrong columns (manager_id = id reversed)
      • Filtering on manager_id IS NOT NULL returns employees with managers
      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