Introdução
Uma view é uma consulta salva com nome — ela não armazena dados fisicamente (na maioria dos casos), apenas guarda a definição de um SELECT. Toda vez que você consulta a view, o banco executa a query por trás dela e devolve o resultado como se fosse uma tabela.
CREATE VIEW clientes_ativos AS
SELECT id, nome, email FROM clientes WHERE status = 'ativo';
-- Depois, você consulta como se fosse uma tabela normal:
SELECT * FROM clientes_ativos WHERE nome LIKE 'A%';
Enter fullscreen mode Exit fullscreen mode
Pense na view como um "apelido inteligente" para uma query complexa. Em vez de reescrever um JOIN de 4 tabelas toda vez, você cria a view uma vez e reutiliza SELECT * FROM minha_view.
Por que usar views (motivação real)
- Simplificação: esconder a complexidade de JOINs/subqueries repetitivos atrás de um nome simples.
- Segurança: dar acesso a uma view que expõe só algumas colunas (ex: sem salário, sem CPF), sem dar acesso à tabela real.
- Abstração/desacoplamento: se a estrutura das tabelas mudar, você ajusta só a view, e as queries que a usam continuam funcionando sem alteração.
-
Reuso: centralizar lógica de negócio (ex: "o que conta como pedido válido") em um único lugar, em vez de repetir o mesmo
WHEREem 10 queries diferentes. -
Legibilidade: transformar um relatório complicado em algo que qualquer pessoa entende:
SELECT * FROM vendas_por_mes.
Criando Views
Sintaxe básica
CREATE VIEW nome_da_view AS
SELECT coluna1, coluna2, ...
FROM tabela
WHERE condicao;
Enter fullscreen mode Exit fullscreen mode
Exemplo simples
CREATE VIEW produtos_em_estoque AS
SELECT id, nome, preco, quantidade
FROM produtos
WHERE quantidade > 0;
Enter fullscreen mode Exit fullscreen mode
Agora, em vez de repetir WHERE quantidade > 0 toda vez, qualquer pessoa faz:
SELECT * FROM produtos_em_estoque ORDER BY preco DESC;
Enter fullscreen mode Exit fullscreen mode
Exemplo com JOIN (caso mais comum no mundo real)
Views brilham quando escondem a complexidade de múltiplas tabelas relacionadas:
CREATE VIEW pedidos_detalhados AS
SELECT
p.id AS pedido_id,
c.nome AS cliente,
pr.nome AS produto,
p.quantidade,
p.quantidade * pr.preco AS total,
p.data_pedido
FROM pedidos p
JOIN clientes c ON p.cliente_id = c.id
JOIN produtos pr ON p.produto_id = pr.id;
Enter fullscreen mode Exit fullscreen mode
Sem a view, toda vez que alguém quisesse ver um pedido "completo" (com nome do cliente e do produto, não só os IDs), precisaria escrever esse JOIN triplo de novo. Com a view:
SELECT * FROM pedidos_detalhados WHERE cliente = 'Maria Silva';
Enter fullscreen mode Exit fullscreen mode
Modificando Views
Existem duas abordagens, dependendo do banco:
Abordagem 1: CREATE OR REPLACE VIEW (PostgreSQL, MySQL, Oracle)
Substitui a definição inteira da view de uma vez:
CREATE OR REPLACE VIEW produtos_em_estoque AS
SELECT id, nome, preco, quantidade, categoria
FROM produtos
WHERE quantidade > 0;
Enter fullscreen mode Exit fullscreen mode
Regra importante: CREATE OR REPLACE normalmente só permite adicionar colunas no final, ou mudar a lógica do WHERE/JOIN — você não pode remover uma coluna ou mudar a ordem das colunas existentes sem dar DROP na view primeiro. Se tentar, o banco geralmente recusa com um erro.
Abordagem 2: ALTER VIEW (SQL Server, também existe em outros)
ALTER VIEW produtos_em_estoque AS
SELECT id, nome, preco, quantidade, categoria
FROM produtos
WHERE quantidade > 0;
Enter fullscreen mode Exit fullscreen mode
Funciona de forma equivalente ao CREATE OR REPLACE, mas é a sintaxe usada no SQL Server (que não aceita CREATE OR REPLACE VIEW — lá, CREATE VIEW falha se a view já existir, e você precisa usar ALTER VIEW para modificar uma existente).
Por que "substituir" em vez de “editar campo por campo”?
Views não têm um equivalente ao ALTER TABLE ADD COLUMN — você não "adiciona uma coluna" a uma view incrementalmente. Você reescreve a query inteira com CREATE OR REPLACE/ALTER VIEW. Isso é diferente de tabelas, e costuma confundir quem vem de ALTER TABLE.
O que acontece com permissões e dependências ao modificar
- Modificar uma view preserva as permissões (GRANT) já concedidas a ela na maioria dos bancos — não precisa re-conceder acesso.
- Se outras views dependem da view que você está alterando (lembra do exemplo
vendas_por_mesem cima depedidos_detalhados?), mudar a view de baixo pode quebrar as views de cima se você remover uma coluna que elas usam. Vale sempre mapear as dependências antes de alterar uma view "de base".
0 Comments
Log in to join the conversation.No comments yet. Be the first to share your thoughts.