SQL - usando visualizações

Uma visualização nada mais é do que uma instrução SQL armazenada no banco de dados com um nome associado. Uma visão é, na verdade, uma composição de uma tabela na forma de uma consulta SQL predefinida.

Uma visualização pode conter todas as linhas de uma tabela ou selecionar linhas de uma tabela. Uma visão pode ser criada a partir de uma ou várias tabelas que dependem da consulta SQL escrita para criar uma visão.

Visualizações, que são um tipo de tabelas virtuais, permitem que os usuários façam o seguinte -

  • Estruture os dados de uma maneira que os usuários ou classes de usuários considerem natural ou intuitiva.

  • Restrinja o acesso aos dados de forma que um usuário possa ver e (às vezes) modificar exatamente o que precisa e nada mais.

  • Resuma os dados de várias tabelas que podem ser usadas para gerar relatórios.

Criando Vistas

As visualizações do banco de dados são criadas usando o CREATE VIEWdeclaração. As visualizações podem ser criadas a partir de uma única tabela, várias tabelas ou outra visualização.

Para criar uma visualização, um usuário deve ter o privilégio de sistema apropriado de acordo com a implementação específica.

O básico CREATE VIEW a sintaxe é a seguinte -

CREATE VIEW view_name AS
SELECT column1, column2.....
FROM table_name
WHERE [condition];

Você pode incluir várias tabelas em sua instrução SELECT de maneira semelhante à usada em uma consulta SQL SELECT normal.

Exemplo

Considere a tabela CLIENTES com os seguintes registros -

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

A seguir está um exemplo para criar uma visão da tabela CUSTOMERS. Essa visualização seria usada para ter o nome e idade do cliente da tabela CUSTOMERS.

SQL > CREATE VIEW CUSTOMERS_VIEW AS
SELECT name, age
FROM  CUSTOMERS;

Agora, você pode consultar CUSTOMERS_VIEW de maneira semelhante à consulta a uma tabela real. A seguir está um exemplo para o mesmo.

SQL > SELECT * FROM CUSTOMERS_VIEW;

Isso produziria o seguinte resultado.

+----------+-----+
| name     | age |
+----------+-----+
| Ramesh   |  32 |
| Khilan   |  25 |
| kaushik  |  23 |
| Chaitali |  25 |
| Hardik   |  27 |
| Komal    |  22 |
| Muffy    |  24 |
+----------+-----+

A OPÇÃO COM CHEQUE

O WITH CHECK OPTION é uma opção de instrução CREATE VIEW. O propósito de WITH CHECK OPTION é garantir que todos os UPDATE e INSERTs satisfaçam a (s) condição (ões) na definição da visão.

Se eles não satisfizerem a (s) condição (ões), o UPDATE ou INSERT retornará um erro.

O bloco de código a seguir tem um exemplo de criação da mesma visualização CUSTOMERS_VIEW com WITH CHECK OPTION.

CREATE VIEW CUSTOMERS_VIEW AS
SELECT name, age
FROM  CUSTOMERS
WHERE age IS NOT NULL
WITH CHECK OPTION;

A opção WITH CHECK neste caso deve negar a entrada de qualquer valor NULL na coluna AGE da visão, porque a visão é definida por dados que não possuem um valor NULL na coluna AGE.

Atualizando uma visualização

Uma visão pode ser atualizada sob certas condições que são fornecidas abaixo -

  • A cláusula SELECT não pode conter a palavra-chave DISTINCT.

  • A cláusula SELECT não pode conter funções de resumo.

  • A cláusula SELECT não pode conter funções definidas.

  • A cláusula SELECT não pode conter operadores de conjunto.

  • A cláusula SELECT não pode conter uma cláusula ORDER BY.

  • A cláusula FROM não pode conter várias tabelas.

  • A cláusula WHERE não pode conter subconsultas.

  • A consulta não pode conter GROUP BY ou HAVING.

  • As colunas calculadas não podem ser atualizadas.

  • Todas as colunas NOT NULL da tabela base devem ser incluídas na visualização para que a consulta INSERT funcione.

Portanto, se uma visualização satisfizer todas as regras mencionadas acima, você poderá atualizá-la. O seguinte bloco de código tem um exemplo para atualizar a idade de Ramesh.

SQL > UPDATE CUSTOMERS_VIEW
   SET AGE = 35
   WHERE name = 'Ramesh';

Isso, em última análise, atualizaria a tabela base CUSTOMERS e o mesmo se refletiria na própria visualização. Agora, tente consultar a tabela base e a instrução SELECT produziria o seguinte resultado.

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  35 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

Inserindo Linhas em uma Visualização

Linhas de dados podem ser inseridas em uma visualização. As mesmas regras que se aplicam ao comando UPDATE também se aplicam ao comando INSERT.

Aqui, não podemos inserir linhas em CUSTOMERS_VIEW porque não incluímos todas as colunas NOT NULL nesta visão, caso contrário, você pode inserir linhas em uma visão de uma maneira semelhante à como as insere em uma tabela.

Excluindo linhas em uma visualização

Linhas de dados podem ser excluídas de uma visualização. As mesmas regras que se aplicam aos comandos UPDATE e INSERT se aplicam ao comando DELETE.

A seguir está um exemplo para excluir um registro com AGE = 22.

SQL > DELETE FROM CUSTOMERS_VIEW
   WHERE age = 22;

Isso acabaria por excluir uma linha da tabela base CUSTOMERS e o mesmo se refletiria na própria visualização. Agora, tente consultar a tabela base e a instrução SELECT produziria o seguinte resultado.

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  35 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

Queda de visualizações

Obviamente, onde você tem uma visualização, você precisa encontrar uma maneira de removê-la se ela não for mais necessária. A sintaxe é muito simples e é fornecida a seguir -

DROP VIEW view_name;

A seguir está um exemplo para eliminar CUSTOMERS_VIEW da tabela CUSTOMERS.

DROP VIEW CUSTOMERS_VIEW;