Cursos / Redes de Computadores / Conceitos de Banco de Dados / Aula

arrow_back Aula 07 - Linguagem SQL - Subconsultas e 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 10. É 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 10 - Tela do MySQL após os comandos CREATE VIEW e SHOW TABLES.
Tela do <span class='italico'>My</span>SQL após os comandos CREATE VIEW e SHOW TABLES.
Fonte: MySQL 5.7 Command Line Client

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 11.

Figura 11 - Tela do MySQL após a visualização da estrutura da visão usando o comando DESC.
Tela do <span class='italico'>My</span>SQL após a visualização da estrutura da <span class='strong'>visão</span> usando o comando DESC.
Fonte: MySQL 5.7 Command Line Client

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 12.

Figura 12 - Tela do MySQL após os comandos SELECTs para visualização da quantidade total de produtos vendidos.
Tela do <span class='italico'>My</span>SQL após os comandos SELECTs para visualização da quantidade total de produtos vendidos.
Fonte: MySQL 5.7 Command Line Client

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 04 - Introdução a Visões

Versão 5.3 - Todos os Direitos reservados