28 noviembre 2006

SQL: SELECT, parte 7 - Ordenando el Caos

Ya casi agotamos las opciones que tiene la cláusula SELECT. Todo lo que puedo hacer con el WHERE me permite seleccionar solo los registros que me son útiles, pero falta todavía algo: ordenar la información obtenida. Como te podrás imaginar, esto te simplifica la vida un montón porque aunque obtengas solo los registros pertinentes, verlos a todos es un relajo, imprimirlos es un desmadre... en pocas palabras, si es posible, mejor ordénalos. No te cuesta nada y puede ayudar mucho.

Pero, ¿cómo los ordeno? Fácil. Usamos la cláusula ORDER BY de la instrucción SELECT. Para incluirlo, escribimos al final de la instrucción SELECT algo con la siguiente sintáxis (nota: lo que va entre corchetes cuadrados es opcional):

ORDER BY campo [ASC o DESC][,campo2 [ASC o DESC][,campo3 [ASC ó DESC][, ...]]]

Se ve medio raro, pero es fácil. En primer lugar, puedo ordenar por muchos campos. O sea, si ordeno una lista de alumnos por apellido paterno, es posible que tenga varios registros que tengan el mismo apellido. ¿Cómo los ordeno entre ellos? Puedo especificar un segundo campo, por ejemplo, el apellido materno. Y si ese también "empata" (por ejemplo hay dos o más hermanos en una escuela), podemos especificar que lo ordene por un tercer campo, como podría ser el nombre.

En este caso, podría escribir lo siguiente:

SELECT Nombre,ApellidoP,ApellidoM
FROM Alumnos
ORDER BY ApellidoP,ApellidoM,Nombre


¡Wow! Este aca un reporte de TODOS los alumnos (no tiene la cláusula WHERE, ¿recuerdas que dijimos que es opcional?) ordenados en primer lugar por el campo ApellidoP y, si hay varios con el mismo apellido paterno, ordena los "repetidos" por el campo ApellidoM. Y si hay algunos con el mismo apellido paterno y materno, los ordeno según el nombre.

Si no especifico nada, el ordenamiento se hace de manera ascendente (o sea de la A a la Z), pero puedo modificarlo si necesito que sea de forma descendente (de la Z a la A). Para esto sirve la parte DESC. Esto lo incluyo al final de cada campo. Por ejemplo, si quiero ordenar por apellido paterno de manera descendente y luego por el materno de forma ascendente, escribo esto:

SELECT Nombre,ApellidoP,ApellidoM
FROM Alumnos
ORDER BY ApellidoP DESC,ApellidoM


Como podrás imaginar, si le pongo ASC después del campoestoy especificando que va a ser de forma ascendente. Pero como es la opción por defáult, se puede omitir.

El uso del ORDER BY, como te habrás dado cuenta es muy fácil, así que ahora te dijo para que lo uses y juegues con él. ¡Se divierten!
Publicar un comentario
Related Posts Plugin for WordPress, Blogger...