jueves, 1 de noviembre de 2012

47 - Recuperación de registros en forma aleatoria(rand)


Una librería que tiene almacenados los datos de sus libros en una tabla llamada "libros" quiere donar a una institución 5 libros tomados al azar.

Para recuperar de una tabla registros aleatorios se puede utilizar la función "rand()" combinada con "order by" y "limit":

 select * from libros
  order by rand()
  limit 5;

Nos devuelve 5 registros tomados al azar de la tabla "libros".

Podemos ejecutar la sentencia anterior varias veces seguidas y veremos que los registros recuperados son diferentes en cada ocasión.


PROBLEMA RESUELTO:


Trabajamos con la tabla "libros" en el cual una librería guarda los datos de sus libros.

Eliminamos la tabla "libros" si existe:

 drop table if exists libros;

Creamos la tabla:

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

Agregamos varios registros:

 insert into libros values(1,'El aleph','Borges','Planeta',23.5);
 insert into libros values(2,'Cervantes y el quijote','Borges','Paidos',33.5);
 insert into libros values(3,'Alicia a traves del espejo','Lewis Carroll','Planeta',15);
 insert into libros values(4,'Alicia en el pais de las maravillas','Lewis Carroll','Planeta',18);
 insert into libros values(5,'Martin Fierro','Jose Hernandez','Planeta',34.6);
 insert into libros values(6,'Martin Fierro','Jose Hernandez','Emece',45);
 insert into libros values(7,'Aprenda PHP','Mario Molina','Planeta',55);
 insert into libros values(8,'Java en 10 minutos','Mario Molina','Planeta',45);
 insert into libros values(9,'Matematica estas ahi','Paenza','Planeta',12.5);

la librería quiere tomar 5 libros al azar para donarlos a una 
institución.

Para recuperar de la tabla "libros" registros aleatorios utilizamos la función "rand()" combinada con "order by" y "limit":

 select * from libros
  order by rand()
  limit 5;

Nos devuelve los datos de 5 libros tomados al azar de la tabla "libros". 
Podemos ejecutar la sentencia anterior varias veces seguidas y veremos que los 
registros recuperados son diferentes en cada ocasión:

 select * from libros order by rand() limit 5;
 select * from libros order by rand() limit 5;
 select * from libros order by rand() limit 5;



PROBLEMA PROPUESTO:


Trabajamos con la tabla "alumnos" en el cual un instituto de enseñanza guarda los datos de sus alumnos.
Eliminamos la tabla "alumnos" si existe:

Creamos la tabla:
  create table alumnos(
  documento char(8) not null,
  nombre varchar(30),
  domicilio varchar(30),
  ciudad varchar(20),
  provincia varchar(20),
  primary key(documento)
 );
Agregamos varios registros:
 insert into alumnos values('22333444','Juan Perez','Colon 123','Cordoba','Cordoba');
 insert into alumnos values('23456789','Ana Acosta','Caseros 456','Cordoba','Cordoba');
 insert into alumnos values('24123123','Patricia Morales','Sucre 234','Villa del Rosario','Cordoba');
 insert into alumnos values('25000333','Jose Torres','Sarmiento 980','Carlos Paz','Cordoba');
 insert into alumnos values('26333444','Susana Molina','Avellaneda 234','Rosario','Santa Fe');
 insert into alumnos values('27987654','Marta Herrero','San Martin 356','Villa del Rosario','Cordoba');
 insert into alumnos values('28321321','Marcos Ferreyra','Urquiza 357','Cordoba','Cordoba');
 insert into alumnos values('30987464','Marta Perez','Rivadavia 234','Cordoba','Cordoba');

El instituto quiere tomar 3 alumnos al azar para que representen al instituto en una feria de ciencias. Para recuperar de una tabla registros aleatorios se puede utilizar la función "rand()" combinada con "order by" y "limit":
Nos devuelve los nombres y documentos de 3 alumnos tomados al azar de la tabla "alumnos". Podemos ejecutar la sentencia anterior varias veces seguidas y veremos que los registros recuperados son diferentes en cada ocasión:
 select documento,nombre from alumnos order by rand() limit 3;
 select documento,nombre from alumnos order by rand() limit 3;
 select documento,nombre from alumnos order by rand() limit 3;


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:

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- El comercio quiere tomar 2 artículos al azar para ofrecer una oferta especial haciendo un descuento. Seleccione 2 registros al azar de la tabla "articulos":
 
Ejecute la sentencia varias veces para verificar que los registros seleccionados son diferentes.



No hay comentarios:

Publicar un comentario