CodeGym /Cursos /SQL SELF /Extraindo dados de um array: unnest(),

Extraindo dados de um array: unnest(), array_length(), array_position()

SQL SELF
Nível 35 , Lição 2
Disponível

Trabalhar com arrays não é só criar e guardar eles — muitas vezes tu vai precisar extrair elementos individuais ou analisar o conteúdo. O PostgreSQL tem várias funções nativas pra isso. Bora ver como funciona cada uma.

Função unnest(): descompactando o array

A função unnest() basicamente descompacta o array, transformando cada elemento em uma linha separada. Isso é super útil quando tu precisa trabalhar com os dados do array como se fossem uma tabela.

Exemplo 1: Descompactando um array simples

Imagina que a gente tem um array com nomes de faculdades:

SELECT ARRAY['Informática', 'Matemática', 'Física'] AS faculdades;

Agora, bora extrair cada elemento como uma linha separada. Usando unnest():

SELECT unnest(ARRAY['Informática', 'Matemática', 'Física']) AS faculdade;

Resultado:

faculdade
Informática
Matemática
Física

Exemplo 2: Descompactando array numa tabela

Imagina que a gente tem uma tabela courses:

CREATE TABLE courses (
    course_id SERIAL PRIMARY KEY,
    course_name TEXT,
    tags TEXT[]
);

INSERT INTO courses (course_name, tags)
VALUES
    ('Algoritmos', ARRAY['Programação', 'Informática']),
    ('Álgebra linear', ARRAY['Matemática', 'Álgebra']),
    ('Física básica', ARRAY['Física', 'Geral']);

Agora vamos extrair todas as tags do array:

SELECT course_name, unnest(tags) AS tag
FROM courses;

Resultado:

course_name tag
Algoritmos Programação
Algoritmos Informática
Álgebra linear Matemática
Álgebra linear Álgebra
Física básica Física
Física básica Geral

Viu? Cada elemento do array vira uma linha separada na tabela.

Função array_length(): descobrindo o tamanho do array

A segunda função importante pra lidar com arrays é a array_length(). Ela retorna o tamanho do array (ou seja, quantos elementos tem) pra uma dimensão específica.

Exemplo 1: Quantos elementos tem um array unidimensional

Pega esse array aqui:

SELECT ARRAY['Maçã', 'Banana', 'Laranja'] AS frutas;

Se tu quiser saber quantas frutas tem no array:

SELECT array_length(ARRAY['Maçã', 'Banana', 'Laranja'], 1) AS tamanho;

Resultado:

tamanho
3

Aqui o 1 indica a dimensão do array. Arrays no PostgreSQL podem ter várias dimensões (tipo arrays 2D), mas isso é papo pra outro momento.

Exemplo 2: Quantos elementos tem o array numa tabela

Bora ver quantas tags cada curso tem:

SELECT course_name, array_length(tags, 1) AS quantidade_tags
FROM courses;

Resultado:

course_name quantidade_tags
Algoritmos 2
Álgebra linear 2
Física básica 2

A função basicamente diz: "Olha, tem dois elementos aqui!", o que já facilita muito na análise dos dados.

Função array_position(): procurando um valor no array

Agora, imagina que tu quer achar um elemento específico dentro do array. A função array_position() resolve isso: ela retorna a posição da primeira ocorrência do elemento.

Exemplo 1: Procurando um elemento

Pensa nesse array:

SELECT ARRAY['Vermelho', 'Azul', 'Verde', 'Amarelo'] AS cores;

Bora achar a posição do elemento "Azul":

SELECT array_position(ARRAY['Vermelho', 'Azul', 'Verde', 'Amarelo'], 'Azul') AS posicao;

Resultado:

posicao
2

Se o elemento não existir, a função retorna NULL. Olha só:

SELECT array_position(ARRAY['Vermelho', 'Azul', 'Verde', 'Amarelo'], 'Preto') AS posicao;

Resultado:

posicao
NULL

Exemplo 2: Procurando no array de uma tabela

Tu quer saber qual curso tem a tag "Informática". Primeiro, vamos achar as linhas certas:

SELECT course_name, array_position(tags, 'Informática') AS posicao
FROM courses;

Resultado:

course_name posicao
Algoritmos 2
Álgebra linear NULL
Física básica NULL

Agora adiciona um filtro pra mostrar só as linhas onde a tag existe:

SELECT course_name
FROM courses
WHERE array_position(tags, 'Informática') IS NOT NULL;

Resultado:

course_name
Algoritmos

A função array_position() deixa fácil achar dados dentro do array, por isso ela é uma das mais importantes pra trabalhar com arrays no PostgreSQL.

Usando essas funções na prática

  • unnest() — usa pra transformar arrays em linhas. Isso é essencial pra analisar dados, criar relatórios e trabalhar com tags.
  • array_length() — perfeita pra checar o tamanho do array. Por exemplo, dá pra usar pra validar dados: garantir que o array não tá vazio.
  • array_position() — ótima pra buscar elementos, seja categoria de produto, participação de estudante em projeto ou palavras-chave na descrição.

Erros comuns usando essas funções

  1. unnest() pode duplicar o número de linhas se tu usar em arrays de várias colunas ao mesmo tempo. Resolve fácil com JOIN LATERAL ou CROSS JOIN, mas fica ligado nisso.
  2. array_length() retorna NULL pra array vazio. Se teu array pode ser vazio, lembra de checar isso separado.
  3. array_position() pode retornar NULL se o elemento não existir. Então sempre considera esse caso nos filtros (IS NOT NULL).

Exemplos do mundo real

Arrays no PostgreSQL não são só teoria, são ferramentas que funcionam muito bem em projetos reais. Por exemplo, se tu tem um blog e cada post tem uma lista de tags — array facilita filtrar posts por tema ou até montar um ranking das categorias mais populares.

Ou então, se tu analisa o comportamento de usuários que escolhem vários cursos ou produtos. Todas essas preferências ficam de boa num array — e é fácil de manipular depois.

E arrays também ajudam a validar dados: com array_length() tu pode, por exemplo, limitar o número de itens — tipo, não deixar o usuário escolher mais de cinco opções.

Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION