Tiempo de lectura:3 Minutos, 19 Segundos

En este articulo veremos los operadores lógicos en PostgreSQL (and, or y not). Hasta ahora hemos visto cómo realizar consultas con condiciones gracias al where y los operadores relacionales y ahora utilizaremos los operadores lógicos para establecer condiciones más complejas.

Operadores lógicos

Utilizamos los operadores lógicos para establecer más de una condición en el where y conseguir así consultas mas complejas.

Tipos de operadores

Disponemos de seis operadores relacionales en PostgreSQL:

OperadorFunción
andcondicion_1 and condicion_2 – se cumplen las dos condiciones
orcondicion_1 or condicion_2 – se cumple cualquiera de las dos condiciones
notnot condicion1 – no se cumple la condición

Operador lógico AND

Este operador se utiliza cuando queremos que se cumplan todas las condiciones. Observa este ejemplo como le indicamos que debe cumplir la condición de que el empleado sea igual a 1 y ademas el nombre debe empezar por Miguel:

select *
from empleados
where id_empleado = 1 and nombre like 'Miguel%';

Operador lógico OR

Utilizamos este operador cuando queremos que se cumpla cualquiera de las condiciones especificadas. Observa como en este ejemplo le indicamos que queremos todos los datos cuando el id_empleado es igual a o que su nombre empiece por Ismael:

select *
from empleados
where id_empleado = 1 or nombre like 'Ismael%';

Operador lógico NOT

Utilizamos este operador cuando queremos que no se cumpla la condición. Observa como en este ejemplo le indicamos que nos muestre todos los datos de aquellos empleados que su nombre no empiece por Ismael:

select *
from empleados
where not nombre like 'Ismael%';

Uso de parentesis

Cuando se tienen más de dos condiciones se deben utilizar paréntesis para establecer el orden tal y como hacemos con las operaciones matemáticas. Dicho de otro modo, todo lo que engloba un paréntesis lo considerara una única expresión.

En el siguiente ejemplo tenemos tres condiciones; que el id_empleado sea igual a tres, que su sueldo sea igual a 80000 o que su nombre empiece por Ismael. Esto nos devolverá dos registros:

select *
from empleados
where id_empleado=3 and sueldo = 80000 or nombre like 'Ismael%';

Ahora mira este otro ejemplo donde tenemos las mismas condiciones, pero al incluir los paréntesis nos devuelve un resultado diferente:

select *
from empleados
where id_empleado=3 and (sueldo = 80000 or nombre like 'Ismael%');

¿Por qué no nos devuelve lo mismo? Muy fácil, en el ejemplo anterior le estamos indicando que si o si el id_empleado tiene que ser igual a tres y una vez evaluado esta condición evalúa la que esta dentro del paréntesis y debe cumplir ademas de la anterior que su sueldo sea 80000 o su nombre comience por Ismael. En este caso se cumple que su sueldo es igual a 80000.

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 Troyano','Directora',80000);

-- Mostramos los empleados donde su id_empleado es uno
-- y su nombre comienza por Miguel
select *
from empleados
where id_empleado = 1 and nombre like 'Miguel%';

-- Mostramos los empleados donde su id_empleado es uno
-- o su nombre comienza por Ismael
select *
from empleados
where id_empleado = 1 or nombre like 'Ismael%';

-- Mostramos los empleados donde su id_empleado es tres
-- y su sueldo es 80000 o su nombre comienza por Ismael
select *
from empleados
where id_empleado=3 and sueldo = 80000 or nombre like 'Ismael%';

-- Mostramos los empleados donde su id_empleado es tres
-- y ademas, que su sueldo sea 80000 o su nombre comienza por Ismael
select *
from empleados
where id_empleado=3 and (sueldo = 80000 or nombre like 'Ismael%');

Deja una respuesta

Tu dirección de correo electrónico no será publicada.

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

Perfiles en Redes Sociales