Hasta el momento hemos visto como listar todas las filas de una tabla así como sólo mostrar las que cumplan cierta condición o filtro. En esta sección vamos a ver cómo limitar el número de filas que regresa una consulta mediante la subcláusula o comando LIMIT de SELECT, estén o no filtradas las filas. Cabe aclarar que no todos los motores de base de datos usan el comando LIMIT para limitar el número de filas. SQL Server por ejemplo, utiliza la subcláusual o comanto TOP, Oracle utiliza OFFSET FETCH o la función ROWNUM, etc., SQLite utiliza LIMIT.
Vayamos directamente al ejemplo. Ejecuta primero la siguiente sentencia y observa el resultado:
Observa que la consulta recuperó o listó 184 filas. Ahora le agregamos el comando o subcláusula LIMIT a la instrucción SELECT. Observa que LIMIT va al final de la sentencia. Ejecuta la siguiente sentencia:
Observa que sólo recupero las 5 primeras filas de la consulta anterior. Esto es debido a que agregando el comando SELECT la siguiente subcláusula al final:
… LIMIT número-filas;
Le estamos indicando que de los resultados de la consulta, solo nos muestre o recupere los número-filas (número de filas) indicadas. En nuestra consulta le especificamos que 5.
Veamos otra variante de la subcláusula LIMIT:
... LIMIT desplazamiento,número-filas;
Si el comando LIMIT es seguido por dos números enteros separados por comas, el primero (desplazamiento) le indica cuántas filas de las primeras que regresaría la consulta va a saltar o a ignorar y el segundo (número-filas) el número de filas que va mostrar. Se verá mejor con el siguiente ejemplo. Ejecuta y trata de entender que está pasando.
Si observas los resultados en la primera imagen de esta sección, la primera consulta que hicimos sin limitar el número de filas, verás que ignoró las primeras 5 filas y partir de la fila 6 inclusive, nos mostró los 4 registros siguientes solamente.
Generalmente, LIMIT se va a usar con filas ordenadas, es decir, con instrucciones SELECT que incluyan el ORDER BY. Como ejercicio, practica haciendo tus propias consultas limitando los resultados con desplazamiento y sin desplazamiento.
En la siguiente sección veremos algunos operadores de la cláusula WHERE que ya hemos usado.
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.
En esta sección vamos a ver la sintaxis de la instrucción SELECT para obtener los valores únicos o distintos que existen en una columna de una tabla. ¿Recuerdas que en secciones anteriores, en la cláusula WHERE poníamos como condición que aplicara cierta instrucción sólo a las filas que tuvieran cierto valor en el campo “id_marca”?
Pues bien, si listamos todos los valores de todas las filas de la columna “id_marca” (que representa la marca del producto) de la tabla “productos” veríamos que muchos valores se repiten. Esto se debe a que una marca puede fabricar distintos productos.
Como puedes observar en la imagen anterior, en los 16 primeros registros que se muestran de la tabla “productos”, los valores de la columna “id_marca” se repiten, como el valor 173, el 34 y el 40. Osea que varios productos distintos pertenecen a la misma marca. ¿Cómo podemos saber cuántas marcas distintas hay en toda la tabla? Ir recorriendo la tabla e ir anotando cada valor distinto sería complicado, ya que tenemos 14,647 filas. Por fortuna SQL tiene la cláusula DISTINCT que podemos usar con la instrucción SELECT para hacer esta tarea, la sintaxis sería así:
SELECT DISTINCT nombre_campo FROM nombre-tabla;
Veamos el ejemplo. Escribe la siguiente sentencia y ejecútala.
La sentencia debe arrojarte algo como esto:
La consulta nos arroja 249 filas, es decir que hay 249 valores distintos de “id_marca” en todas las filas de la tabla “productos”. Esto le llevó a la base de datos obtenerlo en 19 milisegundos (ms). ¿Cuánto nos habríamos tardado en obtener el mismo resultado si lo hubiéramos hecho manualmente?
Guarda el archivo SQL. Guardar la base de datos no es necesario, ya que sólo estamos haciendo consultas sin modificar datos o tablas.
Trata de escribir la sentencia que obtendría todas las categorias (columna “id_categoria”) únicas que existen en la tabla “productos”. ¿Cuántas son?
En la sección siguiente veremos la cláusula de la instrucción SELECT que nos permite mostrar en forma ordenada los datos arrojados por una consulta.