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.