Cuando consulta datos de una tabla, la declaración SELECT
devuelve filas en un orden no especificado. Para ordenar las filas del conjunto de resultados, utilice la cláusula ORDER BY
de la declaración SELECT
.
La cláusula ORDER BY
le permite ordenar las filas devueltas por una cláusula SELECT
en orden ascendente o descendente según una expresión de clasificación.
A continuación se ilustra la sintaxis de la cláusula ORDER BY
:
SELECT
select_list
FROM
table_name
ORDER BY
sort_expression1 [ASC | DESC],
sort_expression2 [ASC | DESC],
...;
En esta sintaxis:
- Primero, especifique una expresión de clasificación, que puede ser una columna o una expresión, que desea ordenar después de las palabras clave
ORDER BY
. Si desea ordenar el conjunto de resultados en función de varias columnas o expresiones, debe colocar una coma (,
) entre dos columnas o expresiones para separarlas. - En segundo lugar, utiliza la opción
ASC
para ordenar filas en orden ascendente y la opciónDESC
para ordenar filas en orden descendente. Si omite la opciónASC
oDESC
,ORDER BY
utilizaASC
de forma predeterminada.
PostgreSQL evalúa las cláusulas de la declaración SELECT
en el siguiente orden: FROM
, SELECT
y ORDER BY
:
Debido al orden de evaluación, si tiene un alias de columna en la cláusula SELECT
, puede usarlo en la cláusula ORDER BY
.
Tomemos algunos ejemplos del uso de la ORDER BY
cláusula PostgreSQL.
ORDER BY ejemplos¶
Usaremos la tabla customer
de la base de datos de muestra para la demostración.
Uso de la cláusula ORDER BY de PostgreSQL para ordenar filas por una columna¶
La siguiente consulta utiliza la cláusula ORDER BY
para ordenar a los clientes por sus nombres en orden ascendente:
SELECT
first_name,
last_name
FROM
customer
ORDER BY
first_name ASC;
Dado que la opción ASC
es la predeterminada, puede omitirla en la cláusula ORDER BY
como aquí:
SELECT
first_name,
last_name
FROM
customer
ORDER BY
first_name;
Uso de la cláusula ORDER BY de PostgreSQL para ordenar filas por una columna en orden descendente¶
La siguiente declaración selecciona el nombre y el apellido de la tabla customer
y ordena las filas por valores en la columna de apellido en orden descendente:
SELECT
first_name,
last_name
FROM
customer
ORDER BY
last_name DESC;
Uso de la cláusula ORDER BY de PostgreSQL para ordenar filas por varias columnas¶
La siguiente declaración selecciona el nombre y el apellido de la tabla de clientes y ordena las filas por el nombre en orden ascendente y el apellido en orden descendente:
SELECT
first_name,
last_name
FROM
customer
ORDER BY
first_name ASC,
last_name DESC;
En este ejemplo, la cláusula ORDER BY ordena primero las filas por valores en la columna del nombre. Luego ordena las filas ordenadas por valores en la columna de apellido.
Como se puede ver en la salida, dos clientes con el mismo nombre, Kelly
, tiene el apellido ordenado en orden descendente.
Uso de la cláusula ORDER BY para ordenar filas por expresiones¶
La función LENGTH()
acepta una cadena y devuelve su longitud.
La siguiente sentencia selecciona los nombres y sus longitudes. Ordena las filas por la longitud de los nombres:
SELECT
first_name,
LENGTH(first_name) len
FROM
customer
ORDER BY
len DESC;
Como la cláusula ORDER BY
se evalúa después de la cláusula SELECT
, el alias de columna len
está disponible y se puede utilizar en la cláusula ORDER BY
.
Cláusula ORDER BY de PostgreSQL y NULL¶
En el mundo de las bases de datos, NULL
es un marcador que indica que faltan datos o que los datos son desconocidos en el momento del registro.
Cuando ordena filas que contienen NULL
, puede especificar el orden de NULL
con otros valores no nulos utilizando la opción NULLS FIRST
o NULLS LAST
de la cláusula ORDER BY
:
ORDER BY sort_expresssion [ASC | DESC] [NULLS FIRST | NULLS LAST]Lenguaje del código: CSS (css)
La opción NULLS FIRST
coloca NULL
antes de otros valores no nulos y la opción NULL LAST
coloca NULL
después de otros valores no nulos.
Vamos a crear una tabla para la demostración.
-- create a new table
CREATE TABLE sort_demo(num INT);
-- insert some data
INSERT INTO sort_demo(num)
VALUES
(1),
(2),
(3),
(null);
Tenga en cuenta que si aún no está familiarizado con las sentencias CREATE TABLE
e INSERT
, puede simplemente ejecutarlas desde pgAdmin
o psql
para crear la tabla sort_demo
e insertar datos en ella.
La siguiente consulta devuelve datos de la tabla sort_demo
:
SELECT
num
FROM
sort_demo
ORDENAR POR
num;
Salida:
num
------
1
2
3
null
(4 filas)
En este ejemplo, la cláusula ORDER BY
ordena los valores de la columna num
de la tabla sort_demo
en orden ascendente. Coloca NULL
después de otros valores.
Tenga en cuenta que psql
muestra null
como una cadena vacía por defecto. Para hacer null
más claro, puede ejecutar el siguiente comando para cambiar una cadena vacía por otra como null
:
\pset null null
Salida:
Null display is "null"
Por tanto, si utiliza la opción ASC
, la cláusula ORDER BY
utiliza por defecto la opción NULLS LAST
. Por lo tanto, la siguiente consulta devuelve el mismo resultado:
SELECT
num
FROM
sort_demo
ORDENAR POR
num NULLS LAST;
Salida:
num
------
1
2
3
null
(4 rows)
Para anteponer NULL
a otros valores no nulos, se utiliza la opción NULLS FIRST
:
SELECT
num
FROM
sort_demo
ORDENAR POR
num NULLS FIRST;
Salida:
num
------
null
1
2
3
(4 rows)
La siguiente sentencia ordena los valores de la columna num
de la tabla sort_demo
en orden descendente:
SELECT
num
FROM
ordenar_demo
ORDENAR POR
num DESC;
Salida:
num
------
null
3
2
1
(4 filas)
La salida indica que la cláusula ORDER BY
con la opción DESC
utiliza los NULLS FIRST
por defecto.
Para invertir el orden, puedes utilizar la opción NULLS LAST
:
SELECT
num
FROM
ordenar_demo
ORDENAR POR
num DESC NULLS LAST;
Salida:
num
------
3
2
1
null
(4 rosws)
Resumen¶
- Utiliza la cláusula
ORDER BY
en la sentenciaSELECT
para ordenar las filas del conjunto de consulta. - Utiliza la opción
ASC
para ordenar las filas en orden ascendente y la opciónDESC
para ordenar las filas en orden descendente. - La
ORDER BY
cláusula utiliza laASC
opción por defecto. - Use las opciones
NULLS FIRST
yNULLS LAST
para especificar explícitamente el orden deNULL
con otros valores no nulos.