Listado completo de tutoriales
28 - Ordenar registros (order by) |
Podemos ordenar el resultado de un "select" para que los registros se muestren ordenados por algún campo, para ello usamos la cláusula "order by".
La sintaxis básica es la siguiente:
select * from NOMBRETABLA order by CAMPO;
Por ejemplo, recuperamos los registros de la tabla "libros" ordenados por el título:
select *from libros order by titulo;
Aparecen los registros ordenados alfabéticamente por el campo especificado.
También podemos colocar el número de orden del campo por el que queremos que se ordene en lugar de su nombre, es decir, referenciar a los campos por su posición en la lista de selección. Por ejemplo, queremos el resultado del "select" ordenado por "precio":
select titulo,autor,precio from libros order by 3;
Por defecto, si no aclaramos en la sentencia, los ordena de manera ascendente (de menor a mayor).
Podemos ordenarlos de mayor a menor, para ello agregamos la palabra clave "desc":
select * libros order by editorial desc;
También podemos ordenar por varios campos, por ejemplo, por "titulo" y "editorial":
select * from libros order by titulo,editorial;
Incluso, podemos ordenar en distintos sentidos, por ejemplo, por "titulo" en sentido ascendente y "editorial" en sentido descendente:
select * from libros order by titulo asc, editorial desc;
Debe aclararse al lado de cada campo, pues estas palabras claves afectan al campo inmediatamente anterior.
Es posible ordenar por un campo que no se lista en la selección.
Se permite ordenar por valores calculados o expresiones.
La cláusula "order by" no puede emplearse para campos text, ntext e image.
Ingresemos el siguiente lote de comandos en el SQL Server Management Studio:
if object_id ('libros') is not null drop table libros; create table libros( codigo int identity, titulo varchar(40) not null, autor varchar(20) default 'Desconocido', editorial varchar(20), precio decimal(6,2), primary key (codigo) ); go insert into libros (titulo,autor,editorial,precio) values('El aleph','Borges','Emece',25.33); insert into libros values('Java en 10 minutos','Mario Molina','Siglo XXI',50.65); insert into libros (titulo,autor,editorial,precio) values('Alicia en el pais de las maravillas','Lewis Carroll','Emece',19.95); insert into libros (titulo,autor,editorial,precio) values('Alicia en el pais de las maravillas','Lewis Carroll','Planeta',15); -- Recuperamos los registros ordenados por el título: select * from libros order by titulo; -- Ordenamos los registros por el campo "precio", referenciando el campo -- por su posición en la lista de selección: select titulo,autor,precio from libros order by 3; -- Los ordenamos por "editorial", de mayor a menor empleando "desc": select * from libros order by editorial desc; -- Ordenamos por dos campos: select * from libros order by titulo,editorial; -- Ordenamos en distintos sentidos: select * from libros order by titulo asc, editorial desc; -- Ordenamos por un campo que no se lista en la selección: select titulo, autor from libros order by precio; -- Ordenamos por un valor calculado: select titulo, autor, editorial, precio+(precio*0.1) as 'precio con descuento' from libros order by 4;