🧠 What is EXISTS
?
EXISTS
is a logical operator in SQL that checks whether a subquery returns any rows.
- If the subquery returns at least one row,
EXISTS
evaluates to TRUE. - If the subquery returns no rows,
EXISTS
evaluates to FALSE.
It’s often used in a WHERE
clause to test for the existence of related data.
🧩 Syntax
SELECT column_name(s)
FROM table_name
WHERE EXISTS (
SELECT 1
FROM other_table
WHERE condition
);
- The subquery can be any query that returns rows.
- The
SELECT 1
inside is conventional — the actual column or value doesn’t matter, sinceEXISTS
only checks for row existence.
📘 Example 1: Basic Use
Suppose you have two tables:
Customers
CustomerID | CustomerName |
---|---|
1 | Alice |
2 | Bob |
3 | Carol |
Orders
OrderID | CustomerID | Amount |
---|---|---|
101 | 1 | 500 |
102 | 3 | 300 |
Now, find customers who have placed at least one order.
SELECT CustomerName
FROM Customers c
WHERE EXISTS (
SELECT 1
FROM Orders o
WHERE o.CustomerID = c.CustomerID
);
✅ Result:
CustomerName |
---|
Alice |
Carol |
(Bob has no orders, so he’s excluded.)
📗 Example 2: Using NOT EXISTS
Find customers who have never placed an order:
SELECT CustomerName
FROM Customers c
WHERE NOT EXISTS (
SELECT 1
FROM Orders o
WHERE o.CustomerID = c.CustomerID
);
✅ Result:
CustomerName |
---|
Bob |
📙 Example 3: Correlated Subquery with Condition
Find customers who have placed orders greater than $400:
SELECT CustomerName
FROM Customers c
WHERE EXISTS (
SELECT 1
FROM Orders o
WHERE o.CustomerID = c.CustomerID
AND o.Amount > 400
);
✅ Result:
CustomerName |
---|
Alice |
⚖️ EXISTS
vs IN
While both can test membership, they differ:
EXISTS
stops searching once it finds a match (efficient for large datasets).IN
often works better when you have a small, fixed list of values.
Example equivalence:
-- Using IN
SELECT CustomerName
FROM Customers
WHERE CustomerID IN (SELECT CustomerID FROM Orders);
-- Using EXISTS (equivalent)
SELECT CustomerName
FROM Customers c
WHERE EXISTS (SELECT 1 FROM Orders o WHERE o.CustomerID = c.CustomerID);