PostgreSQL EXISTS
The EXISTS
operator checks for the existence of rows returned by a subquery. It returns TRUE
if the subquery returns at least one row and FALSE
otherwise.
Key Topics
1. Basic Usage
SELECT c.customer_id, c.first_name
FROM customers c
WHERE EXISTS (
SELECT 1
FROM orders o
WHERE o.customer_id = c.customer_id
);
This returns customers who have at least one order.
2. Using NOT EXISTS
Use NOT EXISTS
to find rows with no matching subquery result:
SELECT c.customer_id, c.first_name
FROM customers c
WHERE NOT EXISTS (
SELECT 1
FROM orders o
WHERE o.customer_id = c.customer_id
);
This finds customers without any orders.
Best Practices
- Use
EXISTS
for efficient subqueries; PostgreSQL can optimize for early exit once a match is found. - Be mindful of subquery complexity and indexing for best performance.
Key Takeaways
EXISTS
checks if a subquery returns any row.NOT EXISTS
ensures no subquery rows exist for the condition.