Desanidar en PostgreSQL
En este artículo, describiremos la palabra clave unnest()
y sus usos en PostgreSQL con múltiples ejemplos.
PostgreSQL unnest ()
Funcionalidad
En PostgreSQL, puede usar una matriz como tipo de datos. También hay múltiples funciones relacionadas con la mejora de la usabilidad de las matrices en el lenguaje.
La función unnest()
es una de esas muchas funcionalidades de matriz que explicaremos hoy. Sin embargo, la funcionalidad básica es bastante clara a partir de la palabra unnest()
en sí misma: expande las matrices en filas.
Es esencial cuando se intenta mostrar las matrices en forma tabular. PostgreSQL permite que esta funcionalidad expanda matrices en un conjunto de valores singulares que podemos representar en forma tabular como filas.
En versiones anteriores de PostgreSQL, había métodos más lentos y complicados para lograr una expansión de arreglos que fueron reemplazados por esta funcionalidad unnest()
que también podemos usar con otras funcionalidades de PostgreSQL.
Usarlo con otras funcionalidades de PostgreSQL permite amplias posibilidades para operaciones más fáciles y rápidas.
Uso de PostgreSQL unnest()
Comenzaremos con la funcionalidad básica y luego avanzaremos lentamente hacia casos de uso más complicados. La sintaxis es unnest(matriz)
.
Simplemente tomará todos los valores individuales de la matriz y los colocará en un conjunto que se muestra en forma de filas en la tabla.
Nota: Debe proporcionar la palabra clave
unnest()
con una matriz. Por ejemplo:unnest (array_to_expand)
.
Ahora, pasemos a los ejemplos de cada función esencial.
Uso de la función unnest ()
de PostgreSQL en una matriz unidimensional simple
Sea una matriz de números naturales hasta 5
. La forma sencilla de expandirlos y mostrarlos como filas en una tabla es “desanidarlos”.
SELECT unnest (ARRAY[1,2,3,4,5]);
Proporcionará una salida con todos los 5
dígitos en forma tabular (5 filas):
Ahora, probemos exactamente con palabras en lugar de números para ver si hay algún cambio.
SELECT unnest (ARRAY['apple', 'oranges', 'mango']);
Proporcionará una salida con todas las 3
palabras en forma tabular (3 filas):
Como podemos ver, funciona perfectamente tanto para enteros como para texto.
Use la función unnest ()
de PostgreSQL en una matriz multidimensional simple
Hemos explicado cómo aplicar la función unnest ()
en una matriz 1D arriba. El siguiente ejemplo ilustra cómo usarlo en arreglos 2D.
SELECT unnest (array[array[1, 2], array[2, 3], array[4,5]]);
Mostrará un total de 6
filas con todos los 6
dígitos en forma tabular.
Utilice la función unnest ()
de PostgreSQL en varios arreglos al mismo tiempo
Esta sección demostrará el uso de la función unnest ()
en múltiples arreglos simultáneamente. Las matrices también pueden ser de diferentes tipos de datos.
Después de usar la función unnest ()
, cada arreglo aparecerá como una columna en la tabla con los valores de los arreglos como filas.
Podemos escribirlo como unnest (matriz1, matriz2, matriz3…)
. El siguiente ejemplo ayudará a aclarar el concepto.
SELECT * FROM
unnest
(
array [1, 2, 3],
array ['HP', 'AMD', 'APPLE']
)
AS data(ID, Company);
Mostrará una tabla con cada matriz como una columna y valores dentro como filas de esas columnas.
Tomemos otro ejemplo donde las dos matrices tienen un número desigual de elementos.
SELECT * FROM
unnest
(
array [1, 2, 3],
array ['HP', 'AMD', 'APPLE', 'DELL']
)
AS data(ID, Company);
En este ejemplo, hay una empresa más que las ID
. En este caso, el más corto se rellenará con NULLS
para compensar, y se mostrará una tabla sin errores.
Utilice la función unnest ()
de PostgreSQL con la cláusula ORDER BY
La función unnest ()
de PostgreSQL también se puede utilizar junto con la cláusula ORDER BY
. Iremos ilustrándolo con ejemplos.
Una de las formas de utilizar la cláusula ORDER BY
es mediante la ordenación de matrices. El resultado se ordenará en este caso según la segunda columna (Empresa
).
SELECT * FROM
unnest
(
array [1, 2, 3],
array ['HP', 'AMD', 'APPLE']
)
AS data(ID, Company) ORDER BY 2;
Otra forma de usar la cláusula ORDER BY
es asignando a la matriz un nombre usando AS
. El resultado se ordenará en este caso según la segunda columna (Ranking
).
SELECT * FROM
unnest
(
array['HP', 'AMD', 'APPLE'],
array[23,14,1]
)
AS data(Company, Ranking) ORDER BY Ranking;
Utilice la función unnest ()
de PostgreSQL con la cláusula LIMIT
PostgreSQL le permite usar la función unnest ()
con la cláusula LIMIT
.
En este caso, la tabla resultante (después de la expansión de arreglos) estará limitada a la condición descrita en la cláusula LIMIT
. Los siguientes ejemplos aclararán la idea.
SELECT unnest (array[1,2,3,4,5,6])
LIMIT 3;
Mostrará solo los primeros 3
valores de la matriz como filas.
También puede utilizar el comando OFFSET
con LIMIT
.
SELECT unnest (array[1,2,3,4,5,6])
LIMIT 3 OFFSET 3;
Omitirá los primeros 3
valores y mostrará solo los últimos 3
valores (4,5,6)
como filas en la tabla resultante.
Use la función unnest ()
de PostgreSQL con la cláusula DISTINCT
La cláusula DISTINCT
se usa en múltiples idiomas de bases de datos para eliminar duplicados.
En PostgreSQL, puede eliminar todos los duplicados de cualquier tipo de datos, ya sea un número entero, una cadena, etc., pero tiene la limitación de que solo puede eliminar duplicados en los datos en forma tabular.
Esta limitación dificulta la eliminación de duplicados de matrices. Sin embargo, la funcionalidad unnest ()
resuelve este problema rápidamente.
Al usar el comando unnest ()
, primero podemos convertir los valores de una matriz en forma tabular. Luego, la cláusula DISTINCT
se puede aplicar fácilmente para eliminar duplicados.
Esta idea se ilustra en el siguiente ejemplo para su comprensión.
SELECT DISTINCT unnest (array['HP', 'DELL', 'APPLE','AMD', 'HP']);
En este ejemplo, la matriz se convierte primero a formato tabular utilizando unnest ()
. Luego, se aplica la cláusula DISTINCT
para eliminar los duplicados. Como resultado, la tabla resultante tendrá HP
solo una vez.
Hello, I am Bilal, a research enthusiast who tends to break and make code from scratch. I dwell deep into the latest issues faced by the developer community and provide answers and different solutions. Apart from that, I am just another normal developer with a laptop, a mug of coffee, some biscuits and a thick spectacle!
GitHub