Operador IN en PostgreSQL

Utilizamos el operador IN en PostgreSQL en el where para comprobar si el valor de un campo se encuentra en una lista de valores.

Sintaxis

La sintaxis del operador IN es la siguiente:

campo in (valor1, valor2, valorN)

Se puede usar IN junto a una lista de valores escrito por nosotros o también puede usar el operador IN para compararlo con el resultado de una instrucción select como la siguiente:

campo in (select campo from tabla)

Puedes combinar el operador IN junto al NOT para indicar que el valor del campo no debe contener algún valor de la lista de valores:

campo not in (select campo from tabla)

Ejemplos

En el siguiente ejemplo puedes utilizamos el operador IN para mostrar solo aquellos empleados que su sueldo este en la lista de valores escrita:

select *
from empleados
where sueldo in (60000, 70000, 80000);
Operador IN en PostgreSQL

En este otro ejemplo puedes observar como le indicamos que debe mostrarnos los empleados donde su sueldo este en la lista de valores que devuelve la subconsulta. La subconsulta nos devuelve los sueldos mayores de 50000.

select *
from empleados
where sueldo in (select sueldo
		from empleados
		where sueldo > 50000);

Ahora le vamos a indicar que queremos aquellos empleados donde el valor del campo sueldo no esté en la lista de valores:

select *
from empleados
where sueldo not in (70000, 80000);

Existe una alternativa a usar NOT IN, puedes usar los operadores relacionales <> como se muestra en el siguiente ejemplo:

select *
from empleados
where nombre <> 'Miguel Troyano'
and nombre <> 'Ismael Troyano';

Ejemplo completo

Copia y pega el siguiente código en tu consola de PostgreSQL y realiza paso a paso leyendo los comentarios:

-- Borramos la tabla si existe
drop table if exists empleados;

-- Creamos la tabla
create table empleados
(
    id_empleado numeric(2,0),
    id_departamento numeric(2,0),
    nombre character varying(50),
    puesto character varying(50),
    sueldo integer
);

-- Insertamos valores
insert into empleados
values (1,1,'Miguel Troyano','Analista',60000),
       (2,1,'Ismael Troyano','Analista',60000),
	   (3,1,'Jose Troyano','Director',80000),
	   (4,1,'Pilar Redondo','Directora',80000);

-- Mostramos los empleados donde su sueldo sea
-- 60000 y 70000 o 80000
select *
from empleados
where sueldo in (60000, 70000, 80000);

-- Mostramos los empleados donde su sueldo sea
-- igual que algún valor de la subconsulta
select *
from empleados
where sueldo in (select sueldo
				 from empleados
				 where sueldo > 50000);

-- Mostramos los empleados donde su sueldo no sea
-- ni 70000 ni 80000
select *
from empleados
where sueldo not in (70000, 80000);

-- Mostramos los empleados donde su nombre no sea
-- Miguel e Ismael sin usar NOT IN
select *
from empleados
where nombre <> 'Miguel Troyano'
and nombre <> 'Ismael Troyano';

Escribir un comentario

Este sitio está protegido por reCAPTCHA y se aplican la política de privacidad y los términos de servicio de Google.