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