2.19. Criando Views
Os SGBD-R fornecem mecanismos para criação de visões (views) que são objetos do banco associados a uma consulta. O comando CREATE VIEW
permite atribuirmos um nome a uma consulta SQL do tipo SELECT
que ficará salva no banco de dados e que poderá ser referida por este nome dentro de outras consultas do tipo SELECT
. Deve-se observar que as linhas da view não são materializadas fisicamente no banco de dados. O que é feito, é a gravação da consulta subjacente. Portanto, não há riscos de duplicação de dados.
A sintaxe básica do comando CREATE VIEW
é a seguinte:
CREATE [ OR REPLACE ] VIEW nome-view AS consulta;
Dica
A sintaxe completa do comando de criação de visões pode ser vista no manual do PostgreSQL: CREATE VIEW.
Vamos criar uma view chamada professor_disciplina
que nos forneça uma forma rápida de referenciar a lista de disciplinas por professor:
CREATE OR REPLACE VIEW professor_disciplina AS
SELECT professor.nome, disciplina.*
FROM professor INNER JOIN disciplina ON professor.codigo = disciplina.professor_codigo;
Agora, podemos utilizar essa função em uma consulta SQL do tipo SELECT
como mostrado abaixo:
SELECT * FROM professor_disciplina;
Resultado:
nome | codigo | titulo | creditos | professor_codigo
----------+--------+-------------------+----------+------------------
Romildo | 1 | Matemática | 6 | 1
Romildo | 2 | Fisica | 4 | 1
Thales | 3 | Bilogia | 2 | 2
Karine | 4 | Quimica | 3 | 3
Tamara | 5 | Geografia | 2 | 4
Tamara | 6 | Historia | 2 | 4
Tamara | 7 | Lingua Portuguesa | 4 | 4
Carolina | 8 | Lingua Inglesa | 2 | 5
Carolina | 9 | Lingua Francesa | 1 | 5
Tamara | 10 | Ciências | 1 | 4
(10 rows)
Podemos também utilizar a cláusulo WHERE
para selecionar linhas específicas retornadas pela view:
SELECT *
FROM professor_disciplina
WHERE nome IN ('Romildo', 'Karine', 'Carolina');
Resultado:
nome | codigo | titulo | creditos | professor_codigo
----------+--------+-----------------+----------+------------------
Romildo | 1 | Matemática | 6 | 1
Romildo | 2 | Fisica | 4 | 1
Karine | 4 | Quimica | 3 | 3
Carolina | 8 | Lingua Inglesa | 2 | 5
Carolina | 9 | Lingua Francesa | 1 | 5
(5 rows)
Uma view é tratada como uma subconsulta ou tabela, de modo que podemos faezr junções também:
SELECT *
FROM professor_disciplina INNER JOIN estudante_disciplina USING (codigo);
Nota
O PostgreSQL também suporta o conceito de views materializadas, isto é, views que são capazes de persistir os resultados.
A sintaxe básica para criação de views materializadas é a seguinte:
CREATE MATERIALIZED VIEW nome-view AS consulta;
Apesar de se parecer com um comando de criação de tabelas a partir de uma consulta (CREATE TABLE nome-tabela AS consulta
), esse recurso introduz algumas facilidades, como o uso do comando REFRESH MATERIALIZED VIEW nome-view
para atualizar o conteúdo. Além disso, sem uma programação prévia, os objetos do tipo view não podem ser usados para inserção ou atualização de linhas.
Dica
A sintaxe completa do comando de criação de visões materializadas pode ser vista no manual do PostgreSQL: CREATE MATERIALIZED VIEW.
Dica
Veja também a discussão apresentada na Seção 41.2. Views and the Rule System.