You are on page 1of 3

Vistas en SQL Muchas bases de datos relacionales que se utilizan en aplicaciones del mundo real tienen esquemas complejos

y formados por muchas tablas. En ocasiones, es conveniente que algunos grupos o perfiles de usuarios tengan una vista parcial de ese esquema, o que tengan una visin de la misma con una estructura diferente a la del esquema que realmente est almacenado. Precisamente para estos casos, el lenguaje SQL permite definir vistas. Una vista es esencialmente una consulta almacenada que devuelve un conjunto de resultados y a la que se le pone un nombre. Una vista es una tabla virtual, aparece como una tabla ms del esquema, aunque realmente no lo es. Devolver los pedidos en el ao indicado, ingresando el nombre y apellidos del empleado create procedure insertarNombreEmpleado @nombres as nvarchar(10), @apellidos as nvarchar(20), @ao as int as select FechaEnvo, Destinatario, DireccinDestinatario from pedidos where IdEmpleado = (select IdEmpleado from Empleados where Nombre = @nombres and Apellidos = @apellidos) and DATEPART(year, FechaPedido) = @ao Ejecucin: Queremos obtener los pedidos del empleado Robert King en el ao 1997: exec insertarNombreEmpleado 'Robert', 'King', 1997 vista nombre cliente en fecha especifica --Nombre completo de cliente select distinct e.Apellidos +' ' + e.Nombre as Empleado from Pedidos p inner join Empleados e on p.IdEmpleado = e.IdEmpleado where p.FechaPedido = '1997-01-01' distinct para eliminar elementos repetidos Sintaxis La sintaxis general para crear una vista es la siguiente: CREATE VIEW view_name [(column_list)] AS sentencia_select La idea es muy simple, solamente le damos nombre (view_name) a una consulta. Opcionalmente, los atributos de la relacin resultante de la sentencia_select pueden renombrarse mediante etiquetas en column_list. Un ejemplo Tomemos como ejemplo una aplicacin muy simple de gestin de pedidos en un supermercado virtual. El esquema relacional sera el siguiente.

--nombres y telefonos de los clientes que no compraron productos con precio mayor de 100 select c.Nombrecliente, c.Telefono from Pedidos p inner join Clientes c on p.IdCliente = c.IdCliente inner join Detallesdepedidos det on det.IdPedido = p.IdPedido where det.PrecioUnidad < 100

El resultado sera como el siguiente: usuario nombre pedido fecha total agarcia Ana Garcia 1 2008-11-05 40 jlopez Juan Lopez 1 2008-02-10 65 jlopez Juan Lopez 2 2008-02-11 null TABLA 1 Ntese que cuando un pedido no tiene lneas asociadas, aparecer un nulo en la subconsulta. La consulta puede hacerse tambin mediante agrupamiento con la siguiente consulta: SELECT c.usuario, c.nombre, p.numpedido, p.fecha, sum(cantidad*precio) Figura 1 FROM clientes as c, pedidos as p, lineas_pedido as l En ese esquema, la informacin aparece descompuesta en tablas. Sin embargo, para un usuario en un departamento de marketing, podra ser que le fuese ms til tener la informacin de las ventas de los productos acumuladas, simplemente. CREATE VIEW resumenproductos AS select p.id, p.nombre, sum(cantidad) AS total from producto as p, lineas_pedido as l where (l.producto = p.id) group by l.producto order by total desc Despus de definir la vista, podremos utilizar resumenproductos como si fuese una tabla ms. Por ejemplo la sentencia: Dado que las vistas aparecen como tablas, pueden aparecer en otras consultas. Es importante tener select * from resumenproductosNos devolver el resultado de la consulta que define la vista. Como segundo ejemplo, puede que una persona en Contabilidad solamente necesite el resumen econmico de los pedidos. En ese caso, podremos definir una vista como la siguiente utilizando una subconsulta correlacionada: CREATE VIEW resumenpedidos (usuario, nombre, pedido, fecha, total) ASSELECT c.usuario, c.nombre, p.numpedido, p.fecha, (SELECT SUM(precio*cantidad) FROM LINEAS_PEDIDO as x WHERE (x.cliente = p.cliente) and (x.pedido=p.numpedido))FROM CLIENTES as C, PEDIDOS as PWHERE p.cliente = c.usuario Por ejemplo, MySQL tiene una clusula ALGORITHM que puede acompaarse de tres valores: MERGE,TEMPTABLE o UNDEFINED, con el siguiente significado: esto en cuenta cuando se estn diseando consultas, dado que puede afectar al rendimiento. Para ello, algunos gestores de bases de datos tienen sintaxis extendidas para controlar cmo se representan internamente las vistas. WHERE (c.usuario = p.cliente) and (p.cliente = l.cliente) and (p.numpedido=l.pedido) GROUP BY p.cliente, p.numpedido En este caso se evita la aparicin de nulos, ya que la clusula GROUP BY no crear un subgrupo en el caso de que no haya lneas de pedido. Lgicamente, los beneficios de las vistas se obtienen al combinar su definicin con el sistema de permisos del gestor de base de datos. Siguiendo el ejemplo, daramos permiso a los usuarios en Marketing sobre la vista resumenproductos, y permisos a los usuarios de Contabilidad sobre resumenpedidos. La representacin de las vistas

Con MERGE, el texto de las sentencias que hagan referencia a una vista se fusiona con el texto de la definicin de la vista, de modo que las partes de la definicin de la vista reemplazan a las partes correspondientes de la sentencia.

Con TEMPTABLE, los resultados de la vista se recuperan en una tabla temporal, que se usa despus para ejecutar la consulta.

El uso de TEMPTABLE consume un espacio temporal adicional, pero puede tener un mejor rendimiento ya que despus de hacer la copia de los datos en la tabla temporal, se usa sta y se libera la tabla o tablas originales.

INITCAP (cad)= Convierte la cadena "cad" a tipo titulo. LPAD (cad1, n[,cad2])= Aade caracteres a la izquierda de la cadena hasta que tiene una cierta longitud. RPAD (cad1, n[,cad2])= Aade caracteres a la derecha de la cadena hasta que tiene una cierta longitud. LTRIM (cad [,set])= Suprime un conjunto de caracteres a la izquierda de la cadena. RTRIM (cad [,set])= Suprime un conjunto de caracteres a la derecha de la cadena. REPLACE (cad, cadena_busqueda [, cadena_sustitucion])= Sustituye un carcter o caracteres de una cadena con 0 o mas caracteres. SUBSTR (cad, m [,n])= Obtiene parte de una cadena. TRANSLATE (cad1, cad2, cad3)= Convierte caracteres de una cadena en caracteres diferentes, segn un plan de sustitucin marcado por el usuario. Funciones que devuelven valores numricos: ASCII(cad)= Devuelve el valor ASCII de la primera letra de la cadena "cad". INSTR (cad1, cad2 [, comienzo [,m]])= Permite una bsqueda de un conjunto de caracteres en una cadena pero no suprime ningn carcter despus. LENGTH (cad)= Devuelve el numero de caracteres de cad. Funciones para el manejo de fechas: SYSDATE= Devuelve la fecha del sistema. ADD_MONTHS (fecha, n)= Devuelve la fecha "fecha" incrementada en "n" meses. LASTDAY (fecha)= Devuelve la fecha del ltimo da del mes que contiene "fecha". MONTHS_BETWEEN (fecha1, fecha2)= Devuelve la diferencia en meses entre las fechas "fecha1" y "fecha2". NEXT_DAY (fecha, cad)= Devuelve la fecha del primer da de la semana indicado por "cad" despus de la fecha indicada por "fecha". DATEPART (identificador, atributo)

Funciones de valores simples: ABS(n)= Devuelve el valor absoluto de (n). CEIL(n)=Obtiene el valor entero inmediatamente superior o igual a "n". FLOOT(n) = Devuelve el valor entero inmediatamente inferior o igual a "n". MOD (m, n)= Devuelve el resto resultante de dividir "m" entre "n". NVL (valor, expresin)= Sustituye un valor nulo por otro valor. POWER (m, exponente)= Calcula la potencia de un numero. ROUND (numero [, m])= Redondea nmeros con el numero de dgitos de precisin indicados. SIGN (valor)= Indica el signo del "valor". SQRT(n)= Devuelve la raz cuadrada de "n". TRUNC (numero, [m])= Trunca nmeros para que tengan una cierta cantidad de dgitos de precisin. VAIRANCE (valor)= Devuelve la varianza de un conjunto de valores. Funciones de grupos de valores: AVG(n)= Calcula el valor medio de "n" ignorando los valores nulos. COUNT (* | Expresin)= Cuenta el numero de veces que la expresin evala algn dato con valor no nulo. La opcin "*" cuenta todas las filas seleccionadas. MAX (expresin)= Calcula el mximo. MIN (expresin)= Calcula el mnimo. SUM (expresin)= Obtiene la suma de los valores de la expresin. GREATEST (valor1, valor2)= Obtiene el mayor valor de la lista. LEAST (valor1, valor2)= Obtiene el menor valor de la lista. Funciones que devuelven valores de caracteres: CHR(n) = Devuelve el carcter cuyo valor en binario es equivalente a "n". CONCAT (cad1, cad2)= Devuelve "cad1" concatenada con "cad2". LOWER (cad)= Devuelve la cadena "cad" en minsculas. UPPER (cad)= Devuelve la cadena "cad" en maysculas.

Identificador: Day -> devuelve el nro de dia,

Funciones de conversin: TO_CHAR= Transforma un tipo DATE NUMBER en una cadena de caracteres. TO_DATE= Transforma un tipo NUMBER CHAR en DATE. TO_NUMBER= Transforma una cadena de caracteres en NUMBER.

You might also like