46 - Cláusula limit del comando select. |
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.