IN
Introduction to PostgreSQL IN operator
The IN
operator allows you to check whether a value matches any value in a list of values.
Here’s the basic syntax of the IN
operator
value IN (value1,value2,...)
The IN
operator returns true if the value
is equal to any value in the list such as value1
and value2
. The list of values can be a list of literal values including numbers and strings.
Using the PostgreSQL IN operator with a list of numbers
The following example uses the IN
operator to retrieve information about the film with id 1, 2, and 3
SELECT film_id, title
FROM film
WHERE film_id in (1, 2, 3);

The following statement uses the equal (=
) and OR
operators instead of the IN
operator, which is equivalent to the query above.
SELECT film_id, title
FROM film
WHERE
film_id = 1
OR film_id = 2
OR film_id = 3;
The query that uses the IN
operator is shorter and more readable than the query that uses equal (=
) and OR
operators. Additionally, PostgreSQL executes the query with the IN
operator much faster than the same query that uses a list of OR
operators.
Using the PostgreSQL IN operator with a list of strings
The following example uses the IN
operator to find the actors who have the last name in the list 'Allen'
, 'Chase'
, and 'Davis'
SELECT first_name, last_name
FROM actor
WHERE last_name IN ('Allen', 'Chase', 'Davis')
ORDER BY last_name;

Using the PostgreSQL IN operator with a list of dates
The following statement uses the IN operator to find payments whose payment dates are in a list of dates: 2007-02-15
and 2007-02-16
SELECT payment_id, amount, payment_date
FROM payment
WHERE payment_date::date IN ('2007-02-15', '2007-02-16');

PostgreSQL NOT IN operator
To negate the IN
operator, you use the NOT IN
operator. Here’s the basic syntax of the NOT IN
operator
value NOT IN (value1, value2, ...)
The NOT IN
operator returns true
if the value
is not equal to any value in the list such as value1
and value2
; otherwise, the NOT IN
operator returns false
.
The NOT IN
operator is equivalent to a combination of multiple boolean expressions with the AND operators
value <> value1 AND value <> value2 AND ...
The following example uses the NOT IN
operator to retrieve films whose id is not 1, 2, or 3,
SELECT
film_id,
title
FROM
film
WHERE
film_id NOT IN (1, 2, 3)
ORDER BY
film_id;
Output:
film_id | title
---------+-----------------------------
4 | Affair Prejudice
5 | African Egg
6 | Agent Truman
7 | Airplane Sierra
8 | Airport Pollock
...
The following query retrieves the same set of data but uses the not-equal (<>
) and AND
operators
SELECT
film_id,
title
FROM
film
WHERE
film_id <> 1
AND film_id <> 2
AND film_id <> 3
ORDER BY
film_id;
Last updated