PostgreSQL EXISTS Operator

PostgreSQL EXISTS Operator

The EXISTS operator in PostgreSQL is used to test whether a subquery returns any rows.
It returns TRUE if the subquery returns at least one row, otherwise FALSE.

🔹 EXISTS checks for existence, not actual values.


1️⃣ Basic EXISTS Syntax

SELECT column_name
FROM table_name
WHERE EXISTS (
SELECT 1
FROM another_table
WHERE condition
);

2️⃣ Simple EXISTS Example

Tables:

users

idname
1Amit
2Riya

orders

iduser_idamount
1011500

Query: find users who have placed at least one order.

SELECT name
FROM users u
WHERE EXISTS (
SELECT 1
FROM orders o
WHERE o.user_id = u.id
);

✔ Returns Amit only.


3️⃣ NOT EXISTS Example

Find users who have not placed any orders.

SELECT name
FROM users u
WHERE NOT EXISTS (
SELECT 1
FROM orders o
WHERE o.user_id = u.id
);

✔ Returns Riya.


4️⃣ EXISTS vs IN

Using IN

SELECT name
FROM users
WHERE id IN (SELECT user_id FROM orders);

Using EXISTS (Better for large data)

SELECT name
FROM users u
WHERE EXISTS (
SELECT 1 FROM orders o WHERE o.user_id = u.id
);

EXISTS stops checking once a match is found
✔ Safer when subquery contains NULLs


5️⃣ EXISTS with Multiple Conditions

SELECT name
FROM users u
WHERE EXISTS (
SELECT 1
FROM orders o
WHERE o.user_id = u.id
AND o.amount > 1000
);

✔ Users with high-value orders.


6️⃣ EXISTS with DELETE

DELETE FROM users u
WHERE EXISTS (
SELECT 1
FROM blacklist b
WHERE b.email = u.email
);

7️⃣ EXISTS with UPDATE

UPDATE products p
SET status = 'sold'
WHERE EXISTS (
SELECT 1
FROM orders o
WHERE o.product_id = p.id
);

8️⃣ EXISTS vs JOIN (Conceptual Difference)

EXISTSJOIN
Checks presenceCombines rows
Returns TRUE/FALSEReturns data
Faster for existence checkBetter for data retrieval

9️⃣ Common Mistakes

❌ Selecting columns inside EXISTS
✔ Use SELECT 1 or SELECT *

❌ Forgetting correlation condition
✔ Always link subquery with outer query


🔟 Best Practices

✔ Use EXISTS for existence checks
✔ Prefer EXISTS over IN for large tables
✔ Index columns used in EXISTS condition
✔ Use NOT EXISTS instead of LEFT JOIN IS NULL


Quick Summary

EXISTSat least one row exists
NOT EXISTSno rows exist

You may also like...