Download Tema: USO DE COMBINACIONES EXTERNAS.

Document related concepts

Join wikipedia , lookup

Null (SQL) wikipedia , lookup

SQL wikipedia , lookup

Microsoft SQL Server wikipedia , lookup

Optimización de consultas wikipedia , lookup

Transcript
Base de datos I. Guía 7
1
Facultad:
Ingeniería
Escuela:
Computación
Asignatura: Base de datos I
Tema: USO DE COMBINACIONES EXTERNAS.
Objetivo
Específico


Definir las combinaciones externas
Conocer el uso de las combinaciones RIGTH y LEFT
Materiales
Equipo
y
 Computadora con SQL Server 2008 R2.
 Guía Número 7
Introducción
Teórica
Una combinación interna (JOIN) encuentra registros de la primera tabla que se
correspondan con los registros de la segunda, es decir, que cumplan la condición del
"ON" y si un valor de la primera tabla no se encuentra en la segunda tabla, el registro no
aparece.
Si queremos saber qué registros de una tabla NO encuentran correspondencia en la otra,
es decir, no existe valor coincidente en la segunda, necesitamos otro tipo de combinación,
"OUTER JOIN" (combinación externa).
Las combinaciones externas combinan registros de dos tablas que cumplen la condición,
más los registros de la segunda tabla que no la cumplen; es decir, muestran todos los
registros de las tablas relacionadas, aún cuando no haya valores coincidentes entre ellas.
Este tipo de combinación se emplea cuando se necesita una lista completa de los datos
de una de las tablas y la información que cumple con la condición. Las combinaciones
externas se realizan solamente entre 2 tablas.
Hay tres tipos de combinaciones externas: "LEFT OUTER JOIN", "RIGHT OUTER JOIN"
y "FULL OUTER JOIN"; se pueden abreviar con "LEFT JOIN", "RIGHT JOIN" y "FULL
JOIN" respectivamente.
2
Base de datos I, Guía 7
Se emplea una combinación externa izquierda para mostrar todos los registros de la tabla
de la izquierda. Si no encuentra coincidencia con la tabla de la derecha, el registro
muestra los campos de la segunda tabla seteados a "null".
En el siguiente ejemplo solicitamos el título y nombre de la editorial de los libros:
SELECT titulo,nombre
FROM editoriales AS e
LEFT JOIN libros AS l
ON codigoeditorial = e.codigo;
El resultado mostrará el título y nombre de la editorial; las editoriales de las cuales no hay
libros, es decir, cuyo código de editorial no está presente en "libros" aparece en el
resultado, pero con el valor "null" en el campo "titulo".
Es importante la posición en que se colocan las tablas en un "left join", la tabla de la
izquierda es la que se usa para localizar registros en la tabla de la derecha.
Entonces, un "left join" se usa para hacer coincidir registros en una tabla (izquierda) con
otra tabla (derecha); si un valor de la tabla de la izquierda no encuentra coincidencia en la
tabla de la derecha, se genera una fila extra (una por cada valor no encontrado) con todos
los campos
Sintaxis:
SELECT CAMPOS
FROM TABLAIZQUIERDA
LEFT JOIN TABLADERECHA
ON CONDICION;
Ejemplo 1:
SELECT tCoches.matricula,
tMarcas.marca,
tCoches.modelo,
tCoches.color,
tCoches.numero_kilometros,
tCoches.num_plazas
FROM tCoches
LEFT OUTER JOIN tMarcas ON tCoches.marca = tMarcas.codigo
Base de datos I. Guía 7 3
Esta consulta devolverá todos los registros de la tabla tCoches, independientemente de
que tengan marca o no. En el caso de que el coche no tenga marca se devolverá el valor
null para los campos de la tabla tMarcas.
El mismo ejemplo con RIGHT OUTER JOIN.
SELECT
tCoches.matricula,
tMarcas.marca,
tCoches.modelo,
tCoches.color,
tCoches.numero_kilometros,
tCoches.num_plazas
FROM
tCoches
RIGHT OUTER JOIN tMarcas ON tCoches.marca = tMarcas.codigo
4
Base de datos I, Guía 7
Ejemplo 2
En este ejemplo se devuelven los valores buyer_name, buyer_id y qty de todos los
clientes y sus compras. Observe que los clientes que no han adquirido ningún producto se
enumeran en el conjunto de resultados, pero aparecen valores NULL en las columnas
buyer_id y qty.
USE joindb
SELECT buyer_name, sales.buyer_id, qty FROM buyers
LEFT OUTER JOIN sales ON buyers.buyer_id = sales.buyer_id
GO
 Uso de las combinaciones cruzadas
Utilice combinaciones cruzadas para presentar todas las combinaciones de filas posibles
de las columnas seleccionadas en las tablas combinadas.
Base de datos I. Guía 7 5

Por qué se utilizan las combinaciones cruzadas.
Aunque las combinaciones cruzadas no se suelen utilizar en una base de datos
normalizada, se pueden utilizar para generar datos de prueba para una base de datos o
listas de todas las combinaciones posibles para elaborar listas de comprobación o
patrones comerciales.
Cuando se utilizan combinaciones cruzadas, SQL Server genera un producto cartesiano
en el que el número de filas del conjunto de resultados es igual al número de filas de la
primera tabla multiplicado por el número de filas de la segunda tabla. Por ejemplo, si hay
8 filas en una tabla y 9 filas en la otra, SQL Server devuelve un total de 72 filas.
Sugerencia:
Señale que la palabra clave ON y la lista de columnas asociada no se utilizan en la
instrucción SELECT porque las combinaciones cruzadas devuelven todas las
combinaciones posibles de las filas de cada tabla especificada.
En las combinaciones cruzadas no se requiere una columna común.
o
Combinación de varios conjuntos de resultados.
El operador UNION combina el resultado de dos o más instrucciones SELECT en un
único conjunto de resultados.
6
Base de datos I, Guía 7
Utilice el operador UNION cuando los datos que desee obtener residan en ubicaciones
diferentes y no se pueda tener acceso a ellas con una única consulta. Al utilizar el
operador UNION, tenga en cuenta los siguientes hechos e instrucciones:
o
SQL Server requiere que las tablas a las que se hace referencia tengan tipos de datos
similares, el mismo número de columnas y el mismo orden de columnas en la lista de
selección de cada consulta.
o
SQL Server quita las filas duplicadas del conjunto de resultados. Sin embargo, si
utiliza la opción ALL, se incluyen todas las filas en el conjunto de resultados, incluso
las duplicadas.
o
Debe especificar los nombres de las columnas en la primera instrucción SELECT. Por
lo tanto, si desea definir nuevos encabezados de columnas en el conjunto de
resultados, deberá crear los alias de columnas en la primera instrucción SELECT.
o
Si desea que todo el conjunto de resultados aparezca con un orden específico, debe
especificar la ordenación con una cláusula ORDER BY en la instrucción UNION. De lo
contrario, puede que el conjunto de resultados no se devuelva en el orden que desea.
o
Puede lograr un mayor rendimiento si divide una consulta compleja en varias
instrucciones SELECT y, después, utiliza el operador UNION para combinarlas.
Sintaxis
instrucciónSelect UNION [ALL] instrucciónSelect
Ejemplo 1:
En este ejemplo se combinan dos conjuntos de resultados. El primero devuelve el
nombre, la ciudad y el código postal de todos los clientes desde la tabla customers. El
segundo devuelve el nombre, la ciudad y el código postal de todos los empleados desde
la tabla employees. Observe que, cuando se utiliza el operador UNION para combinar
ambos conjuntos de resultados, se devuelven los alias de las columnas de la primera lista
de selección.
USE northwind
SELECT (firstname + ' ' + lastname) AS name, city, postalcode
FROM employees
UNION
SELECT companyname, city, postalcode
FROM customers
GO
Base de datos I. Guía 7 7
Procedimiento
Bibliografía
Realice los siguientes ejercicios.
1. Para
Guía
1 combinar varias tablas mediante una combinación externa
En este procedimiento va a escribir y ejecutar una consulta para obtener el nombre
completo y member_no de un miembro de la tabla member y los valores isbn y log_date
de la tabla reservation, para los miembros 250, 341 y 1675 de la base de datos LIBRARY
Ordene los resultados por member_no. Debe mostrar la información de estos miembros
incluso si no tienen libros en préstamo.
Escriba la lista de selección de la consulta:
o
o
o
o
o
Cree la columna name; para ello, concatene las columnas lastname,firstname y
middleinitial de cada miembro.
Cree la columna date; para ello, convierta log_date al tipo de datos char(8).
Escriba una cláusula FROM que cree una combinación externa izquierda entre las
tablas member y reservation sobre las columnas member_no.
Escriba una cláusula WHERE para obtener de la tabla member los miembros
cuyos números sean 250, 341 y 1675.
Escriba la cláusula ORDER BY para ordenar los resultados por los números de los
miembros.
8
Base de datos I, Guía 7
Ejecute la consulta para comprobar que devuelve los resultados deseados.
¿Qué miembros no tienen libros en préstamo?
El resultado debería ser el siguiente:
2. Uso del operador UNION para combinar conjuntos de resultados
En este ejercicio, va a producir un único conjunto de resultados al utilizar el operador
UNION para concatenar los resultados de tres instrucciones SELECT similares.
Se desea obtener como resultado una lista de direcciones completas para enviar
tarjetas a nuestros empleados, clientes y suministradores. Utilice la base de datos
Northwind, las tablas a utilizar son las siguientes: Customers, Suppliers, Employees.
Base de datos I. Guía 7 9

Investigación
Complementaria
La tarea a realizar será asignada por el instructor
Guía 3
Bibliografía
Guía 4
3Charte Ojeda, SQL Server 2008. Madrid, España : ANAYA, 2009 1era edicion
Francisco
fía
Guía
fía
4
10 Base de datos I, Guía 7
Hoja de cotejo:
US DE COMBINACIONES
EXTERNAS
Guía 7:
Docente:
Máquina No:Máquina No:
Alumno
:
Tema: Presentación
del programa
Máquina No:
Alumno:
Docente:
GL:
Docente:
GL:
GL:
Fecha:
a
EVALUACION
%
CONOCIMIENTO
Del 20
al 30%
APLICACIÓN
DEL
CONOCIMIENTO
Del 40%
al 60%
1-4
5-7
8-10
Conocimie
nto
deficient
e de los
fundament
os
teóricos
Conocimiento
y explicación
incompleta de
los
fundamentos
teóricos
Conocimiento
completo y
explicación
clara de los
fundamentos
teóricos
No tiene
actitud
proactiva
.
Actitud
propositiva y
con
propuestas no
aplicables al
contenido de
la guía.
Tiene actitud
proactiva y sus
propuestas son
concretas.
ACTITUD
Del 15%
al 30%
TOTAL
100%
Nota
7
1