29 - Operadores Lógicos (and - or - not)


Problema:

Trabajamos con la tabla "libros" de una librería.

Eliminamos la tabla, si existe.

Creamos la tabla con la siguiente estructura:

 create table libros(
  codigo int unsigned  auto_increment,
  titulo varchar(40),
  autor varchar(30),
  editorial varchar(15),
  precio decimal(5,2),
  primary key(codigo)
 );

Ingresamos algunos registros:

 insert into libros (titulo,autor,editorial,precio)
  values('El aleph','Borges','Planeta',15.50);
 insert into libros (titulo,autor,editorial,precio)
  values('Martin Fierro','Jose Hernandez','Emece',22.90);
 insert into libros (titulo,autor,editorial,precio)
  values('Martin Fierro','Jose Hernandez','Planeta',39);
 insert into libros (titulo,autor,editorial,precio)
  values('Aprenda PHP','Mario Molina','Emece',19.50);
 insert into libros (titulo,autor,editorial,precio)
  values('Cervantes y el quijote','Borges','Paidos',35.40);
 insert into libros (titulo,autor,editorial,precio)
  values('Matematica estas ahi', 'Paenza', 'Paidos',19);

Vamos a recuperar registros estableciendo 2 condiciones, necesitamos los operadores lógicos.

Para recuperar todos los registros cuyo autor sea igual a "Borges" y cuyo precio no supere los 20 pesos, tipeamos:

 select * from libros
  where autor='Borges' and
  precio<=20;

Muestra un registro, porque sólo uno cumple con ambas condiciones.

Seleccionamos los libros cuyo autor sea "Paenza" y/o cuya editorial sea "Planeta":

 select * from libros
  where autor='Paenza' or
  editorial='Planeta';

Muestra 3 registros, 1 de ellos cumple con la primera condición, 1 con la segunda y 1 con ambas.

Queremos ver los libros cuyo autor sea "Borges" o cuya editorial sea "Planeta":

 select * from libros
  where (autor='Borges') xor
  (editorial='Planeta');

Muestra 2 registros, 1 cumple con la primera condición y 1 con la segunda. Los registros que cumplen con ambas condiciones no fueron seleccionados porque usamos el operador "xor".

Establecemos la condición que la editorial sea igual a "Planeta", y recuperamos con un "select" los libros que no cumplan la condición:

 select * from libros
  where not (editorial='Planeta');

Muestra 4 registros que NO cumplen con la condición.

Los paréntesis sirven para establecer el orden de prioridad de evaluación de las condiciones.

Analicemos los siguientes ejemplos, estas sentencias devuelven resultados distintos:

 select * from libros
  where (autor='Borges') or
  (editorial='Paidos' and precio<20);
 select * from libros
  where (autor='Borges' or editorial='Paidos')
  and (precio<20);

En el primer caso selecciona primero los libros de "Paidos" con precio<20 y también los de "Borges", sin considerar el precio.

En el segundo caso selecciona los libros de "Borges" y/o "Paidos", si tienen precio<20.

El libro con código 5, no aparece en la segunda consulta porque el precio no es <20; si en la primera porque la condición referida al precio afecta a los libros de "Paidos".




Retornar