No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Curso Práctico de SQL

Curso Práctico de SQL

Israel Vázquez Morales

Israel Vázquez Morales

Ordenamiento (ORDER BY)

8/29
Recursos

Aportes 44

Preguntas 11

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Resumen de la clase:
Las partes más importantes y más usadas de los queries de SQL son:
-La proyección (con SELECT)
-El origen de los datos (Con FROM y sus JOIN)
-WHERE, que nos ayuda a filtrar las tuplas dependiendo de las condiciones que se cumplan.

Hay otras partes de los queries que son opcionales, que no encontraremos en todos los queries pero que igual juegan un papel muy importantes. Una de ellas es el ordenamiento (ORDER BY)

INDICES:
excelentes para búsquedas y ordenamientos, cuando estamos haciendo queries complejos, cuando estamos tratando de extraer información constantemente, haciendo joins complicados a través de esos campos y nos sirve tener un índice que guarde el orden de ese campo en particular para hacer extracciones muy rápidas.

CUIDAR PARA ALTA TRANSACCIONALIDAD:
la contrapartida de esto es que cuando tienes un índice, la parte de escritura, cuando llegas a hacer un Update de esa columna en particular en la que pusiste un índice, entonces cada escritura tardará un poco más que la anterior porque básicamente agrega un nuevo elemento, revisa todos elementos anteriores y posteriores y vuelve a ordenarlos en el índice y si agregamos otro elemento vuelve a revisar todos y a ordenarlos.

No debemos poner índices por poner sino ser muy cuidadosos de aquellas columnas que hacemos JOIN muy seguido o que tienen muchísimos datos y siempre estamos ordenando por esa columna. Es válido ponerlo pero siempre teniendo en cuenta que cuando tenemos que ingerir muchos datos o hacer muchos INSERT no es bueno tener índices en esas tablas (o tener la menor cantidad de índices posible). Es importante tener en mente cuántas lecturas Vs cuántas escrituras haces en una tabla o en un campo particular para decidir si conviene poner un índice. Si vas a hacer muchas escrituras por segundo no es conveniente poner índices o tratar de mantenerlo al mínimo. En cambio, si realmente escribes muy poco en esa tabla pero haces búsquedas constantes y muchos Joins sobre esa tabla entonces vale la pena usar el índice sobre ese campo en particular donde haces el Join o donde haces el ordenamiento porque es un gran complemento para nuestra cláusula ORDER BY.

Ordenamiento ORDER BY

ORDER BY se usa para ordenar de forma ascendente o descendente columnas en base a una fila determinada. Por defecto lo hace de forma DESC. Organiza todo alfabéticamente o numéricamente si son números.

SELECT *
FROM tabla_diaria
ORDER BY fecha;

SELECT *
FROM tabla_diaria
ORDER BY fecha ASC;

SELECT *
FROM tabla_diaria
ORDER BY fecha DESC;

Me hubiese gustado que el tema de los indices, se viera mas practico, tanto el ejemplo de una tabla que se complicaria tenerlo o el ejemplo donde si tenemos un indice nos hace la vida mas facil

La sentencia ORDER BY tiene que ver con el ordenamiento de los datos dependiendo de los criterios que quieras usar.

  • ASC sirve para ordenar de forma ascendente.

  • DESC sirve para ordenar de forma descendente.

  • LIMIT se usa para limitar la cantidad de resultados que arroja el query.

  • HAVING tiene una similitud muy grande con WHERE, sin embargo el uso de ellos depende del orden. Cuando se quiere seleccionar tuplas agrupadas únicamente se puede hacer con HAVING.

  • HAVING es similar a WHERE aunque no muy utilizada, pero es necesaria cuando quieres hacer un filtro con datos agrupados por un ORDER BY, HAVING siempre va despues del GROUP BY

Esto se pone cada vez mejor:

  • Order BY DESC;

ORDER BY ASC;

Hmmm esto me recuerda mucho a los índices de Firebase, donde Google crea índices por cada query compleja que se ejecute, así simplemente tiene que ir a buscar el resultado en lugar de ejecutar de nuevo el query.

Aun así, dice que el motor de bases de datos ya los trabaja por defecto, pero también dice que no debemos usar índices cuando escribimos muchos, pero si ya los trabaja por defecto entonces ¿Cómo se deshabilitan esos índices? 🤔

Ordenamiento (ORDER BY)

  • ORDER BY campo: ordena ascendentemente por default
  • ORDER BY campo ASC: lo mismo pero explícito
  • ORDER BY campo DESC: de manera descendente

Índices

  • Excelentes para búsquedas y ordenamientos
  • Cuidar para alta transaccionalidad
  • El tiempo de escritura se suma porque se crea el índice
  • Usar únicamente cuando hay muchas lecturas pero pocas escrituras en la tabla

Mis notas personales sobre ORDER BY:

8. Ordenamiento (ORDER BY)

  • Ordenar por
SELECT * 
FROM tabla_diaria
ORDER BY fecha;

SELECT * 
FROM tabla_diaria
ORDER BY fecha ASC; -- Default

SELECT * 
FROM tabla_diaria
ORDER BY fecha DESC;

Índices

  • Excelentes para búsquedas y ordenamientos.
  • Cuidar para alta transaccionalidad.
  • Guarda el orden de un campo para hacer extracciones muy rápidas.
  • Cuando se hacen muchos inserts, tener pocos índices.
hola a todos, también se puede manejar una vista de la misma tabla y trabajar sobre está vista, en vez de la tabla real, esto ayudaría

Ordenamiento

 SELECT *
  FROM PRUEBAS.ALUMNOS
ORDER BY fecha_incorporacion;

Ascendente

 SELECT *
  FROM PRUEBAS.ALUMNOS
ORDER BY fecha_incorporacion ASC;

Descendente

 SELECT *
  FROM PRUEBAS.ALUMNOS
ORDER BY fecha_incorporacion DESC;
el toma corriente me distrae xd

El indice es un tema muy importante en SQL. Les recomiendo investigar mas sobre eso.

select * from platzi.alumnos order by id Desc;

Si trabajamos con replicas los índices se vuelven muy poderes ya que al tener replica de solo lectura nunca perderíamos performance en la escritura

A mi me parece mejor una definicion de Indices como:
Es una estructura de datos que optimiza la busqueda dentro de una tabla.
Por lo que tengo entendido es una estructura de datos.

Super pedagogico Gracias
Deberían colocar un pdf con todas las imágenes que proyectan de los códigos para que nos quede como resumen.

Ordenar Alumnos por Apellido de forma Ascendente:

SELECT *
FROM platzi.alumnos
ORDER BY apellido ASC;
  • En este ejemplo, la cláusula ORDER BY ordena las filas de la tabla alumnos en orden ascendente (de la A a la Z) según la columna apellido.

Ordenar Carreras por Fecha de Alta de forma Descendente:

SELECT *
FROM platzi.carreras
ORDER BY fecha_alta DESC;
  • En este caso, la cláusula ORDER BY ordena las filas de la tabla carreras en orden descendente (de la fecha más reciente a la más antigua) según la columna fecha_alta.

Ordenar Alumnos por Carrera y Colegiatura:

SELECT *
FROM platzi.alumnos
ORDER BY carrera_id ASC, colegiatura DESC;

Este ejemplo ordena las filas de la tabla alumnos primero por la columna carrera_id en orden ascendente y luego por la columna colegiatura en orden descendente. Esto significa que los alumnos se ordenarán por carrera y, en caso de carreras iguales, se ordenarán por colegiatura de mayor a menor.

*La propiedad* **ORDER BY** *permite **ordenar** los datos en el* Output *o resultado del queries, **luego** de las sentencias,* **SELECT***,* **FROM***, se **utiliza** la propiedad* **ORDER BY** ***seguido** por el **valor** de propiedad que **indicara** el orden en el cual se **mostraran** los datos, de manera **ascendente** con el **valor** de propiedad* **ASC**** “ascendente” *y de manera **descendiente** con el **valor** de propiedad* **DESC**** “descendente”*.*/\* Syntax SELECT \* FROM tableName ORDER BY fieldName ASC; \*/ **SELECT \*** **FROM posts** **ORDER BY publicationDate ASC;** *Con cadenas de **caracteres** la propiedad* **ORDER BY** ***ordenara** los datos por orden alfabético.* ```js /* Syntax SELECT * FROM tableName ORDER BY fieldName ASC; */ SELECT * FROM posts ORDER BY publicationDate ASC; ```
En la documentación oficial de PostgreSQL podemos encontrar más información acerca de como los índices ayudan a mejorar el rendimiento de los querys, así como el overhead que genera su build. Consultar aquí <https://www.postgresql.org/docs/current/indexes-intro.html>

Creé un SQL ordenado por dos columnas.
La base de datos es del curso de PostgreSQL

Deberías considerar utilizar índices en las siguientes situaciones:

 

  • Búsqueda Frecuente: Si realizas consultas de búsqueda en una tabla con frecuencia, especialmente en columnas específicas, los índices pueden acelerar significativamente estas búsquedas. Esto es especialmente útil en bases de datos grandes.
     
  • Uniones (JOIN) Frecuentes: Cuando trabajas con consultas que involucran múltiples tablas y realizas operaciones de unión (JOIN), los índices en las columnas que se utilizan para las uniones pueden mejorar el rendimiento de estas consultas complejas.
     
  • Ordenación: Si necesitas ordenar los resultados de una consulta por una o más columnas, los índices en esas columnas pueden acelerar el proceso de ordenación.
     
  • Restricciones Únicas: Los índices únicos se utilizan para garantizar que los valores en una columna (o conjunto de columnas) sean únicos. Esto es especialmente útil para mantener la integridad de los datos y evitar duplicados no deseados.
     
  • Columnas Utilizadas en Cláusulas WHERE: Si tienes columnas que se utilizan con frecuencia en las cláusulas WHERE de tus consultas, crear índices en esas columnas puede mejorar el rendimiento de las búsquedas que se basan en esas condiciones.
     
  • Tablas Grandes: En tablas con un gran número de filas, los índices pueden ser esenciales para mantener un rendimiento aceptable en las consultas.

 
Sin embargo, es importante recordar que los índices no son una solución universal. Debes tener en cuenta que los índices ocupan espacio en disco y pueden ralentizar las operaciones de inserción, actualización y eliminación, ya que la base de datos debe mantener los índices actualizados. Por lo tanto, debes equilibrar los beneficios de la aceleración de las consultas con el impacto en el rendimiento de escritura y el espacio en disco.
 
En resumen, utiliza índices cuando necesites mejorar el rendimiento de lectura de consultas frecuentes y cuando quieras garantizar la integridad de los datos, pero hazlo con cuidado y evaluando el impacto en el rendimiento de escritura. Cada aplicación y conjunto de datos es único, por lo que la decisión de crear índices debe basarse en las necesidades específicas de tu proyecto.

 
Aquí hay casos en los que no debes utilizar índices o debes considerar cuidadosamente su uso:

 

  • Tablas Pequeñas o Temporales: En tablas pequeñas que caben en la memoria, la ganancia de rendimiento al utilizar índices es limitada. Los índices consumen espacio en disco y pueden ocupar más espacio que la propia tabla.
     
  • Tablas con Cambios Frecuentes: Si una tabla experimenta muchas inserciones, actualizaciones o eliminaciones, los índices pueden ralentizar estas operaciones, ya que la base de datos debe mantener los índices actualizados.
     
  • Consultas de Lectura Única: Si tienes consultas que solo se ejecutan una vez o raramente, crear índices para optimizar esas consultas específicas puede no ser beneficioso. Los índices deben justificar su costo en términos de rendimiento de consulta frecuente.
     
  • Columnas de Baja Cardinalidad: Las columnas que tienen un número muy limitado de valores únicos (baja cardinalidad) pueden no ser buenas candidatas para la indexación. En este caso, una búsqueda secuencial puede ser más eficiente que usar un índice.
     
  • Consultas Complejas de Actualización o Eliminación: En consultas que afectan a múltiples filas o tablas con operaciones complejas de actualización o eliminación, los índices pueden hacer que las operaciones sean más lentas y complicadas.
     
  • Recuperación de Todos los Datos de la Tabla: Si necesitas recuperar todos los datos de una tabla en una consulta sin ninguna condición de filtro, los índices pueden ser innecesarios y consumir recursos innecesarios.
     
  • Recuperación de Datos Secuenciales: Si estás recuperando datos en un orden específico y no necesitas ordenarlos de manera diferente, los índices pueden no ser necesarios, ya que la base de datos puede realizar una lectura secuencial eficiente.
     
  • Análisis de Datos de Almacén de Datos: En entornos de almacén de datos (data warehousing), donde se realizan consultas complejas y analíticas en grandes volúmenes de datos, es posible que los índices no sean tan beneficiosos como en aplicaciones OLTP (procesamiento de transacciones en línea) y pueden requerir una estrategia de indexación diferente.

 
En resumen, aunque los índices son valiosos para mejorar el rendimiento de las consultas, no debes crearlos de manera indiscriminada. Debes considerar cuidadosamente cuándo y dónde utilizarlos en función de las necesidades específicas de tu aplicación y la estructura de tus datos, y evaluar el equilibrio entre el rendimiento de lectura y el rendimiento de escritura. El diseño de índices debe ser una parte consciente de la arquitectura de tu base de datos.

  • ORDER BY es ASC por defecto.

Inices

Cuando hay campos muy complejos , en donde se requiere ordenar por fecha,precio y ademas nombre. Volviendose un indice complicado.

Para evitar ello se utilizan los Indices(se idexan,mapeando cada dato de la columna).

Ejem: Si se tienen palabras con Aa ocupara el lugar 1, Ab ocupa el lugar 2 , B el lugar 3. Que pasa si llega una palabra Ac , habra que indexar nuevamente quedando en el siguiente orden : Aa,Ab,Ac,B,

  • Exelentes para busquedas y ordenamientos.

Es recomendable usarlo en tablas donde se realizan muchas busquedas , ucarlas en el Join o en el Order By .

  • Cuidar para alta transaccionabilidad.(No es bueno tener inices en tablas donde se realizan muchas inserciones o actualizaciones).

Uso de ORDER BY

SELECT *
FROM platzi.alumnos
ORDER BY fecha_incorporacion DESC;

Excelente proceso de aprendizaje

Mis apuntes:

Para ordenar pueden indicar el número de la columna obtenidas en el SELECT, hay momentos que es super práctico. Ejemplo.

SELECT ID, FECHA, NOMBRE, APELLIDO FROM USUARIOS
ORDER BY 2 desc, 4 asc

Aquí, lo que le estamos diciendo es ordenar por fecha (columna 2) de manera descendente y por apellido de manera ascendente.

La gran utilidad de esto es cuando estamos agrupando y tenemos muchas columnas de agrupación.

SELECT FECHA, NOMBRE, APELLIDO, COUNT(*)
FROM USUARIOS GROUP BY 1,2,3

Las clases hasta aqui han sido excelentes, habia escrito codigo pero no lo entendia por completo en todas las casiones y ahora todo esta quedando mas claro para manejar las base de datos.

Usamos OrdenBY para el ordenamiento:

…ORDER BY fecha : Pone la consulta ordenada en base a las fechas, por default ascendente
…ORDER BY fecha ASC : Para enfatizar que el orden sea ascendente
…ORDER BY fecha DESC : Para enfatizar que el orden sea descendente

Ordenamiento ORDER BY
ORDER BY se usa para ordenar de forma ascendente o descendente columnas en base a una fila determinada. Por defecto lo hace de forma DESC. Organiza todo alfabéticamente o numéricamente si son números.

Un query medio raro pero util para probar jajaja

SELECT * 
FROM platzi.alumnos 
WHERE 
	id > 10 
	AND id <= 20 
	OR id = 2 
	OR nombre LIKE 'W%'
	ORDER BY nombre DESC

Un pequeño aporte haciendo uso de ORDER BY, el resultado es el conteo de las carreras más utilizadas en orden de mayor a menor:

SELECT carrera, COUNT(*) AS conteo 
FROM platzi.alumnos AS ta
JOIN platzi.carreras AS tc
ON ta.carrera_id = tc.id
GROUP BY carrera
ORDER BY conteo DESC
;

Veo que siempre inicia con Select * luego el FROM, voy entendiendo

6. ORDENAMIENTO (Order By) --> Ordenar por
  • SELECT *
    FROM tabla_diaria
    ORDER BY fecha ; —> Es un ordenamiento básico ascendente
  • SELECT *
    FROM tabla_diaria
    ORDER BY fecha ASC ; —> Este es un ordenamiento explícito ascendente
  • SELECT *
    FROM tabla_diaria
    ORDER BY fecha DESC ; —> Este es un ordenamiento explícito descendente
  • Cuando la búsqueda y ordenación requiere una mayor complejidad, se hacen necesarios los índices:

Nos ayuda a tener indexado internamente en la tabla cada dato de la columna.

SELECT NombreSucursal,AVG(ImporteDeposito) FROM deposito GROUP BY NombreSucursal ORDER BY AVG(ImporteDeposito) DESC LIMIT 3```

Mi aporte:

SELECT nombre, apellido
FROM `alumnos`
ORDER BY nombre DESC;

Resultado:

SELECT nombre, apellido
FROM `alumnos`
ORDER BY nombre ASC;