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.
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: