CodeGym /Cursos /SQL SELF /Uso de arrays ( ARRAY)

Uso de arrays ( ARRAY)

SQL SELF
Nivel 16 , Lección 2
Disponible

Hoy vamos a charlar un poco sobre los arrays, una de las herramientas potentes de PostgreSQL que te permite guardar una lista de valores del mismo tipo dentro de una sola columna. Más adelante veremos arrays con más detalle en los siguientes niveles.

Cuando se habla de "arrays", enseguida se piensa en listas. Piensa en cómo apuntas tu lista de la compra antes de ir al súper: manzanas, plátanos, leche, pan. En PostgreSQL un array es como esa lista, donde puedes guardar varios valores en un solo campo, y cada valor es del mismo tipo de dato. Por ejemplo, un array de números, un array de textos, un array de fechas, etc.

Vamos con algunos ejemplos.

Array de números:

{1, 2, 3, 4}

Array de cadenas:

{"manzana", "plátano", "cereza"}

Array de fechas:

{2024-10-01, 2024-10-02, 2024-10-03}

Un array te permite guardar muchos valores en un solo campo, ahorrando espacio en la tabla y dándote más flexibilidad en las consultas.

¿Para qué sirven los arrays? Ventajas principales

Almacenamiento compacto de datos: guardar varios valores en un solo campo. Esto es especialmente útil para datos que están lógicamente relacionados. Por ejemplo, una lista de etiquetas para un artículo o una lista de notas de un estudiante. ¿Hace falta crear una tabla aparte solo para un par de etiquetas?

Comodidad en las consultas: los arrays te permiten obtener de golpe toda una lista de valores de un campo, y también manipular fácilmente los elementos individuales del array.

Rendimiento: en algunos casos, los arrays te evitan tener que crear tablas adicionales para datos relacionados, lo que puede simplificar la arquitectura de la base de datos y acelerar el desarrollo. Y eso siempre mola.

¿Cómo trabajar con arrays en PostgreSQL?

Crear un array en SELECT

Para definir un array puedes usar el constructor ARRAY[]. Mira este ejemplo:

-- Ejemplo de array de números
SELECT ARRAY[1, 2, 3, 4];

-- Ejemplo de array de cadenas
SELECT ARRAY['manzana', 'plátano', 'cereza'];

Demasiado fácil. Vamos a crear una tabla y probar a sacar algo de ella.

Crear una tabla con arrays

Para empezar, vamos a crear una tabla donde una de las columnas será un array.

id name - VARCHAR(50) subjects - TEXT[]
1 Alex {Matemáticas,Física}
2 Maria {Química,Biología,Inglés}
3 Peter {Informática}

Veamos qué nos ha salido:

SELECT * FROM students;
id name subjects
1 Alex {Matemáticas,Física}
2 Maria {Química,Biología,Inglés}
3 Peter {Informática}

Extraer datos de arrays

Para sacar datos de un array, PostgreSQL te da varias funciones y operadores.

Extraer un elemento del array

Para pillar un elemento del array por su índice, se usan corchetes []. Ojo, que la numeración empieza en 1 (no en 0 como en la mayoría de lenguajes de programación).

-- Pillar la primera asignatura de cada estudiante
SELECT name, subjects[1] AS primera_asignatura FROM students;

Y el resultado sería así:

name primera_asignatura
Alex Matemáticas
Maria Química
Peter Informática

Extraer toda la fila del array

Para sacar todos los elementos del array, se usa un SELECT normal:

SELECT name, subjects FROM students;

Buscar valores dentro de un array

A veces necesitas saber si un array contiene un valor concreto. Para eso se usa el operador ANY.

-- Seleccionar estudiantes que estudian "Matemáticas"
SELECT name
FROM students
WHERE 'Matemáticas' = ANY(subjects);

El resultado de la consulta:

name
Alex

En PostgreSQL hay un montón de funciones y operadores para trabajar con arrays, pero de eso ya hablaremos en los próximos niveles :P

Errores típicos al trabajar con arrays

Confundir la indexación con 0 y 1.

En PostgreSQL la indexación de arrays empieza en 1. Si vienes de lenguajes como Python o JavaScript, esto puede liarte fácil.

Arrays vacíos.

Un array vacío {} y NULL son cosas distintas en PostgreSQL. Si comparas arrays, no confundas estos conceptos.

Trabajar con arrays muy grandes.

Guardar un montón de datos en un array puede hacer que las consultas tarden más. Usa arrays para cantidades pequeñas de datos.

Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION