Bird
Raised Fist0
PostgreSQLquery~5 mins

Subqueries with EXISTS in PostgreSQL - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What does the SQL keyword EXISTS do in a query?

EXISTS checks if a subquery returns any rows. If it does, the condition is true; if not, it is false.

Click to reveal answer
intermediate
How does a subquery with EXISTS differ from a normal join?

A subquery with EXISTS only checks for the presence of rows, not the actual data. A join combines rows from two tables based on a condition.

Click to reveal answer
beginner
Write a simple example of a query using EXISTS to find customers who have orders.
SELECT customer_name FROM customers c WHERE EXISTS (SELECT 1 FROM orders o WHERE o.customer_id = c.customer_id);
Click to reveal answer
beginner
Why is SELECT 1 often used inside an EXISTS subquery?

Because EXISTS only cares if rows exist, not the data itself. SELECT 1 is simple and efficient.

Click to reveal answer
intermediate
Can EXISTS subqueries improve performance compared to joins? Why or why not?

Yes, sometimes. EXISTS stops searching as soon as it finds a matching row, which can be faster than joining all rows.

Click to reveal answer
What does the EXISTS keyword check in a SQL query?
AIf the main query has any rows
BIf the subquery returns any rows
CIf the subquery returns a specific column value
DIf the tables are joined correctly
Which of the following is a valid use of EXISTS?
ASELECT * FROM table WHERE EXISTS (SELECT 1 FROM other_table WHERE condition);
BSELECT * FROM table WHERE EXISTS = 5;
CSELECT * FROM table WHERE EXISTS table.column;
DSELECT * FROM table WHERE EXISTS (table.column = 1);
What will this query return?
SELECT name FROM students s WHERE EXISTS (SELECT 1 FROM enrollments e WHERE e.student_id = s.id);
AStudents who have at least one enrollment
BAll students regardless of enrollment
CEnrollments without students
DStudents with no enrollments
Why might SELECT 1 be preferred inside an EXISTS subquery?
ABecause it counts the rows
BBecause it returns the first row only
CBecause <strong>EXISTS</strong> ignores the selected columns
DBecause it filters rows
Which is true about EXISTS subqueries?
AThey return all rows from the subquery
BThey always return false
CThey join tables like INNER JOIN
DThey return true if the subquery has any rows
Explain how the EXISTS keyword works in SQL and give a simple example.
Think about checking if something exists rather than retrieving data.
You got /3 concepts.
    Describe a situation where using EXISTS might be better than using a JOIN.
    Consider when you only want to know if related data exists.
    You got /3 concepts.

      Practice

      (1/5)
      1. What does the EXISTS keyword do in a SQL query?
      easy
      A. Checks if a subquery returns any rows and returns true or false
      B. Counts the total number of rows in a table
      C. Joins two tables based on a condition
      D. Deletes rows from a table

      Solution

      1. Step 1: Understand the purpose of EXISTS

        The EXISTS keyword is used to check if a subquery returns any rows. It returns true if there is at least one row, otherwise false.
      2. Step 2: Compare with other options

        Counting rows, joining tables, or deleting rows are different SQL operations unrelated to EXISTS.
      3. Final Answer:

        Checks if a subquery returns any rows and returns true or false -> Option A
      4. Quick Check:

        EXISTS = true if subquery has rows [OK]
      Hint: EXISTS means: 'Is there at least one row?' [OK]
      Common Mistakes:
      • Confusing EXISTS with COUNT
      • Thinking EXISTS joins tables
      • Assuming EXISTS deletes data
      2. Which of the following is the correct syntax to use EXISTS in a WHERE clause?
      easy
      A. WHERE EXISTS IN (SELECT * FROM orders WHERE customer_id = customers.id)
      B. WHERE EXISTS SELECT * FROM orders WHERE customer_id = customers.id
      C. WHERE EXISTS (SELECT * FROM orders WHERE customer_id = customers.id)
      D. WHERE EXISTS = (SELECT * FROM orders WHERE customer_id = customers.id)

      Solution

      1. Step 1: Check correct EXISTS syntax

        The correct syntax requires EXISTS followed by a subquery enclosed in parentheses.
      2. Step 2: Validate each option

        WHERE EXISTS (SELECT * FROM orders WHERE customer_id = customers.id) uses parentheses correctly. The other options have syntax errors or incorrect keywords.
      3. Final Answer:

        WHERE EXISTS (SELECT * FROM orders WHERE customer_id = customers.id) -> Option C
      4. Quick Check:

        EXISTS needs parentheses around subquery [OK]
      Hint: EXISTS always followed by parentheses with a subquery [OK]
      Common Mistakes:
      • Omitting parentheses after EXISTS
      • Using '=' or 'IN' with EXISTS
      • Writing subquery outside parentheses
      3. Given tables customers(id, name) and orders(id, customer_id), what does this query return?
      SELECT name FROM customers WHERE EXISTS (SELECT 1 FROM orders WHERE orders.customer_id = customers.id);
      medium
      A. All customers including those without orders
      B. All customers who have placed at least one order
      C. All orders with customer names
      D. An error because of invalid subquery

      Solution

      1. Step 1: Understand the EXISTS subquery

        The subquery checks if there is at least one order with customer_id matching the customer's id.
      2. Step 2: Determine the main query result

        The main query selects customer names only if the subquery returns rows, meaning the customer has orders.
      3. Final Answer:

        All customers who have placed at least one order -> Option B
      4. Quick Check:

        EXISTS filters customers with orders [OK]
      Hint: EXISTS filters rows having matching related rows [OK]
      Common Mistakes:
      • Thinking it returns all customers
      • Confusing with JOIN returning orders
      • Assuming syntax error in subquery
      4. Identify the error in this query:
      SELECT id FROM customers WHERE EXISTS SELECT * FROM orders WHERE orders.customer_id = customers.id;
      medium
      A. Incorrect table alias usage
      B. Using SELECT * instead of SELECT 1 in EXISTS
      C. Missing WHERE clause in subquery
      D. Missing parentheses around the subquery after EXISTS

      Solution

      1. Step 1: Check EXISTS syntax

        The EXISTS keyword must be followed by a subquery enclosed in parentheses.
      2. Step 2: Identify the error in the query

        The query misses parentheses around the subquery, causing a syntax error.
      3. Final Answer:

        Missing parentheses around the subquery after EXISTS -> Option D
      4. Quick Check:

        EXISTS requires parentheses around subquery [OK]
      Hint: Always put parentheses after EXISTS [OK]
      Common Mistakes:
      • Omitting parentheses after EXISTS
      • Thinking SELECT * is invalid in EXISTS
      • Confusing alias usage
      5. You want to find all customers who have placed orders only in the last 30 days. Which query correctly uses EXISTS to achieve this?
      A) SELECT name FROM customers WHERE EXISTS (SELECT 1 FROM orders WHERE orders.customer_id = customers.id AND order_date >= CURRENT_DATE - INTERVAL '30 days');
      B) SELECT name FROM customers WHERE EXISTS (SELECT 1 FROM orders WHERE orders.customer_id = customers.id AND order_date <= CURRENT_DATE - INTERVAL '30 days');
      C) SELECT name FROM customers WHERE EXISTS (SELECT 1 FROM orders WHERE orders.customer_id = customers.id);
      D) SELECT name FROM customers WHERE EXISTS (SELECT 1 FROM orders WHERE order_date >= CURRENT_DATE - INTERVAL '30 days');
      hard
      A. Select customers with orders in last 30 days using correct date filter
      B. Select customers with orders older than 30 days
      C. Select customers with any orders regardless of date
      D. Select customers if any order in last 30 days ignoring customer link

      Solution

      1. Step 1: Understand the date filter requirement

        We want customers with orders placed in the last 30 days, so the order date must be >= current date minus 30 days.
      2. Step 2: Analyze each query option

        Select customers with orders in last 30 days using correct date filter correctly filters orders by customer and date. Select customers with orders older than 30 days filters orders older than 30 days. Select customers with any orders regardless of date ignores date. Select customers if any order in last 30 days ignoring customer link ignores customer link.
      3. Final Answer:

        Select customers with orders in last 30 days using correct date filter -> Option A
      4. Quick Check:

        EXISTS with date filter and customer match [OK]
      Hint: Add date condition inside EXISTS subquery with customer match [OK]
      Common Mistakes:
      • Using wrong date comparison operator
      • Forgetting to link orders to customers
      • Filtering orders without customer condition
      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