Consultas con combinaciones

Anuncio
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
Descargar