En las consultas que hemos escrito el las secciones anteriores, los registros resultantes no aparecen en ningún orden. En bases de datos no siempre los resultado se muestran en el orden en que fueron agregados a la tabla. Pensar esto es un error común. Cada actualización de la tabla va alterando el orden de los registros en la misma. Para ordenar los resultados, la instrucción SELECT cuenta con la cláusula ORDER BY.
Cómo ordenar los resultados por un campo o columna en SQL.
La sintaxis más simple es la siguiente:
SELECT * FROM nombre-tabla ORDER BY nombre_campo;
O si queremos limitar el numero de columnas a mostrar:
SELECT lista-de-campos FROM nombre-tabla ORDER BY nombre_campo;
Escribe la siguiente sentencia, ejecútala y desplázate hasta ver los valores de la columna “id_marca”.
Recuerda que el asterisco (*) indica mostrar todos las columnas que contiene la tabla. Si te desplazas hacia abajo de los resultados, veras que los registros se visualizan ordenados por el valor del campo o columna “id_marca” del valor más pequeño al mayor, numéricamente hablando, ya que la columna “id_marca” es de un tipo de dato numérico. Por defecto, la cláusula ORDER BY ordena los campos que se le indiquen en forma ascendente (de menor a mayor).
Se puede alterar este orden utilizando la palabra reservada DESC (descendente) inmediatamente después del nombre del campo separad por un espacio. Ejecuta el siguiente ejemplo y observa los resultados:
Como puedes observar en los resultados, los registros de salida ahora aparecen ordenados en forma descendente, de mayor a menor valor, por la columna “id_marca”.
Nota importante: los registros NO son ordenados en la tabla, solo son ordenados en los resultados de la consulta.
Ordenar los resultados de una consulta SQL de sólo las filas seleccionadas.
Anteriormente vimos que listar todo el contenido de una tabla a veces es impráctico, sobre todo cuando la tabla contiene cientos de miles o millones de registros. Es más común limitar el numero de registros a mostrar a través de la cláusula WHERE como lo hemos visto antes. La sintaxis seria esta:
SELECT * FROM nombre-tabla WHERE condición ORDER BY nombre-campo;
Si queremos limitar el numero de columnas reemplaza el asterisco (*) por una lista de columnas o campos que quieras mostrar. Observa que la cláusula que ordena los resultados ORDER BY va siempre después de la cláusula WHERE que filtra los resultados. Internamente la base de datos primero ejecuta el filtrado (WHERE) y una vez que tiene los resultados filtrados, ejecuta el ordenamiento sobre estos. Se dice que la cláusula WHERE tiene más prioridad que ORDER BY en el orden de ejecución de una sentencia SQL.
Escribe y ejecuta la siguiente sentencia y observa los resultados:
Los resultados de la consulta sólo muestra 184 registros que corresponden a los productos que son de la marca 363 y están ordenados por la columna “nombre” en forma ascendente. Como el campo nombre es de tipo TEXT, los valores son ordenados en forma alfabética de la A a la Z. Pero recuerda que el tipo de dato TEXT también soporta caracteres numéricos y especiales, si algún nombre de producto empezara por ejemplo, con el caracter “1”, digamos que tuviera el valor en la columna nombre de “1 y 1”, este valor aparecería antes que el valor “Adaptador”. Los números dentro de un campo tipo TEXT son tratados como caracteres y no como números.
De los valores “11” y “9” dentro de un campo TEXT, si se ordenara ascendentemente aparecería primero el valor “11” que el “9”. Si fuera un campo de tipo numérico, entonces ahí si aparecería primero el 9 y después el 11. Recuerda que cuando se está ordenando un campo TEXT se compara caracter por caracter y el caracter “1” es menor que el caracter “9”. Así que cualquier valor que empiece con “1” digamos que “1000”, seguirá siendo menor que “9”. Los caracteres especiales tienen menor valor que los caracteres numéricos. Ejecuta el siguiente ejemplo y observa como son ordenados los resultados:
Observa que ahora los resultados están ordenados por la columna “modelo”. Puedes observar que los caracteres especiales, en este caso las comillas dobles (“) son de valor menor, enseguida siguen los caracteres numéricos y al final los caracteres alfabéticos.
Haz como práctica los mismos dos ejercicios anteriores pero ordenados en forma descendente.
Cómo ordenar los resultados de una consulta SQL por más de un campo o columna.
La sintaxis para ordenar los resultados por más de un campo o columna de una consulta SQL es la siguiente:
SELECT lista-columnas FROM nombre-tabla ORDER BY columna-1 ORDEN-1, columna-2 ORDEN-2, columna-N orden-N;
O con la clásusula WHERE:
SELECT lista-columnas FROM nombre-tabla WHERE condición ORDER BY columna-1ORDEN-1, columna-2 ORDEN-2, columna-N orden-N;
Donde lista-columnas puede ser una lista de columnas como ya hemos visto o un asterisco (*) para indicar todos los campos y orden-N pueden ser las palabras reservadas o comandos que indican el tipo de orden ASC (ascendente) o DESC (descendente). Por defecto si se omite el orden, se asume que es en orden ascendente. Veamos un ejemplo:
Ejecuta la sentencia anterior y desliza la barra de desplazamiento para ver todos los resultados. Observa que muestra sólo los productos de la marca 363, enseguida ordena los resultados por el campo “id_categoria” en forma ascendente (por defecto) y después por cada conjunto de filas con el mismo valor en “id_categoria” ordena por “nombre” del producto en forma ascendente (por defecto). Ahora cambiemos el orden de la columna “nombre” a descendente.
Ejecuta la sentencia y observa los resultados. La categoría sigue ordenada en forma ascendente, pero ahora el nombre de los producto lo muestra en forma descendente.Las filas cambiaron de posición. Por último ejecuta la siguiente sentencia:
Ahora, los registros aparecerán ordenados por categoría y luego por nombre de producto en orden descendente ambos. Por último prueba ordenar primero por la columna “nombre” y después por la columna “id_categoria” en el orden que gustes. Y observa los resultados.
En la siguiente sección veremos cómo limitar el numero de filas que regresa una consulta SELECT.
¡Hasta pronto!