meha.devmedia.com.br/site/netgold/edicao28SQL/artigo7sql28.zip">Clique aqui para ler esse artigo em PDF.imagem_pdf.jpg

 

capaSQL28.JPG

 

Clique aqui para ler todos os artigos desta edição

 

 

 

Visões – uma abordagem prática

 

Visões permitem prover foco, simplificação e personalização de tabelas no seu banco de dados. Também oferecem um mecanismo de segurança (restringem os usuários de ver tabelas ‘inteiras’). Além disto, as visões mantêm os dados independentes da estrutura do banco de dados.

Visões em prol da flexibilidade

Tal como a operação join, a visão é uma marca registrada do modelo relacional. Visões criam tabelas virtuais a partir de declarações SELECT e abrem um mundo de flexibilidade para a análise e manipulação de dados. Podemos encarar uma visão como uma moldura ou janela móvel, através da qual podemos ver dados. Esta metáfora explica por que as pessoas falam de olhar para dados ou mudar os dados "através" de uma visão.

Visões não são cópias dos dados das tabelas ou visões das quais são derivadas. Na realidade, as visões são chamadas de tabelas virtuais, porque não existem como entidades independentes no banco de dados do mesmo modo que as tabelas "reais" (o termo ANSI para uma visão é viewed table; uma tabela do banco de dados nativa é uma base table). Podemos consultar visões da mesma forma que consultamos tabelas. No entanto, a modificação de dados através de visões é restrita.

         O catálogo do sistema armazena a definição de visões - o nome da visão e a declaração SELECT. Quando um usuário chama uma visão, o sistema de banco de dados associa os dados apropriados à mesma. Uma visão apresenta o resultado final deste processo, ocultando todos os detalhes técnicos.

Criar visões

Como as tabelas, visões têm comandos CREATE e DROP (DROP VIEW só se aplica à visão, não à tabela base subjacente). Acessamos os dados com declarações SELECT. A seguir, a sintaxe simplificada de uma declaração de definição de visão:

CREATE VIEW view_name [(column_name [, column_name]...)]
AS
SELECT_statement

O seguinte exemplo cria uma visão que exibe os nomes de autores que moram em Campinas, juntamente com o nome dos seus livros publicados. A visão é chamada autores_campinas. A sua declaração SELECT puxa dados de três tabelas.

create view autores_campinas (NomeAutor, TituloLivro)
as
select autores.nome, livros.titulo
from autores, livros, livrosautores
where autores.id = livrosautores.au_id
 and livros.id = livrosautores.livro_id
 and autores.cidade = 'CAMPINAS'

Como vimos, a declaração SELECT não precisa ser uma seleção simples de uma tabela particular. Podemos criar uma visão que usa mais de uma tabela, ou até mesmo combinações de objetos conforme a lista a seguir:

 

§         Uma única tabela;

§         Mais de uma tabela;

§         Outra visão;

§         Visões múltiplas;

§         Combinações de visões e tabelas

 

As declarações SELECT podem ter quase qualquer complexidade, incluindo o uso de cláusulas GROUP BY e HAVING. Em visões de objetos múltiplos, podemos usar joins, subqueries ou combinações das duas para construir conexões às tabelas e visões que estão por trás da visão.

Apesar dos muitos tipos de visões que podem ser criadas, existem limites, os quais variam de SQL para SQL. Basicamente, as restrições têm duas fontes:

 

·         Elementos não permitidos dentro de declarações CREATE VIEW (ORDER BY e às vezes JOIN).

·         Elementos permitidos dentro de declarações CREATE VIEW (computed columns, aggregates), que podem limitar a modificação de dados permitida pela visão, devido ao problema de interpretar declarações de modificação de dados.

 

Exibindo dados através visões

Quando o SQL recebe um comando CREATE VIEW, não executa a declaração SELECT após a palavra chave. Em lugar disto, armazena a declaração SELECT no catálogo do sistema.

Para visualizarmos dados através da visão, temos que consultar a visão, da mesma maneira que faríamos com uma tabela.

select * 
from autores_campinas
 
NomeAutor      TituloLivro
============   ===============================================
Jose Almeida   Introdução ao SQL Server
Jose Almeida   Delphi Passo a Passo
Alfredo F.     J2ME Curso Pratico
Hugo Ramos     DreamWeaver MX Tutorial
Jailson M.             ASP.NET sem misterios

Uma visão em uma declaração SELECT funciona como em uma tabela. Podemos:

 

§         Mudar a ordem das colunas na exibição;

§         Adicionar rótulos de exibição;

§         Limitar as linhas com condições WHERE;

§         Agrupar linhas;

§         Limitar os resultados de agrupamentos HAVING;

§         Ordenar os resultados.

 

Por exemplo, poderíamos escrever uma consulta de autores_campinas mudando a posição das colunas, adicionando rótulos de exibição e ordenando os resultados:

select TituloLivro as Titulo, NomeAutor as Nome
from autores_campinas
order by Titulolivro
 
Titulo                  Nome
============   ============================================
Jailson M.             ASP.NET sem misterios
Jose Almeida   Delphi Passo a Passo
Hugo Ramos     DreamWeaver MX Tutorial
Jose Almeida   Introdução ao SQL Server
Alfredo F.     J2ME Curso Pratico

A seguir, uma consulta da visão autores_campinas com GROUP BY e HAVING:

select NomeAutor, count(TituloLivro)
from autores_campinas
group by NomeAutor
having count(TituloLivro) > 1
 
NomeAutor                                 ... 
                    
Quer ler esse conteúdo completo? Tenha acesso completo