Publicado el 4 comentarios

SQL básico. Cómo ordenar los resultados de una consulta.

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”.

Resultados ordenador por “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:

Ordenar los registros por “id_marca” en forma descendente.

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:

Consulta filtrada y ordenada.

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:

Resultados filtrados y ordenados por “modelo”.

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:

Ordenar por más de un campo o columna.

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.

Ordenado por más de un campo y diferente orden.

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:

Ambos campos en el mismo orden.

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!

IR A LA PAGINA DEL CURSO.

Publicado el 1 comentario

SQL básico. Cómo obtener los valores únicos de una columna.

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.

Valores de “id_marca” repetidos.

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.

Obtiene “id_marca” únicos o distintos.

La sentencia debe arrojarte algo como esto:

Muestra los valores únicos de “id_marca”.

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.

¡Hasta la próxima!.

IR A LA PAGINA DEL CURSO.

Publicado el 1 comentario

SQL básico. Consultar los datos de una tabla.

En la sección anterior vimos como borrar registros de una tabla con SQL, en esta sección vamos a ver como extraer la información de una tabla mediante el lenguaje SQL mediante el comando o instrucción SELECT. Abra la base de datos y el archivo SQL si no los tiene abiertos para realizar las prácticas.

Obtener todos los datos de una tabla con SQL.

La sintaxis para obtener todos los datos de todos los registros de una tabla es la siguiente:

SELECT * FROM nombre-tabla;

El “*” (asterisco) significa que liste los datos de todos los campos de la tabla especificada. Escribe la siguiente sentencia y ejecútala.

Consulta todos las filas de la tabla.

En la misma pestaña, en la parte de abajo de nuestro editor donde escribimos nuestras instrucciones, aparecerán los resultados en forma de una tabla. Y en el área de mensajes aparecerá el número de filas recuperadas, en mi caso 14,767 filas.

Resultados de la consulta.

Puedes usar la barra de desplazamiento para ver el resto de los campos y valores que no se observan a la derecha del área de resultados. Podrás también notar que los botónes “Write Changes” y “Revert Changes” no se activan. Esto es debido a que el comando SELECT sólo consulta información, no hace ningún cambio ni en los datos ni en las tablas de la base de datos.

También podemos indicar al comando SELECT que sólo me muestre ciertos campos de la tabla con la siguiente sintaxis del comando.

SELECT campo-1, campo-2, … campo-N FROM nombre-tabla;

Veamos el siguiente ejemplo. Escribe y ejecuta la siguiente instrucción:

Listar solo algunos campos o columnas.

La instrucción anterior, sólo mostrará los datos de las columnas “id_producto”, “nombre” y “modelo” de todos las filas o registros de la tabla “productos”.

Lista sólo algunos campos de la tabla “productos”.

En ambiente sen producción , por ejemplo en nuestros trabajos, no es práctico consultar todas las filas de una tabla a menos que éstas tengan pocas filas o registros. Con tablas grandes de miles o millones de registros, la consulta consumiría muchos recursos de la computadora y podría tardar en mostrarnos la información. Por lo general siempre “filtramos” o limitamos los resultados para obtener sólo aquellas filas que cumplan una condición específica, como ya lo hemos visto en instrucciones como DELETE y UPDATE.

Mostrar sólo las filas que cumplan una condición con el comando SELECT.

Vamos a obtener todos los valores de las columnas de sólo los productos cuyo valor en la columna “id_marca” sea 34. Escribe y ejecuta la siguiente instrucción:

Filtrando filas.

Como puede observar agregamos la cláusula WHERE seguida por la condición “id_marca = 34” para limitar el numero de filas a mostrar. Como usamos “*” nos mostrará todos las columnas de sólo aquellos registros que cumplan la condición id_marca igual a 34. Son 93 fila en total.

Muestra filas filtradas.

Como vimos anteriormente, también podemos limitar las columnas a mostrar de las filas filtradas. Escribe y ejecuta la instrucción mostrada y observa los resultados:

Filtrar y mostrar sólo algunas columnas.

Como hemos visto, la cláusula WHERE sirve para limitar el número de filas sobre las cuales las instrucción SQL, UPDATE, DELETE o SELECT, actuarán. Así mismo hemos visto como formar una condición sencilla buscando aquellas filas cuyo valor de una columna sea igual a una expresión. En la siguiente sección vamos a ver algunas otras cláusulas del SELECT y más adelante como formar condiciones un poco más complejas y usarlas con la cláusula WHERE.

¡Hasta pronto!

IR A LA PAGINA DEL CURSO.