August 1, 2023
Summary: in this tutorial, you will learn how to use the PostgreSQL IN operator in the WHERE clause to check if a value matches any value in a list.
Table of Contents
PostgreSQL IN operator syntax
You use IN operator in the WHERE clause to check if a value matches any value in a list of values.
The syntax of the IN operator is as follows:
value IN (value1,value2,...)
The IN operator returns true if the value matches any value in the list i.e., value1 , value2 , …
The list of values can be a list of literal values such as numbers, strings or a result of a SELECT statement like this:
value IN (SELECT column_name FROM table_name);
The query inside the parentheses is called a subquery, which is a query nested inside another query. Note that you will learn more about the subquery in the subsequent tutorial
PostgreSQL IN operator examples
Suppose you want to know the rental information of customer id 1 and 2, you can use the IN operator in the WHERE clause as follows:
SELECT customer_id,
rental_id,
return_date
FROM
rental
WHERE
customer_id IN (1, 2)
ORDER BY
return_date DESC;

The following query uses the equal (=) and OR operators instead of the IN operator. It is equivalent to the query above:
SELECT
rental_id,
customer_id,
return_date
FROM
rental
WHERE
customer_id = 1 OR customer_id = 2
ORDER BY
return_date DESC;
The query that uses the IN operator is shorter and more readable than the query that uses equal (=) and OR operators. In addition, PostgreSQL executes the query with the IN operator much faster than the same query that uses a list of OR operators.
PostgreSQL NOT IN operator
You can combine the IN operator with the NOT operator to select rows whose values do not match the values in the list.
For example, the following statement finds all rentals with the customer id is not 1 or 2.
SELECT
customer_id,
rental_id,
return_date
FROM
rental
WHERE
customer_id NOT IN (1, 2);

Similar to the IN operator, you can use the not equal (<>) and AND operators to write the NOT IN operator:
SELECT
customer_id,
rental_id,
return_date
FROM
rental
WHERE
customer_id <> 1
AND customer_id <> 2;
This query returns the same output as above query that use the NOT IN operator.
PostgreSQL IN with a subquery
The following query returns a list of customer ids from the rental table with the return date is 2005-05-27:
SELECT customer_id
FROM rental
WHERE CAST (return_date AS DATE) = '2005-05-27'
ORDER BY customer_id;

Because this query returns a list of values, you can use it as the input of the IN operator like this:
SELECT
customer_id,
first_name,
last_name
FROM
customer
WHERE
customer_id IN (
SELECT customer_id
FROM rental
WHERE CAST (return_date AS DATE) = '2005-05-27'
)
ORDER BY customer_id;

For more information on the subquery, check it out the subquery tutorial.
In this tutorial, you have learned how to use the PostgreSQL IN operator to check if a value matches any value in a list of values.