CodeGym /Cursos /SQL SELF /Views ( VIEW) no PostgreSQL

Views ( VIEW) no PostgreSQL

SQL SELF
Nível 13, Lição 4
Disponível

Às vezes as queries SQL ficam grandes demais, complicadas e repetitivas. Tipo, você monta um relatório de estudantes com as médias das notas e a quantidade de cursos — e acaba escrevendo o mesmo subquery em cinco lugares diferentes. Pra não ficar copiando tudo de novo, usa uma view — ou seja, um VIEW.

VIEW é tipo uma “query salva”, que você pode dar um nome e usar como se fosse uma tabela. Ela não guarda os dados, só a estrutura da query.

Isso é especialmente útil quando você quer:

  • deixar o SQL mais fácil de ler;
  • reaproveitar uma seleção complicada;
  • esconder detalhes técnicos dos usuários;
  • separar níveis de acesso (mostrar só os dados que precisa).

Como funciona um VIEW?

Criar uma view é tipo criar uma pseudo-tabela baseada numa query SELECT. Por exemplo:

CREATE VIEW student_avg_grades AS
SELECT 
    s.student_id,
    s.name,
    AVG(g.grade) AS avg_grade
FROM 
    students s
JOIN 
    grades g ON s.student_id = g.student_id
GROUP BY 
    s.student_id, s.name;

Agora você pode usar student_avg_grades como se fosse uma tabela normal:

SELECT * FROM student_avg_grades WHERE avg_grade > 4.5;

Exemplo da faculdade

Você vive analisando estudantes, os cursos deles e as notas. Imagina que precisa montar um relatório resumido pra cada estudante:

  • nome,
  • quantidade de matrículas em cursos,
  • nota média.

Se tentar fazer tudo numa query só — vai ficar gigante e difícil de entender. Muito melhor dividir a tarefa: primeiro cria duas views (VIEW), depois junta elas.

Tabela students

id name
1 Alex Lin
2 Anna Song
3 Maria Chi
4 Dan Seth

Tabela enrollments

student_id course_id grade
1 1 90
1 2 85
2 2 88
2 3 91
3 1 75
3 3 NULL
  1. View: quantidade de cursos

Essa view conta quantos cursos cada estudante tem:

CREATE VIEW student_course_count AS
SELECT 
    student_id,
    COUNT(*) AS course_count
FROM 
    enrollments
GROUP BY student_id;

Resultado:

name
Alex Lin
Anna Song
Maria Chi
  1. View: nota média E essa aqui — a nota média do estudante (se não tem nota — NULL, e não conta):
CREATE VIEW student_avg_grade AS
SELECT
student_id,
AVG(grade) AS avg_grade
FROM
enrollments
WHERE grade IS NOT NULL
GROUP BY student_id;
  1. Usando essas VIEW
SELECT
    s.name,
    c.course_count,
    a.avg_grade
FROM 
    students s
LEFT JOIN student_course_count c ON s.student_id = c.student_id
LEFT JOIN student_avg_grade a ON s.student_id = a.student_id;

Agora sua query tá limpa e fácil de entender. E o melhor — fica fácil de manter.

Atualização de VIEW

Views normalmente não guardam dados — são só um "envelope" em volta da query. Mas dá pra usar até pra atualizar dados, se a VIEW seguir algumas regras (tipo, sem JOIN, GROUP BY, agregações e subqueries).

Exemplo de view que pode ser atualizada:

CREATE VIEW active_students AS
SELECT * FROM students WHERE active = true;

Agora dá pra rodar:

UPDATE active_students SET name = 'Ivan Petrov' WHERE student_id = 2;

Mas se a VIEW for complicada (tipo, tem JOIN ou GROUP BY), ela vira só leitura. Pra atualizar, dá pra usar triggers INSTEAD OF, mas aí já é nível avançado.

Como apagar ou mudar uma VIEW

Apagar:

DROP VIEW student_avg_grade;

Atualizar:

CREATE OR REPLACE VIEW student_avg_grade AS
SELECT student_id, ROUND(AVG(grade), 2) AS avg_grade
FROM grades
GROUP BY student_id;

Exemplos: quando VIEW é especialmente útil

  1. Relatórios

Uma VIEW — uma lógica. Você pode criar report_enrollments_by_month, report_payments_by_year e por aí vai.

  1. Separar acesso

Cria uma VIEW que mostra só dados limitados (tipo, sem dados pessoais) e libera acesso só pra ela.

  1. Reaproveitar

Ao invés de copiar um subquery — dá um nome pra ele como VIEW.

Dicas

  • Dê nomes que façam sentido: view_avg_scores_by_group, active_users_view — assim fica fácil de ler.
  • Não faça cadeia de VIEW em VIEW em VIEW — isso só complica pra entender e debugar.
  • Fique de olho na performance: O PostgreSQL recalcula a VIEW toda vez que você consulta, se não for um MATERIALIZED VIEW.

VIEW é uma das ferramentas mais simples e úteis do PostgreSQL. Não precisa aprender nada novo, só mudar o jeito de pensar: “Será que não vale salvar essa query e usar como tabela?” Se sua query tá ficando gigante — provavelmente ela merece virar uma VIEW.

2
Tarefa
SQL SELF, nível 13, lição 4
Bloqueado
Criação de uma visualização simples
Criação de uma visualização simples
2
Tarefa
SQL SELF, nível 13, lição 4
Bloqueado
View com união de dados de várias tabelas
View com união de dados de várias tabelas
1
Pesquisa/teste
SELECTs aninhados, nível 13, lição 4
Indisponível
SELECTs aninhados
SELECTs aninhados
Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION