Cuando realizamos una consulta los registros obtenidos no tienen un orden definido.
Si son pocos registros y / o somos los únicos que trabajamos con los datos es posible que no represente ningún inconveniente, pero si los datos los va a consultar alguien más, es conveniente utilizar un criterio para ordenar los datos.
ORDER BY
Con ORDER BY podemos ordenar los registros obtenidos de una consulta por una o varias columnas en el orden que designemos.
-- Seleccionar id y título de la tabla publicaciones
-- ordenar por la columna título de manera descendente
-- Z...A
SELECT id, titulo FROM publicaciones ORDER BY titulo DESC;
-- Seleccionar id y título de la tabla publicaciones
-- ordenar por la columna título de manera ascendente
-- A...Z
SELECT id, titulo FROM publicaciones ORDER BY titulo ASC;
-- Si no se especifica la manera en que se quieren ordenar
-- los registros se va a realizar de manera ascendente
-- A...Z
SELECT id, titulo FROM publicaciones ORDER BY titulo;
NOTA:
Al ordenar por columnas de texto no se hace distinción entre mayúsculas y minúsculas.
Si no se especifica la manera en que se quieren ordenar los registros – ASC, DESC – se ordenará de manera ascendente – ASC -.
Si los resultados se van a ordenar por varias columnas MySQL primero ordena los resultados por la primer columna y, dentro de esos resultados ordena los resultados por la segunda columna – si son mas columnas seguiría por la tercera, etc -.
-- Seleccionar id , usuario_id y título de la tabla publicaciones
-- ordenar por la columna usuario_id de manera ascendente
-- A...Z
-- Una vez que se ordenaron los registros por
-- esta columna ordenar los
-- registros utilizando la columna título
-- también de manera ascendente.
-- El segundo ordenamiento es más visible en los registros que tienen
-- el mismo valor similares en la columna usuario_id
SELECT id, usuario_id, titulo FROM publicaciones ORDER BY usuario_id ASC, titulo ASC;
-- Seleccionar id, usuario_id y título de la tabla publicaciones
-- ordenar por la columna usuario_id de manera ascendente
-- A...Z
-- Una vez que se ordenaron los registros por
-- esta columna ordenar los
-- registros utilizando la columna título
-- en este caso de manera descendente.
-- El segundo ordenamiento es más visible en los registros que tienen
-- el mismo valor en la columna usuario_id
SELECT id, usuario_id, titulo FROM publicaciones ORDER BY usuario_id ASC, titulo DESC;
Filtrar registros
El utilizar ORDER BY no interfiere con el filtrado de datos – WHERE -, se pueden filtrar los datos y, una vez filtrados se ordenan.
-- Seleccionar id, usuario_id, titulo, vistas, votos
-- de la tabla publicaciones
-- donde la columna usuario_id
-- tenga un valor asignado
-- Ordenar por la columna titulo
-- de manera ascendente
SELECT id, usuario_id, titulo, vistas, votos
FROM publicaciones
WHERE usuario_id IS NOT NULL
ORDER BY titulo ASC;
-- Seleccionar id, usuario_id, titulo, vistas, votos
-- de la tabla publicaciones
-- donde el valor de la columna votos
-- sea menor a 50.
-- Ordenar por la columna votos
-- de manera descendente (de la publicación
-- más votada a la menos votada).
-- Una vez hecho esto, ordenar por la columna
-- titulo de manera ascendente (A...Z).
SELECT id, usuario_id, titulo, vistas, votos
FROM publicaciones
WHERE votos < 50
ORDER BY votos DESC, titulo ASC;
-- Seleccionar id, usuario_id, titulo, vistas, votos
-- de la tabla publicaciones
-- donde el valor de la columna vistas
-- sea mayor a 20.
-- Ordenar por la columna vistas
-- de manera descendente (de la publicación
-- con más vistas a la publicación con menos vistas).
-- Una vez hecho esto, ordenar por la columna
-- titulo de manera ascendente (A...Z).
SELECT id, usuario_id, titulo, vistas, votos
FROM publicaciones
WHERE vistas > 20
ORDER BY vistas DESC, titulo ASC;
Al utilizar ORDER BY tienes más control al momento de presentar los datos.