Vistas
Concepto de vista
Una Vista, en SQL, es una forma cómoda de escribir consultas, ya que se puede escribir un SELECT muy complejo o muy repetitivo y crearle un alias, de tal manera que cuando se quiera volver a ejecutar ese query, solo se tiene que hacer un SELECT a ese alias y el motor de base de datos repetirá todo el SELECT original.
Cómo crear una vista nueva: CREATE VIEW
La forma de crear una vista es muy sencilla ya que solo se tiene que anteponer un CREATE VIEW a un SELECT y se creará una nueva tabla virtual o alias para ese SELECT. Pongamos un ejemplo:
Suponiendo que se tenga el siguiente SELECT
SELECT nombre, direccion, telefono, tutores, estatus FROM alumnos WHERE sexo='F';
y se quiera crear una vista, lo único que se tiene que hacer es anteponer el CREATE VIEW al SELECT de la siguiente manera:
CREATE VIEW DirectorioAlumnas AS
SELECT nombre, direccion, telefono, tutores, estatus FROM alumnos WHERE sexo='F';
Uso o aprovechamiento de la vista
A partir de la creación de esta vista, existirá una «nueva» tabla llamada DirectorioAlumnas (realmente será un alias) que será una forma corta de escribir el SELECT original, de tal manera que esta nueva vista tendrá 5 campos de la tabla alumnos, siempre filtrando a sexo=’F’. De esta manera un
SELECT * FROM DirectorioAlumnos WHERE estatus=13
sería igual a escribir
SELECT nombre, direccion, telefono, tutores, estatus FROM alumnos WHERE sexo='F' AND estatus=13;
Una vista es solo un query, no los datos
Como se puede ver, una vista solo es una forma cómoda de escribir querys, no crea una estructura que copie los datos originales, por lo que siempre está actualizada. Lo que se guarda en la base de datos es el query original, no los datos, por lo que cada vez que se hace uso de una vista se ejecuta nuevamente el SELECT original.
Una vista no es más eficiente que el SELECT original
Aunque pareciera que escribir un query que usa una vista es mejor que utilizar un SELECT complejo, en la realidad es lo mismo para el motor de bases de datos, ya que al calcular el plan de ejecución se calcula utilizando el query original, por lo que no son más eficientes necesariamente, si no que solo facilitan la tarea de escribir consultas complejas.
Tipos de vistas
Si bien esta es una de muchas posibles clasificaciones, si nos dará una idea de lo que se puede hacer con, o en, una vista.
Vista horizontal
Es aquella que reduce el número de registros de la tabla original, pero manteniendo todos sus campos; de esta manera no se tiene que hacer el mismo filtro de filas cada vez que se quiera acceder a ese subconjunto de la tabla original.
La forma de escribir una vista de este tipo es con un código similar al siguiente:
CREATE VIEW nombreDeVista
AS
SELECT * FROM tablaOriginal
WHERE (condición)
La condición en el WHERE será la forma por la cual se filtrarán los registros. El primer ejemplo de este artículo es una vista horizontal.
Vista vertical
Es aquella vista que elimina algunos campos de la tabla original, pero manteniendo todos los registros de la misma. Con vistas de este tipo se obtiene un subconjunto más manejable de atributos obtenidos. En este caso, como evita el uso de un SELECT * podría mejorar la eficiencia del query en algunas circunstancias.
La forma regular de crear una vistas verticales es
CREATE VIEW nombre_vista
AS
SELECT campo1,campo2,…,campoN
FROM tabla
la enumeración de los campos -sin un WHERE en el SELECT- hace de esta una vista vertical.
Subconjuntos filas/columnas
Esta vista es una combinación de las dos anteriores. De la horizontal hereda el uso de un WHERE para filtrar registros, y de la vertical usa la enumeración de ciertos campos para evitar usar un SELECT *
Para escribir este tipos de vistas se tiene que ejecutar un query similar al siguiente:
CREATE VIEW nombreVista
AS
SELECT campo1,campo2,…,campoN
FROM tabla
WHERE (condición)
Vistas agrupadas
Dado que cualquier instrucción SELECT se puede convertir en una vista, nada impode que un SELECT con uno o más JOINs puede formar una nueva vista, llamada agrupada.
Un ejemplo de código para crear este tipo de vista podría ser
CREATE VIEW nombreVista
AS
SELECT t1.campos, t2.campos, t3.campos
FROM t1
JOIN t2
JOIN t3;
Vistas compuestas
Esta es una vista formada de un GROUP BY en su SELECT original, de tal manera que se hacen sumarizaciones regularmente y el resultado se guarda con una vista para su posterior utilización.
El siguiente es una estructura general de una vista compuesta
CREATE VIEW nombre
AS
SELECT campos
FROM tabla
GROUP BY campos