jueves, 1 de noviembre de 2012

46 - Cláusula limit del comando select.


La cláusula "limit" se usa para restringir los registros que se retornan en una consulta "select".

Recibe 1 ó 2 argumentos numéricos enteros positivos; el primero indica el número del primer registro a retornar, el segundo, el número máximo de registros a retornar. El número de registro inicial es 0 (no 1).

Si el segundo argumento supera la cantidad de registros de la tabla, se limita hasta el último registro.

Ejemplo:

 select * from libros limit 0,4;

Muestra los primeros 4 registros, 0,1,2 y 3.

Si tipeamos:

 select * from libros limit 5,4;

recuperamos 4 registros, desde el 5 al 8.

Si se coloca un solo argumento, indica el máximo número de registros a retornar, comenzando desde 0.

Ejemplo:

 select * from libros limit 8;

Muestra los primeros 8 registros.

Para recuperar los registros desde cierto número hasta el final, se puede colocar un número grande para el segundo argumento:

 select * from libros limit 6,10000;

recupera los registros 7 al último.

"limit" puede combinarse con el comando "delete". Si queremos eliminar 2 registros de la tabla "libros"

Usamos:

 delete from libros
  limit 2;

Podemos ordenar los regitros por precio (por ejemplo) y borrar 2:

 delete from libros
  order by precio
  limit 2;

esta sentencia borrará los 2 primeros registros, es decir, los de precio más 
bajo.

Podemos emplear la cláusula "limit" para eliminar registros duplicados. Por ejemplo, continuamos con la tabla "libros" de una librería, ya hemos almacenado el libro "El aleph" de "Borges" de la editorial "Planeta", pero nos equivocamos y volvemos a ingresar el mismo libro, del mismo autor y editorial 2 veces más, es un error que no controla MySQL. Para eliminar el libro duplicado y que sólo quede un registro de él vemos cuántos tenemos:

 select * from libros
  where titulo='El aleph' and
  autor='Borges' and
  editorial='Planeta';

Luego eliminamos con "limit" la cantidad sobrante (tenemos 3 y queremos solo 
1):

 delete from libros
  where titulo='El aleph" and
  autor='Borges' and
  editorial='Planeta'
  limit 2;

Un mensaje nos muestra la cantidad de registros eliminados.

Es decir, con "limit" indicamos la cantidad a eliminar.

Veamos cuántos hay ahora:

 select * from libros
  where titulo='El aleph" and
  autor='Borges' and
  editorial='Planeta';

Sólo queda 1.


PROBLEMA RESUELTO:



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

Eliminamos la tabla si existe.

Creamos la tabla:

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

Agregamos algunos registros:

 insert into libros (titulo,autor,editorial,precio)
  values('El aleph','Borges','Planeta',15);
 insert into libros (titulo,autor,editorial,precio)
  values('Martin Fierro','Jose Hernandez','Emece',22.20);
 insert into libros (titulo,autor,editorial,precio)
  values('Antologia poetica','Borges','Planeta',40);
 insert into libros (titulo,autor,editorial,precio)
  values('Aprenda PHP','Mario Molina','Emece',18.20);
 insert into libros (titulo,autor,editorial,precio)
  values('Cervantes y el quijote','Borges','Paidos',36.40);
 insert into libros (titulo,autor,editorial,precio)
  values('Manual de PHP', 'J.C. Paez', 'Paidos',30.80);
 insert into libros (titulo,autor,editorial,precio)
  values('Harry Potter y la piedra filosofal','J.K. Rowling','Paidos',45.00);
 insert into libros (titulo,autor,editorial,precio)
  values('Harry Potter y la camara secreta','J.K. Rowling','Paidos',46.00);
 insert into libros (titulo,autor,editorial,precio)
  values('Alicia en el pais de las maravillas','Lewis Carroll','Paidos',null);

Para recuperar 4 libros desde el registro cero tipeamos:

 select * from libros limit 0,4;

Para recuperar 4 libros a partir del registro 5:

 select * from libros limit 5,4;

Si colocamos un solo argumento, éste indica el máximo número de registros a 
retornar, comenzando desde 0:

 select * from libros limit 8;

Muestra los primeros 8 registros.

Para recuperar los registros desde cierto número hasta el último, colocamos un número grande para el segundo argumento:

 select * from libros limit 6,10000;

Ordenamos por precio y combinamos "limit" con el comando "delete" para 
eliminar los 2 registros con precio más bajo:

 delete from libros
  order by precio
  limit 2;

se eliminaron los 2 registros con precio más bajo.

También podemos emplear la cláusula "limit" para eliminar registros duplicados. Por ejemplo: almacenamos el libro "El aleph" de "Borges" de la editorial "Planeta":

 insert into libros (titulo,autor,editorial,precio)
  values('El aleph','Borges','Planeta',15);

Pero nos equivocamos y volvemos a ingresar el mismo libro, del mismo autor y 
editorial 2 veces más (es un error que no controla MySQL):

 insert into libros (titulo,autor,editorial,precio)
  values('El aleph','Borges','Planeta',15);
 insert into libros (titulo,autor,editorial,precio)
  values('El aleph','Borges','Planeta',15);

Para eliminar el libro duplicado y que sólo quede un registro de él, vemos 
cuántos tenemos:

 select * from libros
  where titulo='El aleph" and
  autor='Borges' and
  editorial='Planeta';

Nos devuelve 3 registros.

Luego eliminamos con "limit" la cantidad sobrante (tenemos 3 y queremos sólo 1):

 delete from libros
  where titulo='El aleph" and
  autor='Borges' and
  editorial='Planeta'
  limit 2;

Un mensaje nos muestra la cantidad de registros eliminados.

Veamos cuántos hay ahora:

 select * from libros
  where titulo='El aleph" and
  autor='Borges' and
  editorial='Planeta';

Sólo queda 1.


PROBLEMA PROPUESTO:


Trabaje con la tabla "peliculas" de un video club que alquila películas en video.

1- Elimine la tabla, si existe.
- Créela con la siguiente estructura:
 -codigo (entero sin signo, autoincrementable),
 -titulo (cadena de 30), not null,
 -actor (cadena de 20),
 -duracion (entero sin signo no mayor a 200 aprox.),
 -clave primaria (codigo).

3- Ingrese 10 registros.

4- Realice una consulta limitando la salida a sólo 5 registros.

5- Muestre los registros desde el cero al 8 usando un solo argumento.

6- Muestre 3 registros a partir del 4.

7- Muestre los registros a partir del 2 hasta el final.



Otros problemas: 


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),
  index i_apellido (apellido)
 );

3- Ingrese 10 registros.

4- Realice una consulta limitando la salida a sólo 3 registros.

5- Muestre los registros desde el cero al 9 usando un solo argumento.

6- Muestre 5 registros a partir del 5.

7- Muestre los registros a partir del 7 hasta el final.





1 comentario: