UNIDAD 1.- PARTE 2 MANIPULACIÓN AVANZADA DE DATOS CON SQL. BASES DE DATOS PARA APLICACIONES Xochitl Clemente Parra Armando Méndez Morales Consultas con combinaciones Usando combinaciones (joins), se pueden recuperar datos desde dos o más tablas basados en relaciones lógicas entre las tablas. Se pueden especificar tanto en la cláusulas FROM o WHERE. Cuando SQL Server procesa combinaciones, el motor de consultas elige el método más eficiente (de entre varias posibilidades) para procesar la combinación. Aunque la ejecución física de varias combinaciones usa diferentes caminos, se respeta la siguiente secuencia lógica: Se aplican las condiciones de combinación de la cláusula FROM. Se aplican las condiciones de combinación y las condiciones de búsqueda de la cláusula WHERE. Se aplican las condiciones de búsqueda de la cláusula HAVING. Esta secuencia puede, algunas veces, influenciar el resultado de la consulta si se mueven las condiciones entre la cláusulas FROM y WHERE. 1 Consultas con combinaciones (join) Las tablas combinada producen un solo resultado que incorpora filas y colunas de 2 o mas tablas. Se agregan 2 palabras en la clausula, JOIN y ON La palabra JOIN indica que tablas de combianara y como se combinaran La palabra ON especifica que columnas de las tablas se tienen en comun Cuando empleas una combinacion debes considerar lo siguiente: Siempre que sea posible, especifica las condiciones de la combinacion basadas en llaves primaras o foraneas,pero puedes usar otra si deseas Con el proposito de evitar expansion de datos, es recomendable referencia la llave completa en la clausula ON si es una tabla con llaves compuestas. En general, combine todas las columnas que identifican a las filas para preveer expansion de datos. Utilice las columnas comunes para especificar las combinaciones. Esta tablas deben tener tipos de datos compatibles Referencia el nombre de la tabla si los nombres de las columnas son los mismos Si es posible, limita el numero de tablas de una combinacion, porque entre mas tablas combines, SQL tardará mas en procesar la consulta. Puedes combinar una o mas tablas con una sola clausula SELECT Combinaciones Inner Las combinaciones INNER combinan tablas comparando valores en columnas que son comunes en ambas tablas. SQL retorna solo las filas que cumplen con los valores comunes de la combinación. Porque usar combinaciones INNER Utiliza combinacines inner cuando se desea obtener informacion de 2 tablas en un solo resultado. Cuando utilice estas combinaciones considere lo siguiente: Las combinaciones inner son el default de SQL Server. Puede abreviar INNER JOIN como JOIN. Especifica las columnas que se quieren mostrar en el resultado incluyendo nombres adecuados en la seccion SELECT. No use valores null como condicion del JOIN porque los valores nulos no se pueden comparar con otros 2 Combinaciones Outer SQL Server soporta tres tipos de combinaciones outer: izquierda (left), derecha (right), y completa (full). Todas las filas recuperadas desde la tabla izquierda son referenciadas con una combinación outer izquierda, y todas las filas de la tabla derecha son referenciadas en una combinación outer derecha. Todas las filas de ambas tablas son retornadas en una combinación outer completa. Combinaciones OUTER Las combinaciones outer derecha o izquierda permiten combinar las filas de 2 tablas, y ademas agregar cualquier fila no combinada de la tabla izquierda o derecha especificada en la clausula JOIN. Las filas que no empatan en la condicion despliegan NULL en el resultado. Se puede emplear combinaciones OUTER completas para mostar todas las filas de las tablas combinadas, independientemente de si las tablas tienen o no valores que empaten. Porque utilizar clausulas LEFT OUTER JOIN o RIGHT OUTER JOIN Utiliza estas combinaciones cuando necesites una lista completa de datos alamacenados en una de las tablas combinadas, ademas de los datos que empatan en la condicion JOIN. Cuando emplees estas combinaciones hay que tener las siguientes consideraciones: Utilizar combiniaciones outer para mostrar todas las filas de la primera tabla ( la tabla a la izquierda de la expresion). Si inviertes el orden en el cual las tablas estan organizadas en la clausula FROM, el resultado será el mismo que si se emplea el right outer join Utilizar las combinaciones right outer join para mostrar todas las filas dela segunda tabla nombrada (la tabla de la derecha de la expresion). Si invierte el orden en el cual las tablas se listan en la clausula from, el resultado es el mismo que el de left outer join. Se puede abreviar LEFT OUTER JOIN o RIGHT OUTER JOIN como LEFT JOIN o RIGHT JOIN. 3 Vistas Las vistas se pueden definir como tablas virtuales basadas en una o más tablas o vistas y cuyos contenidos vienen definidos por una consulta sobre las mismas. Esta tabla virtual o consulta se le asigna un nombre y se almacena permanentemente en la BD, generando al igual que en las tablas una entrada en el diccionario de datos. Las vistas permiten que diferentes usuarios vean la BD desde diferentes perspectivas, así como restringir el acceso a los datos de modo que diferentes usuarios accedan sólo a ciertas filas o columnas de una tabla. Desde el punto de vista del usuario, la vista es como una tabla real con filas y columnas, pero a diferencia de esta, sus datos no se almacenan físicamente en la BD. Las filas y columnas de datos visibles a través de la vista son los resultados producidos por la consulta que define la vista. Creacion de vistas La cláusula CREATE VIEW permite la creación de vistas. La cláusula asigna un nombre a la vista y permite especificar la consulta que la define. Su sintaxis es: CREATE VIEW id_vista [(columna,…)] AS especificación_consulta; Opcionalmente se puede asignar un nombre a cada columna de la vista. Si se especifica, la lista de nombres de las columnas debe de tener el mismo número de elementos que el número de columnas producidas por la consulta. Si se omiten, cada columna de la vista adopta el nombre de la columna correspondiente en la consulta. Existen dos casos en los que es obligatoria la especificación de la lista de columnas: 1. – Cuando la consulta incluye columnas calculadas 2. – Cuando la consulta produce nombres idénticos. 4 Tipos de vistas Según el propósito con el que se organizan las vistas, pueden clasificarse en los siguientes tipos: Horizontales o por restricción Verticales o por proyección Subconjuntos de filas/columnas Agrupadas Compuestas Horizontales o por restricción Son las que restringen el acceso de un usuario a únicamente un conjunto de filas de una tabla. Las vistas horizontales son adecuadas cuando la tabla sobre la que se definen contiene datos que relacionan a varias organizaciones o usuarios, proporcionando una “tabla privada” para cada usuario compuesta únicamente de las filas necesarias para ese usuario en concreto. create view Vista1 as select * from Datos where salario >5000 select * from Vista1 5 Verticales o por proyección Son aquellas que restringen el acceso de un usuario sólo a ciertas columnas de una tabla. El uso de estas vistas es aconsejable cuando los datos de la tabla son compartidos también por varios usuarios diferentes. La diferencia está en que ahora solo necesitamos parte de los campos, no todos. create view Vista3 as select nombre, direccion,telefono from contactos select * from Vista3 Subconjuntos fila / columna Lo más habitual es crear vistas con parte de las filas y parte de las columnas de una tabla. Por ejemplo: create view Vista5 as select nombre,direccion from Contactos where idusuario=1 select * from Vista5 6 Agrupados Son vistas que incluyen una cláusula GROUP BY en la consulta especificada. Estas vistas incluyen siempre una lista de nombres de columna. create view Vista6 as select nombre,sum(salario) as SalarioTotal from Datos group by nombre Compuestas Son vistas creadas a partir de los datos de dos o más tablas. Presentan los datos como una única tabla virtual. Al igual que las anteriores se utilizan frecuentemente para facilitar el manejo de consultas complejas de uso frecuente en la base. select * from Vista2 create view Vista2 as select nombre,direccion from datos Where salario<5000 union select nombre,direccion from datosExternos Where salario>5000 7 Actualización a través de las vistas: Para que una vista se pueda actualizar debe existir una relación directa entre las filas y columnas de la vista y las de la tabla fuente. Según el estándar ANSI, se puede actualizar a través de las vistas si la consulta que la define, satisface las siguientes restricciones: 1ª - No especifica DISTINCT 2ª - FROM debe especificar una única tabla 3ª - La lista de selección no puede contener expresiones, columnas calculadas o funciones de columna, solo referencias a columnas simples. 4ª - WHERE no debe incluir subconsultas. 5ª - No debe incluir ni GROUP BY ni HAVING. ejemplo create view Vista7 as select * from Datos where salario<10000 select * from datos select * from Vista7 8 Comprobación de actualizaciones de vistas Para evitar errores se usará la cláusula WITH CHECK OPTION. Añadiendo esta cláusula a la creación de una vista se asegura que las operaciones de inserción y actualización sobre la vista satisfagan el criterio de búsqueda, definido en la cláusula WHERE de la consulta asociada a la vista. De esta forma se asegura que las filas insertadas o actualizadas sean visibles a través de la vista. En caso de que la fila a insertar o modificar no satisfaga la condición del WHERE, la sentencia de actualización falla sin llevarse a cabo la operación. Otras cláusulas para creación de vistas. OR REPLACE: Cuando se necesita modificar la definición de una vista, la única solución es crear una nueva vista con el mismo nombre ya que no existe una sentencia similar a la ALTER TABLE. Para evitar que tener que eliminar la vista y volverla a crear, el motor proporciona esta cláusula, la cual permite sustituir la definición de una vista por otra nueva, es decir, la reemplaza. WITH READ ONLY: Esta cláusula no permite que se ejecuten borrados, actualizaciones o inserciones sobre la vista. Eliminación de vistas Se hace con DROP VIEW id_vista; 9 Ventajas e inconvenientes de las vistas VENTAJAS: - Las consultas con selecciones complejas se simplifican. - Permiten personalizar la BD para los distintos usuarios, de forma que presenten los datos con una estructura lógica para los mismos. - Control de acceso a la BD, haciendo que los usuarios vean y manejen solo determinada información. INCONVENIENTES: Las restricciones referidas a las actualizaciones. La caída del rendimiento cuando se construyen vistas con selecciones complejas. 10