Guía 20- Otros operadores relacionales (between - in)
Hemos visto los operadores relacionales:
= (igual), <> (distinto), > (mayor), < (menor), >= (mayor o
igual), <= (menor o igual), is null/is not null (si un valor es NULL o
no).
Existen otros que simplifican algunas consultas:
Para recuperar de nuestra tabla "libros" los registros que tienen
precio mayor o igual a 20 y menor o igual a 40, usamos 2
condiciones unidas por el operador lógico "and":
select * from libros
where precio>=20 and precio<=40;
Podemos usar "between":
select * from libros
where precio between 20 and 40;
"between" significa "entre". Averiguamos si el valor de un
campo dado (precio) está entre los valores mínimo y máximo
especificados (20 y 40 respectivamente).
Si agregamos el operador "not" antes de "between" el
resultado se invierte.
Para recuperar los libros cuyo autor sea 'Paenza' o 'Borges'
usamos 2 condiciones:
select * from libros
where autor='Borges' or autor='Paenza';
Podemos usar "in":
select * from libros
where autor in('Borges','Paenza');
Con "in" averiguamos si el valor de un campo dado (autor)
está incluido en la lista de valores especificada (en este caso,
2 cadenas).
Para recuperar los libros cuyo autor no sea 'Paenza' ni 'Borges'
usamos:
select * from libros where autor<>'Borges' and
autor<>'Paenza';
También podemos usar "in" :
select * from libros
where autor not in ('Borges','Paenza');
Con "in" averiguamos si el valor del campo está incluido en la
lista, con "not" antecediendo la condición, invertimos el
resultado.
Ingresemos al programa "Workbench" y ejecutemos el
siguiente bloque de instrucciones SQL para utilizar los
operadores relacionales 'between' y 'in':
drop table if exists libros;
create table libros(
codigo int unsigned auto_increment,
titulo varchar(40),
autor varchar(30),
editorial varchar(15),
precio decimal(5,2) unsigned,
primary key(codigo)
);
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);
select * from libros
where precio>=20 and
precio<=40;
select * from libros
where precio between 20 and 40;
select * from libros
where autor='Borges' or
autor='Paenza';
select * from libros
where autor in('Borges','Paenza');
select * from libros
where autor<>'Borges' and
autor<>'Paenza';
select * from libros
where autor not in ('Borges','Paenza');
Que nos genera una salida similar a esta:
Problema:
Trabaje con la tabla llamada "medicamentos" de una
farmacia.
1- Elimine la tabla, si existe.
2- Cree la tabla con la siguiente estructura:
create table medicamentos(
codigo int unsigned auto_increment,
nombre varchar(20),
laboratorio varchar(20),
precio decimal(5,2) unsigned,
cantidad int unsigned,
primary key(codigo)
);
3- Visualice la estructura de la tabla "medicamentos".
4- Ingrese los siguientes registros:
insert into medicamentos
(nombre,laboratorio,precio,cantidad)
values('Sertal','Roche',5.2,100);
insert into medicamentos
(nombre,laboratorio,precio,cantidad)
values('Buscapina','Roche',4.10,200);
insert into medicamentos
(nombre,laboratorio,precio,cantidad)
values('Amoxidal 500','Bayer',15.60,100);
insert into medicamentos
(nombre,laboratorio,precio,cantidad)
values('Paracetamol 500','Bago',1.90,200);
insert into medicamentos
(nombre,laboratorio,precio,cantidad)
values('Bayaspirina','Bayer',2.10,150);
insert into medicamentos
(nombre,laboratorio,precio,cantidad)
values('Amoxidal jarabe','Bayer',5.10,250);
5- Recupere los nombres y precios de los medicamentos cuyo
precio esté entre 5 y 15:
select nombre,precio from medicamentos
where precio between 5 and 15;
6- Seleccione los registros cuyo laboratorio sea "Bayer" o
"Bago":
select * from medicamentos
where laboratorio in ('Bayer','Bago');
7- Elimine los registros cuya cantidad esté entre 100 y 200:
delete from medicamentos
where cantidad between 100 and 200;
Otros problemas:
Una concesionaria de autos vende autos usados y almacena
la información en una tabla
llamada "autos".
1- Elimine la tabla "autos" si existe.
2- Cree la tabla con la siguiente estructura:
create table autos(
patente char(6),
marca varchar(20),
modelo char(4),
precio decimal(8,2) unsigned,
primary key(patente)
);
3- Ingrese los siguientes registros:
insert into autos(patente,marca,modelo,precio)
values('ACD123','Fiat 128','1970',15000);
insert into autos(patente,marca,modelo,precio)
values('ACG234','Renault 11','1990',40000);
insert into autos(patente,marca,modelo,precio)
values('BCD333','Peugeot 505','1990',80000);
insert into autos(patente,marca,modelo,precio)
values('GCD123','Renault Clio','1990',70000);
insert into autos(patente,marca,modelo,precio)
values('BCC333','Renault Megane','1998',95000);
insert into autos(patente,marca,modelo,precio)
values('BVF543','Fiat 128','1975',20000);
4- Seleccione todos los autos cuyo año sea '1970' o '1975'
usando el operador "in":
select * from autos
where modelo in ('1970','1975');
5- Seleccione todos los autos cuyo precio esté entre 50000 y
100000:
select * from autos
where precio between 50000 and 100000;