Curriculum
In this tutorial, you will learn how to use the SQL Server EXISTS operator in the condition to test for the existence of rows in a subquery.
EXISTS operator overviewThe EXISTS operator is a logical operator that allows you to check whether a subquery returns any row. The EXISTS operator returns TRUE if the subquery returns one or more rows.
The following shows the syntax of the SQL Server EXISTS operator:
EXISTS ( subquery)
In this syntax, the subquery is a SELECT statement only. As soon as the subquery returns rows, the EXISTS operator returns TRUE and stop processing immediately.
Note that even though the subquery returns a NULL value, the EXISTS operator is still evaluated to TRUE.
EXISTS operator examplesLet’s take some examples to understand how EXISTS operator works.
EXISTS with a subquery returns NULL exampleThe following example returns all rows from the customers table:
SELECT
customer_id,
first_name,
last_name
FROM
sales.customers
WHERE
EXISTS (SELECT NULL)
ORDER BY
first_name,
last_name;
In this example, the subquery returned a result set that contains NULL which causes the EXISTS operator to evaluate to TRUE. Therefore, the whole query returns all rows from the customers table.
EXISTS with a correlated subquery exampleThe following example finds all customers who have placed more than two orders:
SELECT
customer_id,
first_name,
last_name
FROM
sales.customers c
WHERE
EXISTS (
SELECT
COUNT (*)
FROM
sales.orders o
WHERE
customer_id = c.customer_id
GROUP BY
customer_id
HAVING
COUNT (*) > 2
)
ORDER BY
first_name,
last_name;
In this example, we had a correlated subquery that returns customers who place more than two orders.
If the number of orders placed by the customer is less than or equal to two, the subquery returns an empty result set that causes the EXISTS operator to evaluate to FALSE.
Based on the result of the EXISTS operator, the customer will be included in the result set.
EXISTS vs. IN exampleThe following statement uses the IN operator to find the orders of the customers from San Jose:
SELECT
*
FROM
sales.orders
WHERE
customer_id IN (
SELECT
customer_id
FROM
sales.customers
WHERE
city = 'San Jose'
)
ORDER BY
customer_id,
order_date;
The following statement uses the EXISTS operator that returns the same result:
SELECT
*
FROM
sales.orders o
WHERE
EXISTS (
SELECT
customer_id
FROM
sales.customers c
WHERE
o.customer_id = c.customer_id
AND city = 'San Jose'
)
ORDER BY
o.customer_id,
order_date;
EXISTS vs. JOINThe EXISTS operator returns TRUE or FALSE while the JOIN clause returns rows from another table.
You use the EXISTS operator to test if a subquery returns any row and short circuits as soon as it does. On the other hand, you use JOIN to extend the result set by combining it with the columns from related tables.
In practice, you use the EXISTS when you need to check the existence of rows from related tables without returning data from them.