CodeGym /Cursos /SQL SELF /Usando arrays ( ARRAY)

Usando arrays ( ARRAY)

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

Hoje vamos trocar uma ideia sobre arrays — uma das ferramentas mais maneiras do PostgreSQL, que deixa você guardar uma lista de valores do mesmo tipo dentro de uma coluna só. A gente vai ver arrays com mais detalhes nos próximos níveis.

Quando falam "arrays", logo vem à cabeça listas. Pensa em como você faz uma lista de compras antes de ir no mercado: maçã, banana, leite, pão. No PostgreSQL, um array é tipo essa lista, onde dá pra guardar vários valores num campo só, e cada valor é do mesmo tipo de dado. Tipo, array de números, array de textos, array de datas e por aí vai.

Vamos ver uns exemplos.

Array de números:

{1, 2, 3, 4}

Array de strings:

{"apple", "banana", "cherry"}

Array de datas:

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

O array deixa você guardar vários valores num campo só, economizando espaço na tabela e deixando as queries mais flexíveis.

Pra que servem arrays? Principais vantagens

Armazenamento compacto: guardar vários valores num campo só. Isso é muito útil pra dados que têm relação entre si. Tipo, lista de tags de um artigo ou lista de notas de um estudante. Precisa mesmo criar uma tabela só pra dois tags?

Facilidade na consulta: arrays deixam você pegar logo a lista toda de valores de um campo, e também mexer fácil nos elementos do array.

Performance: em alguns casos, arrays evitam que você tenha que criar tabelas extras pra dados relacionados, o que pode simplificar a arquitetura do banco e acelerar o desenvolvimento. Quem não curte isso, né?

Como trabalhar com arrays no PostgreSQL?

Criando um array no SELECT

Pra criar um array, dá pra usar o construtor ARRAY[]. Olha só:

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

-- Exemplo de array de strings
SELECT ARRAY['apple', 'banana', 'cherry'];

Muito fácil, né? Agora bora criar uma tabela e tentar selecionar alguma coisa nela.

Criando uma tabela com arrays

Pra começar, vamos criar uma tabela onde uma das colunas vai ser um array.

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

Bora ver como ficou:

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

Extraindo dados de arrays

Pra pegar dados de um array, o PostgreSQL tem várias funções e operadores.

Pegar um elemento do array

Pra pegar um elemento do array pelo índice, usa colchetes []. Só fica ligado que a contagem começa do 1 (e não do 0, igual na maioria das linguagens de programação).

-- Pegar a primeira matéria de cada estudante
SELECT name, subjects[1] AS primeira_materia FROM students;

E o resultado é esse aqui:

name primeira_materia
Alex Matemática
Maria Química
Peter Informática

Pegar o array inteiro

Pra pegar todos os elementos do array, é só fazer um SELECT normal:

SELECT name, subjects FROM students;

Procurar valores dentro do array

Às vezes a gente precisa saber se o array tem um valor específico. Pra isso, usa o operador ANY.

-- Selecionar estudantes que estudam "Matemática"
SELECT name
FROM students
WHERE 'Matemática' = ANY(subjects);

O resultado da query:

name
Alex

No PostgreSQL tem um monte de funções e operadores pra mexer com arrays, mas isso você vai ver nos próximos níveis :P

Erros comuns ao trabalhar com arrays

Misturar indexação começando do 0 e do 1.

No PostgreSQL, o índice do array começa do 1. Se você tá acostumado com linguagens tipo Python ou JavaScript, isso pode confundir fácil.

Arrays vazios.

Array vazio {} e NULL são coisas diferentes no PostgreSQL. Se for comparar arrays, não confunde esses dois, beleza?

Trabalhar com arrays muito grandes.

Guardar um monte de dado num array pode deixar as queries mais lentas. Usa arrays pra volumes pequenos de dados.

2
Tarefa
SQL SELF, nível 16, lição 2
Bloqueado
Busca de valores dentro de um array
Busca de valores dentro de um array
2
Tarefa
SQL SELF, nível 16, lição 2
Bloqueado
Extraindo o primeiro elemento de um array
Extraindo o primeiro elemento de um array
Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION