Listado completo de tutoriales

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.

Servidor de MySQL instalado en forma local.

Ingresemos al programa "Workbench" y ejecutemos el siguiente bloque de instrucciones SQL:

drop table if exists libros;

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)
 );

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);

-- recuperar 4 libros desde el registro cero:
select * from libros limit 0,4;

-- recuperar 4 libros a partir del registro 5
select * from libros limit 5,4;

-- recuperar 8 libros desde el principio
select * from libros limit 8;

-- para recuperar 10000 registros o hasta el final de la tabla a partir
-- del registro 6
select * from libros limit 6,10000;

-- para eliminar los 2 registros con precio más bajo
delete from libros
  order by precio
  limit 2;

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);
insert into libros (titulo,autor,editorial,precio)
  values('El aleph','Borges','Planeta',15);

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

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

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

Genera una salida similar a esta:

MySQL limmit

Retornar