Professional Documents
Culture Documents
OBJETIVOS
FIS
Escribir instrucciones SELECT para acceder a los datos de ms de una tabla utilizando
combinaciones de igualdad y de no-igualdad.
Unir una tabla a s misma mediante el uso de una autocombinacin
Mostrar datos que por lo general no cumplen con una condicin de unin mediante el
uso de combinaciones OUTER
Generar un producto cartesiano de todas los registros a partir de dos o ms tablas
En esta leccin se explica cmo obtener los datos de ms de una tabla. Una combinacin
se utiliza para ver la informacin de varias tablas. Por lo tanto, usted puede unir las tablas
en conjunto para ver la informacin de ms de una tabla.
FIS
A veces es necesario utilizar los datos de ms de una tabla. En el ejemplo de la
diapositiva, el informe muestra los datos de dos tablas separadas:
Employee_ID existen en la tabla EMPLOYEES.
Departament_ID existe en las tablas EMPLOYEES y DEPARTAMENTS.
Departament_name existe en la tabla DEPARTMENTS.
Las combinaciones que cumplen con el estndar SQL: 1999 son los siguientes:
Natural join
y
Para unirse a las tablas, puede utilizar una sintaxis de la combinacin que cumple con el
estndar SQL: 1999.
Nota
Antes de la liberacin de Oracle9i, la sintaxis de la combinacin era diferente de los
American National Standards Institute (ANSI). El SQL:1999-compatible con la sintaxis
join no ofrece ventajas de rendimiento sobre la sintaxis propietaria join de Oracle que
exista en las versiones anteriores.
La siguiente diapositiva analiza el SQL: 1999 sintaxis de la combinacin.
FIS
Use una combinacin de datos de la consulta de ms de una tabla:
En la siguiente sintaxis:
Table1.column indica la tabla y la columna de la cual se recuperan los datos
NATURAL JOIN combina dos tablas basadas en el mismo nombre de columna
JOIN tabla2 USING column_name realiza una combinacin de igualdad basado en el
nombre de la columna
JOIN tabla2 ON = table1.column_name = table2.column_name realiza una
combinacin de igualdad basada en la condicin en la clusula ON
LEFT / RIGHT / FULL OUTER se utiliza para realizar combinaciones OUTER
CROSS JOIN devuelve un producto cartesiano de las dos tablas
Utilizar los prefijos de tabla para calificar los nombres de las columnas que se
encuentran en varias tablas.
Utilizar los prefijos de tabla para mejorar el rendimiento.
En lugar de prefijos completos de nombre de tabla, utilice los alias de la tabla.
Los alias de la tabla dan una tabla de un nombre ms corto:
Mantener el cdigo SQL ms pequeo, usa menos memoria
Usar alias de las columnas para distinguir las columnas que tienen nombres idnticos,
pero residen en diferentes tablas.
Cuando se unen dos o ms tablas, se necesita calificar los nombres de las columnas con
el nombre de la tabla para evitar la ambigedad. Sin los prefijos de la tabla, la columna
DEPARTMENT_ID en la lista SELECT podran ser de cualquiera de la tabla
DEPARTMENTS o la tabla EMPLEADOS. Es necesario aadir el prefijo de la tabla para
ejecutar la consulta. Si no hay nombres de columna comunes entre las dos tablas, no hay
necesidad de calificar las columnas. Sin embargo, con el prefijo de la tabla mejora el
rendimiento, ya que decirle al servidor Oracle exactamente dnde encontrar las columnas.
Sin embargo, la calificacin nombres de las columnas con los nombres de tabla puede
llevar mucho tiempo, sobre todo si los nombres de las tablas son muy largos. En su lugar,
puede utilizar los alias de la tabla. As como un alias de columna ofrece una columna con
otro nombre, un alias de tabla da una tabla con otro nombre. Los alias de tabla ayudan a
mantener el cdigo SQL ms pequeo, por lo tanto, utilizando menos memoria.
FIS
de correo, y la tabla DEPARTMENTS el alias d.
Directrices
Los alias de la tabla pueden ser de hasta 30 caracteres de longitud, pero los alias ms
cortos son mejores que los ms largos.
Si un alias de tabla se utiliza para un nombre de tabla en particular en la clusula
FROM, que el alias de la tabla debe ser sustituido por el nombre de la tabla a lo largo
de la instruccin SELECT.
Los alias de la tabla debe ser significativo.
Los alias de la tabla es vlida slo para la instruccin SELECT actual.
La clusula JOIN NATURAL se basa en todas las columnas de las dos tablas que
tienen el mismo nombre.
Selecciona los registros de las dos tablas que tienen valores iguales en todas las
columnas coincidentes.
Si las columnas que tienen los mismos nombres que tienen diferentes tipos de datos,
se devuelve un error.
Usted puede unir las tablas de forma automtica sobre la base de las columnas en las dos
tablas que coinciden con los tipos de datos y nombres. Esto se hace mediante el uso de
las palabras NATURAL JOIN.
Nota: La combinacin puede ocurrir en slo las columnas que tienen los mismos nombres
y tipos de datos en ambas tablas. Si las columnas tienen el mismo nombre pero con
diferentes tipos de datos, la sintaxis NATURAL JOIN produce un error.
Si varias columnas tienen los mismos nombres, pero los tipos de datos no coinciden,
utilice la clusula USING para especificar las columnas de la interseccin.
Utilice la clusula USING para que coincida con slo una columna cuando coincide
ms de una columna.
Las clausulas NATURAL JOIN y USING son mutuamente excluyentes.
FIS
Natural join utiliza todas las columnas con los nombres que coincidan con los tipos de
datos para unirse a las tablas. La clusula USING puede ser usado para especificar slo
las columnas que deben ser utilizados para una combinacin de igualdad.
Las columnas que se hace referencia en la clusula USING no deberan tener un partido
de clasificacin (nombre de tabla o alias) en cualquier parte de la sentencia SQL. Por
ejemplo, la siguiente declaracin es vlida:
FIS
SELECT l.city, d.department_name
FROM locations l JOIN departments d
USING (location_id)
WHERE location_id = 1400;
Las columnas que son comunes en ambas tablas, pero no se utiliza en la clusula
USING, debe estar precedido de un alias de tabla, de lo contrario, se obtiene la "columna
definido de forma ambigua" de error.
Utilice la clusula ON para especificar una condicin de combinacin. Con esto, usted
puede especificar las condiciones de combinacin separadas de cualquier bsqueda o las
condiciones de filtro en la clusula WHERE.
Tambin puede utilizar la clusula ON para unir las columnas que tienen nombres
diferentes. El parntesis alrededor de las columnas combinadas, como en el ejemplo de la
diapositiva, (e.department_id = d.department_id) es opcional. Por lo tanto, incluso en
e.department_id = d.department_id va a funcionar.
FIS
Usted puede aplicar condiciones adicionales a la unin.
A veces es necesario combinar una tabla consigo misma. Para encontrar el nombre del
director de cada empleado, lo que necesita para unirse a la tabla Employees a s mismo,
o realizar una auto-join. Por ejemplo, para encontrar el nombre del director de Lorentz, es
necesario:
FIS
En este proceso, nos fijamos en la tabla dos veces. La primera vez que se mira en la tabla
para encontrar Lorentz en la columna LAST_NAME y el valor MANAGER_ID de 103. La
segunda vez que busque en la columna para encontrar EMPLOYEE_ID 103 y la columna
LAST_NAME para encontrar Hunold.
La clusula ON tambin se puede utilizar para unirse a las columnas que tienen nombres
diferentes, dentro de la misma tabla o en una tabla diferente.
FIS
Un combinacin de no igualdad (nonequijoin) es una condicin de combinacin que
contiene algo ms que un operador de igualdad.
Es importante sealar que todos los empleados aparecer exactamente una vez cuando
esta consulta es ejecutada. Ningn empleado se repite en la lista. Hay dos razones para
esto:
Ninguna de los registros de la tabla JOBS contienen los ttulos que se superponen. Es
decir, el valor de los sueldos de un empleado puede estar slo entre los bajos salarios
y altos valores de sueldos de una de los registros de la tabla en su escala salarial.
Todos los sueldos de los empleados se encuentran dentro de los lmites previstos por
la tabla de clasificacin de los puestos. Es decir, ningn empleado gana menos que el
valor ms bajo que figura en la columna MIN_SALARY o ms que el valor ms alto
que figura en la columna MAX_SALARY.
Nota: Otras condiciones (tales como <= y> =) se puede utilizar, pero entre es el ms
simple. Recuerde que debe especificar el valor baja primera y la ltima gran valor cuando
se utiliza la condicin BETWEEN. El servidor de Oracle traduce la condicin BETWEEN a
un par de condiciones AND. Por lo tanto, utilizando BETWEEN no tiene beneficios en el
rendimiento, pero debe ser utilizado slo por la simplicidad lgica.
Los alias de tabla que se hayan especificado en el ejemplo de la diapositiva por razones
de rendimiento, no debido a la ambigedad posible.
REGISTROS QUE NO COINCIDEN DIRECTAMENTE UTILIZANDO OUTER JOIN
FIS
Si un registro no cumple una condicin de combinacin, el registro no aparece en el
resultado de la consulta.
Para devolver el registro del departamento que no tiene ningn empleado o empleados
que no tienen un departamento asignado, se puede utilizar una combinacin externa.
En SQL: 1999, la combinacin de dos tablas que retornan slo los registros
coincidentes se llama INNER JOIN
Una combinacin entre dos tablas que devuelve los resultados de la unin interna, as
como los registros no coincidentes de una tabla a la izquierda (o derecha) se OUTER
join
Una combinacin entre dos tablas que devuelve los resultados de una combinacin
interna, as como los resultados de left y right join es una combinacin completa full
join.
Al unir tablas con la clausulas NATURAL JOIN, USING, u ON resulta en un INNER JOIN.
Los registros no coincidentes no se muestran en la salida. Para devolver los registros no
coincidentes, se puede utilizar OUTER JOIN. Una combinacin externa OUTER JOIN
devuelve todos los registros que satisfagan la condicin de combinacin, y tambin
devuelve todas o algunas de los registros de una tabla para la que no hay registros de la
otra tabla satisfacer la condicin de combinacin.
FIS
RIGHT OUTER
FULL OUTER
Esta consulta recupera todos los registros en la tabla de EMPLOYEES, lo que es la tabla
de la izquierda, incluso si no hay ninguna coincidencia en la tabla DEPARTAMENTS.
Esta consulta recupera todos los registros en la tabla de EMPLOYEES, incluso si no hay
coincidencia en la tabla DEPARTAMENTS. Tambin recupera todos los registros en la
tabla DEPARTAMENTS, incluso si no hay ninguna coincidencia en la tabla EMPLOYEES.
PRODUCTOS CARTESIANOS
FIS
Cuando una condicin de unin no es vlida o se omite por completo, el resultado es un
producto cartesiano, en el que todas las combinaciones de registros se muestran. Todos
los registros de la primera tabla se unen a todas los registros de la segunda tabla.
Productos cartesianos son tiles para algunas pruebas cuando se necesita generar un
gran nmero de registros para simular una cantidad razonable de datos.
FIS
Esto tambin se llama un producto cartesiano entre las dos tablas.
La tcnica CROSS JOIN puede aplicarse a muchas situaciones tilmente. Por ejemplo,
para devolver los costes laborales totales por la oficina por mes, incluso si X meses no
tiene ningn costo la mano de obra, que se puede hacer una combinacin cruzada de las
oficinas con una tabla de todos los meses.
Es una buena prctica de manera explcita CROSS JOIN en el SELECT cuando tiene la
intencin de crear un producto cartesiano. Por lo tanto, es muy claro que la intencin de
que esto suceda y no es el resultado de la falta se une.
EXAMEN
1. Equijoins
2. Nonequijoins
3. Left Outer Join
4. Right Outer Join
FIS
5. Full Outer Join
6. Self joins
7. Natural joins
8. Productos cartesianos
Respuestas: 1, 2, 3, 4, 6, 8
RESUMEN
En esta leccin, usted debe haber aprendido a utilizar se une para mostrar los datos de
varias tablas mediante el uso de:
FIS
Cross joins
Natural joins
Full (o dos lados) Outer joins
Productos cartesianos
Alias de tabla
FIS
1. Escribir una consulta para el departamento de recursos humanos para producir las
direcciones de todos los departamentos. Utilizar las ubicaciones y las tablas
COUNTRIES. Muestra el ID de la ubicacin, direccin, ciudad, estado o provincia y el
pas en la salida. Use una unin natural para producir los resultados.
FIS
5. Modificar lab_06_04.sql para mostrar todos los empleados, incluido el rey, que no
tiene director. Ordenar los resultados por el nmero de empleado. Guarde su
instruccin SQL como lab_06_05.sql. Ejecutar la consulta en lab_06_05.sql.
6. Crear un informe para el departamento de recursos humanos que muestra los
apellidos de los empleados, nmeros de departamento, y todos los empleados que
trabajan en el mismo departamento como un empleado determinado. D a cada
columna de una etiqueta apropiada. Guardar la secuencia de comandos en un archivo
FIS
denominado lab_06_06.sql.