32 - Búsqueda de patrones (regexp)


Problema:
Trabaje con la tabla "agenda" que registra la información referente a sus amigos.

1- Elimine la tabla si existe.

2- Cree la tabla con la siguiente estructura:
 create table agenda(
  apellido varchar(30),
  nombre varchar(20) not null,
  domicilio varchar(30),
  telefono varchar(11),
  mail varchar(30)
 );

3- Ingrese los siguientes registros:
 insert into agenda values('Perez','Juan','Sarmiento 345','4334455','juancito@gmail.com');
 insert into agenda values('Garcia','Ana','Urquiza 367','4226677','anamariagarcia@hotmail.com');
 insert into agenda values('Lopez','Juan','Avellaneda 900',null,'juancitoLopez@gmail.com');
 insert into agenda values('Juarez','Mariana','Sucre 123','0525657687','marianaJuarez2@gmail.com');
 insert into agenda values('Molinari','Lucia','Peru 1254','4590987','molinarilucia@hotmail.com');
 insert into agenda values('Ferreyra','Patricia','Colon 1534','4585858',null);
 insert into agenda values('Perez','Susana','San Martin 333',null,null);
 insert into agenda values('Perez','Luis','Urquiza 
444','0354545256','perezluisalberto@hotmail.com');
 insert into agenda values('Lopez','Maria','Salta 314',null,'lopezmariayo@gmail.com');

4- Busque todos los mails que contengan la cadena "gmail":
 select *from agenda
  where mail regexp 'gmail';

5- Busque los nombres que no tienen "z" ni "g":
 select * from agenda
  where nombre not regexp '[zg]';

6- Busque los apellidos que tienen por lo menos una de las letras de la "v" hasta la "z" (v,w,x,y,z):
 select * from agenda
  where apellido regexp '[v-z]';

7- Seleccione los apellidos que terminen en "ez":
 select * from agenda
  where apellido regexp 'ez$';

8- Seleccione los apellidos, nombres y domicilios de los amigos cuyos apellidos contengan 2 letras "i":
 select apellido,nombre,domicilio from agenda
  where nombre regexp 'i.*i';

9- Seleccione los teléfonos que tengan 7 caracteres exactamente:
 select * from agenda
  where telefono regexp '^.......$';

10- Seleccione el nombre y mail de todos los amigos cuyos mails tengan al menos 20 caracteres:
 select nombre,mail from agenda
  where mail regexp '....................';



 

Otros problemas:
Un comercio que vende artículos de computación registra los datos de sus artículos en una tabla con 
ese nombre.

1- Elimine "articulos", si existe:
 drop table if exists articulos;

2- Cree la tabla, con la siguiente estructura:
create table articulos(
  codigo int unsigned auto_increment,
  nombre varchar(25) not null,
  descripcion varchar(30),
  precio decimal(6,2) unsigned,
  cantidad tinyint unsigned,
  primary key(codigo)
 );

3- Ingrese algunos registros:
 insert into articulos (nombre, descripcion, precio,cantidad)
  values ('impresora','Epson Stylus C45',400.80,20);
 insert into articulos (nombre, descripcion, precio,cantidad)
  values ('impresora','Epson Stylus C85',500,30);
 insert into articulos (nombre, descripcion, precio,cantidad)
  values ('monitor','Samsung 14',800,10);
 insert into articulos (nombre, descripcion, precio,cantidad)
  values ('teclado','ingles Biswal',100,50);
 insert into articulos (nombre, descripcion, precio,cantidad)
  values ('teclado','español Biswal',90,50);
 insert into articulos (nombre, descripcion, precio,cantidad)
  values ('impresora multifuncion','HP 1410',300,20);

4- Seleccione todos los artículos que comienzan con "impresora":
 select * from articulos
  where nombre regexp '^impresora';

5-Busque los artículos en los cuales el campo "descripcion" no tienen "H" ni "W":
 select * from articulos
  where descripcion not regexp '[hw]';

6- Seleccione las descripciones que contengan una letra "s" seguida de un caracter cualquiera y 
luego una "n":
 select * from articulos
  where descripcion regexp 's.n';

Retornar