SQL: uso de vistas

Una vista no es más que una declaración SQL que se almacena en la base de datos con un nombre asociado. Una vista es en realidad una composición de una tabla en forma de consulta SQL predefinida.

Una vista puede contener todas las filas de una tabla o seleccionar filas de una tabla. Se puede crear una vista a partir de una o varias tablas, lo que depende de la consulta SQL escrita para crear una vista.

Las vistas, que son un tipo de tablas virtuales, permiten a los usuarios hacer lo siguiente:

  • Estructurar los datos de una manera que los usuarios o clases de usuarios encuentren natural o intuitiva.

  • Restrinja el acceso a los datos de tal manera que un usuario pueda ver y (a veces) modificar exactamente lo que necesita y nada más.

  • Resuma datos de varias tablas que se pueden utilizar para generar informes.

Creando Vistas

Las vistas de la base de datos se crean utilizando CREATE VIEWdeclaración. Las vistas se pueden crear desde una sola tabla, varias tablas u otra vista.

Para crear una vista, un usuario debe tener el privilegio de sistema apropiado de acuerdo con la implementación específica.

Lo básico CREATE VIEW la sintaxis es la siguiente:

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

Puede incluir varias tablas en su instrucción SELECT de manera similar a como las usa en una consulta SELECT de SQL normal.

Ejemplo

Considere la tabla CLIENTES que tiene los siguientes 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 continuación, se muestra un ejemplo para crear una vista desde la tabla CLIENTES. Esta vista se usaría para tener el nombre y la edad del cliente de la tabla CLIENTES.

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

Ahora, puede consultar CUSTOMERS_VIEW de forma similar a como consulta una tabla real. A continuación se muestra un ejemplo de lo mismo.

SQL > SELECT * FROM CUSTOMERS_VIEW;

Esto produciría el siguiente resultado.

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

La opción CON CHEQUEO

WITH CHECK OPTION es una opción de instrucción CREATE VIEW. El propósito de WITH CHECK OPTION es garantizar que todas las ACTUALIZACIONES e INSERTOS satisfagan las condiciones en la definición de vista.

Si no cumplen la (s) condición (es), ACTUALIZAR o INSERTAR devuelve un error.

El siguiente bloque de código tiene un ejemplo de cómo crear la misma vista CUSTOMERS_VIEW con WITH CHECK OPTION.

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

La OPCIÓN WITH CHECK en este caso debería denegar la entrada de cualquier valor NULL en la columna AGE de la vista, porque la vista está definida por datos que no tienen un valor NULL en la columna AGE.

Actualizar una vista

Una vista se puede actualizar bajo ciertas condiciones que se dan a continuación:

  • Es posible que la cláusula SELECT no contenga la palabra clave DISTINCT.

  • Es posible que la cláusula SELECT no contenga funciones de resumen.

  • La cláusula SELECT puede no contener funciones de conjunto.

  • La cláusula SELECT no puede contener operadores de conjuntos.

  • La cláusula SELECT no puede contener una cláusula ORDER BY.

  • La cláusula FROM no puede contener varias tablas.

  • La cláusula WHERE no puede contener subconsultas.

  • La consulta no puede contener GROUP BY o HAVING.

  • Es posible que las columnas calculadas no se actualicen.

  • Todas las columnas NOT NULL de la tabla base deben incluirse en la vista para que funcione la consulta INSERT.

Por lo tanto, si una vista satisface todas las reglas mencionadas anteriormente, puede actualizar esa vista. El siguiente bloque de código tiene un ejemplo para actualizar la edad de Ramesh.

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

Esto finalmente actualizaría la tabla base CLIENTES y lo mismo se reflejaría en la vista misma. Ahora, intente consultar la tabla base y la instrucción SELECT produciría el siguiente 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 |
+----+----------+-----+-----------+----------+

Insertar filas en una vista

Se pueden insertar filas de datos en una vista. Las mismas reglas que se aplican al comando UPDATE también se aplican al comando INSERT.

Aquí, no podemos insertar filas en CUSTOMERS_VIEW porque no hemos incluido todas las columnas NOT NULL en esta vista; de lo contrario, puede insertar filas en una vista de manera similar a como las inserta en una tabla.

Eliminar filas en una vista

Las filas de datos se pueden eliminar de una vista. Las mismas reglas que se aplican a los comandos UPDATE e INSERT se aplican al comando DELETE.

A continuación se muestra un ejemplo para eliminar un registro con EDAD = 22.

SQL > DELETE FROM CUSTOMERS_VIEW
   WHERE age = 22;

Esto finalmente eliminaría una fila de la tabla base CLIENTES y lo mismo se reflejaría en la vista misma. Ahora, intente consultar la tabla base y la instrucción SELECT produciría el siguiente 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 |
+----+----------+-----+-----------+----------+

Descartar vistas

Obviamente, donde tiene una vista, necesita una forma de eliminar la vista si ya no es necesaria. La sintaxis es muy simple y se da a continuación:

DROP VIEW view_name;

A continuación se muestra un ejemplo para eliminar CUSTOMERS_VIEW de la tabla CUSTOMERS.

DROP VIEW CUSTOMERS_VIEW;