Cursos / Informática para Internet / Banco de Dados / Aula

arrow_back Aula 14 - Linguagem SQL – VISÕES

VIEWS

Visões (views) em SQL são consultas armazenadas em uma estrutura de fácil acesso baseadas num comando SELECT. Essa consulta armazenada funciona como uma tabela virtual, com comportamento similar a uma tabela real, entretanto, sem armazenar dados, não existindo como uma entidade independente no banco de dados. Os dados que são exibidos nas visões são gerados dinamicamente toda vez que a visão é referenciada.

O SGBD armazena apenas a definição das visões (nome da visão e o comando SELECT). Quando o usuário chama uma visão, o sistema de banco de dados associa os dados apropriados a ela. Uma visão apresenta o resultado final desse processo, ocultando todos os detalhes técnicos.

A utilização de visões permite simplificar e personalizar tabelas no seu banco de dados. Também oferece um mecanismo de segurança (restringindo o acesso de usuários a campos predeterminados). Além disso, as visões mantêm os dados independentes da estrutura do banco de dados, garantindo flexibilidade para a análise e manipulação de dados.

A instrução para criar uma visão é bastante simples, basta adicionar as palavras CREATE VIEW antes da instrução da consulta que se deseja armazenar. A sintaxe de criação de uma visão é descrita no destaque abaixo.

AخA
1
mysql> CREATE VIEW nome_da_visão AS
2
    SELECT  atributo1, atributo2, ...
3
    FROM nome_da_tabela1, nome_da_tabela2, ...
4
    WHERE condição;

Nessa expressão, no campo nome_da_visão deve-se inserir o nome que se deseja atribuir para a visão, nome esse que deve seguir as mesmas regras usadas para os nomes das tabelas. Após a cláusula AS, tem-se qualquer comando SELECT válido.

Vamos exercitar a criação de VIEWS no banco de dados sistvendas para entendermos melhor o seu conceito? Na aula anterior sobre subconsultas, um dos exemplos que foram trabalhados foi a consulta aos nomes de todos os produtos e suas quantidades que foram vendidas. Visto que esse tipo de pesquisa tende a ser realizado diariamente num banco de dados de um sistema de vendas, é muito útil criar uma VIEW contendo essa consulta. A criação de uma VIEW nesse caso simplifica a consulta e evita que diariamente o usuário tenha de escrever uma consulta complexa, correndo o risco de cometer algum erro. O comando para criar essa VIEW é descrito no destaque a seguir.

4
1
mysql> CREATE VIEW produtos_vendidos AS
2
    SELECT prod_nome, (SELECT SUM(comp_total)  
3
    FROM compras WHERE prod_codigo= comp_codproduto)
4
    AS vendidos FROM produtos;

A resposta do sistema SGBD para o referido comando é ilustrada na Figura 1. É interessante notar que a visão aparece no esquema do banco de dados como se fosse uma tabela, conforme pode ser verificado usando a instrução SHOW TABLES após a criação da visão, que exibe como resposta o nome das tabelas contidas no banco de dados em questão.

Figura 01 - Tela do MySQL após os comandos CREATE VIEW e SHOW TABLES.
Tela do MySQL após os comandos CREATE VIEW e SHOW TABLES.

Mas como fazer para visualizar a estrutura de uma visão, ou seja, a estrutura de uma tabela virtual? A resposta a essa pergunta é o comando DESC. Para verificar a estrutura de uma visão é necessário utilizar o comando DESC, conforme apresentado no destaque a seguir.

1
1
mysql> DESC nome_da_visão;

A resposta do SGBD ao comando DESC produtos_vendidos é ilustrada na Figura 2.

Figura 02 - Tela do MySQL após a visualização da estrutura da visão usando o comando DESC.
Tela do MySQL após a visualização da estrutura da <span class='strong'>visão</span> usando o comando DESC.

Observe que a tabela virtual produtos_vendidos contém dois campos: prod_nome e vendidos. O campo vendidos é o resultado da seguinte subconsulta:

2
1
(SELECT SUM(comp_total) FROM compras
2
    WHERE prod_codigo= comp_codproduto)

Essa subconsulta ou consulta interna acessa os dados da tabela compras, enquanto a consulta externa acessa as informações da tabela produtos. Portanto, a tabela virtual produtos_vendidos contém informações pertencentes às tabelas produtos e compras, permitindo flexibilidade e simplicidade para a análise dos dados.

Você deve estar se perguntado como fazer para visualizar os dados da consulta que foi armazenada como uma VIEW. Só faz sentido criar uma VIEW se a visualização dos seus dados for realizada de forma simplificada. E é exatamente isso que acontece. A sintaxe para visualizar todos os dados de uma VIEW é descrita no destaque a seguir.

1
1
mysql> SELECT * FROM nome_da_visão;

Sendo assim, para visualizarmos todos os dados da VIEW produtos_vendidos, basta digitar o seguinte comando:

1
1
mysql> SELECT * FROM produtos_vendidos;

A resposta do sistema ao comando acima é ilustrada na Figura 3.

Figura 03 - Tela do MySQL após os comandos SELECTs para visualização da quantidade total de produtos vendidos.
Tela do MySQL após os comandos SELECTs para visualização da quantidade total de produtos vendidos.

Observe que a resposta do sistema é exatamente a mesma dada pelo comando da consulta em si. A diferença é que com a utilização de visões, o comando necessário para visualizar os dados é simples, tornando a consulta muito mais simples e prática.

É importante ressaltar que o SGBD armazena apenas o nome da visão e o comando SELECT associado. Os dados visualizados nas visões são gerados dinamicamente toda vez que é solicitada uma consulta sobre a VIEW. Isso implica em uma visão estar sempre atualizada, ou seja, ao se modificar dados nas tabelas referenciadas na descrição da visão, uma consulta a visão reflete automaticamente essas alterações.

Vale salientar que uma consulta a uma visão pode ser realizada da mesma forma que uma consulta a uma tabela. O segredo é que a visão se comporta como uma tabela de verdade, no entanto, sem guardar os dados, por isso chamada de uma tabela virtual. Vejamos o seguinte exemplo: realizar uma consulta à visão com o objetivo de determinar quais os produtos que já foram vendidos.

1
1
mysql> SELECT prod_nome FROM produtos_vendidos WHERE vendidos > 0;

Conforme pode ser observado nessa consulta, na cláusula SELECT tem-se apenas o atributo prod_nome; na cláusula FROM tem-se o nome da visão e na cláusula WHERE tem-se a condição em questão, no caso, que o atributo vendidos deve ser maior que 0.

Quando uma visão não é mais necessária, pode-se excluí-la utilizando o comando descrito a seguir.

1
1
mysql>DROP VIEW nome_da_visão;
play_circle_filled
Vídeo 02 - Introdução a Visões

Versão 5.3 - Todos os Direitos reservados