Beruflich Dokumente
Kultur Dokumente
4
Objetivos
Escribir sentencias SELECT para acceder a datos de ms de una tabla utilizando uniones de igualdad y de no igualdad Visualizar datos que generalmente no cumplen una condicin de unin utilizando uniones externas Unir una tabla consigo misma utilizando una autounin
4-2
4-3
Productos Cartesianos
Un producto Cartesiano se forma cuando: Una condicin de unin est omitida. Una condicin de unin no es vlida. Todas las filas de la primera tabla se unen a todas las filas de la segunda tabla.
Para evitar un producto Cartesiano, incluya siempre una condicin de unin vlida en una clusula WHERE.
4-4
4-5
Tipos de Uniones
Uniones de Propiedad de Oracle (8i y anterior): Uniones que cumplen con SQL: 1999:
Uniones cruzadas Uniones naturales Clusula USING Uniones externas completas o de dos lados Condiciones de unin arbitrarias para uniones externas
4-6
Escriba la condicin de unin en la clusula WHERE. Escriba en el nombre de columna el nombre de tabla como prefijo si aparece el mismo nombre de columna en ms de una tabla.
4-7
4-9
4-10
4-11
Simplifique las consultas utilizando alias de tabla. Mejore el rendimiento utilizando prefijos de tabla.
SELECT e.employee_id, e.last_name, e.department_id, d.department_id, d.location_id FROM employees e , departments d WHERE e.department_id = d.department_id;
4-12
Para unir n tablas, necesita un mnimo de n-1 condiciones de unin. Por ejemplo, para unir tres tablas, se requiere un mnimo de dos uniones.
Copyright Oracle Corporation, 2001. Todos los derechos reservados.
4-13
Uniones de No Igualdad
EMPLOYEES JOB_GRADES
El salario de la tabla EMPLOYEES debe estar entre el salario menor y el mayor de la tabla JOB_GRADES.
4-14
4-15
Uniones Externas
DEPARTMENTS
EMPLOYEES
Tambin puede utilizar una unin externa para ver filas que no cumplen la condicin de unin. El operador de unin externa es el signo ms (+).
SELECT table1.column, table2.column FROM table1, table2 WHERE table1.column(+) = table2.column; SELECT table1.column, table2.column FROM table1, table2 WHERE table1.column = table2.column(+);
4-17
SELECT e.last_name, e.department_id, d.department_name FROM employees e, departments d WHERE e.department_id(+) = d.department_id ;
4-18
Autouniones
EMPLOYEES (WORKER)
EMPLOYEES (MANAGER)
4-20
4-21
4-22
La clusula CROSS JOIN produce varios productos entre dos tablas. Es lo mismo que un producto Cartesiano entre las dos tablas.
4-23
La clusula NATURAL JOIN se basa en todas las columnas de las dos tablas que tienen el mismo nombre. Selecciona filas de las dos tablas que tienen los mismos valores en todas las columnas coincidentes. Si las columnas que tienen el mismo nombre tienen distintos tipos de dato, se devuelve un error.
4-24
4-25
Si varias columnas tienen los mismos nombres pero los tipos de dato no coinciden, la clusula NATURAL JOIN se puede modificar con la clusula USING para especificar las columnas que se deben utilizar para una unin de igualdad. Utilice la clusula USING para hacer coincidir solamente una columna cuando coincidan varias. No utilice un nombre o alias de tabla en las columnas de referencia. Las clusulas NATURAL JOIN y USING son mutuamente excluyentes.
4-26
4-27
La condicin de unin para la unin natural es bsicamente una unin de igualdad de todas las columnas con el mismo nombre. Para especificar condiciones arbitrarias o especificar columnas para unir, se utiliza la clusula ON. La condicin de unin se separa de otras condiciones de bsqueda. La clusula ON facilita la comprensin del cdigo.
4-28
4-29
4-30
En SQL: 1999, la unin de dos tablas que devuelve solamente las filas coincidentes es una unin interna. Una unin entre dos tablas que devuelve los resultados de la unin interna as como las tablas izquierda (o derecha) de filas no coincidentes es una unin externa izquierda (o derecha). Una unin entre dos tablas que devuelve los resultados de una unin interna as como los de una unin izquierda y derecha es una unin externa completa.
4-31
SELECT e.last_name, e.department_id, d.department_name FROM employees e LEFT OUTER JOIN departments d ON (e.department_id = d.department_id) ;
4-32
SELECT e.last_name, e.department_id, d.department_name FROM employees e RIGHT OUTER JOIN departments d ON (e.department_id = d.department_id) ;
4-33
SELECT e.last_name, e.department_id, d.department_name FROM employees e FULL OUTER JOIN departments d ON (e.department_id = d.department_id) ;
4-34
Condiciones Adicionales
SELECT e.employee_id, e.last_name, e.department_id, d.department_id, d.location_id FROM employees e JOIN departments d ON (e.department_id = d.department_id) AND e.manager_id = 149 ;
4-35
Resumen
En esta leccin, debera haber aprendido a utilizar uniones para visualizar datos de varias tablas en:
Sintaxis de propiedad de Oracle para las versiones 8i y anteriores Sintaxis conforme con SQL: 1999 para la versin 9i
4-36
4-37
4-38
4-39
4-40
4-41
4-42
4-43
4-44