El operador IN
permite verificar si un valor coincide con algún otro en una lista de valores.
Aquí está la sintaxis básica del operador "IN":
valor IN (valor1,valor2,...)
El operador "IN" devuelve verdadero si el "valor" es igual a cualquier valor de la lista, como "valor1" y "valor2".
La lista de valores puede ser una lista de valores literales que incluyen números y cadenas.
Además de los valores literales, el operador "IN" también acepta una lista de valores devueltos por una consulta.
Funcionalmente, el operador IN
equivale a combinar múltiples expresiones booleanas con los operadores OR:
valor = valor1 OR valor = valor2 OR ...
Ejemplos del operador IN¶
Usaremos la tabla film
de la base de datos de muestra:
Uso del operador IN de PostgreSQL con una lista de números¶
El siguiente ejemplo utiliza el operador IN
para recuperar información sobre la película con id 1, 2 y 3:
SELECT
film_id,
title
FROM
film
WHERE
film_id in (1, 2, 3);Code language: SQL (Structured Query Language) (sql)
Salida:
film_id | title
---------+------------------
1 | Academy Dinosaur
2 | Ace Goldfinger
3 | Adaptation Holes
(3 rows)
La siguiente sentencia utiliza los operadores igual (=
) y OR
en lugar del operador IN
, lo que equivale a la consulta anterior:
SELECT
film_id,
title
FROM
film
WHERE
film_id = 1
OR film_id = 2
OR film_id = 3;
La consulta que utiliza el operador IN
es más corta y más legible que la consulta que utiliza operadores iguales (=
) y OR
.
Además, PostgreSQL ejecuta la consulta con el operador IN
mucho más rápido que la misma consulta que utiliza una lista de operadores OR
.
Uso del operador IN de PostgreSQL con una lista de cadenas¶
Utilizaremos la tabla actor
de la base de datos de ejemplo:
El siguiente ejemplo utiliza el operador IN
para encontrar los actores que tienen el apellido en la lista 'Allen'
, 'Chase'
y 'Davis'
:
SELECT
first_name,
last_name
FROM
actor
WHERE
last_name IN ('Allen', 'Chase', 'Davis')
ORDER BY
last_name;
Salida:
first_name | last_name
------------+-----------
Meryl | Allen
Cuba | Allen
Kim | Allen
Jon | Chase
Ed | Chase
Susan | Davis
Jennifer | Davis
Susan | Davis
(8 rows)
Uso del operador IN de PostgreSQL con una lista de fechas¶
La siguiente sentencia utiliza el operador IN para encontrar pagos cuyas fechas de pago se encuentren en una lista de fechas: 2007-02-15
y 2007-02-16
:
SELECT
payment_id,
amount,
payment_date
FROM
payment
WHERE
payment_date::date IN ('2007-02-15', '2007-02-16');
Salida:
payment_id | amount | payment_date
------------+--------+----------------------------
17503 | 7.99 | 2007-02-15 22:25:46.996577
17504 | 1.99 | 2007-02-16 17:23:14.996577
17505 | 7.99 | 2007-02-16 22:41:45.996577
17512 | 4.99 | 2007-02-16 00:10:50.996577
...
En este ejemplo, la columna payment_date
tiene el tipo timestamp
que consta de partes de fecha y hora.
Para hacer coincidir los valores de la columna payment_date
con una lista de fechas, debe convertirlos en valores de fecha que sólo contengan la parte de fecha.
Para ello, utilice el operador cast ::
payment_date::date
Por ejemplo, si el valor del timestamp es 2007-02-15 22:25:46.996577
, el operador cast ::
lo convertirá a 2007-02-15
.
Operador NOT IN de PostgreSQL¶
Para negar el operador IN
, se utiliza el operador NOT IN
. Esta es la sintaxis básica del operador NOT IN
:
value NOT IN (value1, value2, ...)Code language: SQL (Structured Query Language) (sql)
El operador NOT IN
devuelve true
si el value
no es igual a ningún valor de la lista como value1
y value2
; en caso contrario, el operador NOT IN
devuelve false
.
El operador NOT IN
equivale a una combinación de varias expresiones booleanas con los operadores AND:
value <> value1 AND value <> value2 AND ...
Ejemplo de operador NOT IN de PostgreSQL¶
El siguiente ejemplo utiliza el operador NOT IN
para recuperar películas cuyo id no sea 1, 2 o 3:
SELECT
film_id,
title
FROM
film
WHERE
film_id NOT IN (1, 2, 3)
ORDER BY
film_id;
Salida:
film_id | title
---------+-----------------------------
4 | Affair Prejudice
5 | African Egg
6 | Agent Truman
7 | Airplane Sierra
8 | Airport Pollock
...
La siguiente consulta recupera el mismo conjunto de datos pero utiliza los operadores no igual (<>
) y AND
:
SELECT
film_id,
title
FROM
film
WHERE
film_id <> 1
AND film_id <> 2
AND film_id <> 3
ORDER BY
film_id;
Resumen¶
- Utilice el operador
IN
para comprobar si un valor coincide con cualquier valor de una lista de valores. - Utilice el operador
NOT
para negar el operadorIN
.