46 - Cláusula limit del comando select.


Problema:

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(40) 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.




Retornar