Академический Документы
Профессиональный Документы
Культура Документы
ra
ue
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.
Clusula USING
Clusula ON
Auto-join
Combinacin de No Igualdad (nonequijoin)
OUTER join
Cross join
hm
aq
ue
ra
aq
tablas
EMPLOYEES
hm
Las combinaciones que cumplen con el estndar SQL: 1999 son los siguientes:
Natural join
Clusula USING
Clusula ON
OUTER join
ra
ue
aq
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
CALIFICACIN NOMBRES DE COLUMNAS AMBIGUAS
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:
hm
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.
ra
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.
ue
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.
aq
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.
hm
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.
OBTENER REGISTROS CON NATURAL JOINS
SELECT department_id, department_name,
location_id, city
FROM departments
NATURAL JOIN locations;
ra
ue
aq
hm
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.
ra
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.
aq
ue
hm
ra
ue
aq
hm
Al unirse con la clusula USING, no se puede calificar a una columna que se utiliza en la
clusula USING s mismo. Adems, si esa columna se utiliza en cualquier parte de la
sentencia SQL, no se puede alias de la misma. Por ejemplo, en la consulta mencionada
en la diapositiva, usted no debe alias de la columna LOCATION_ID en la clusula
WHERE, porque la columna se utiliza en la clusula USING.
ue
ra
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:
aq
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.
En la siguiente declaracin, MANAGER_ID est presente tanto en los empleados y
departamentos de mesa, y si MANAGER_ID no est precedido de un alias de tabla, le da
una "columna definido de forma ambigua" de error.
hm
ra
ue
aq
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.
OBTENER REGISTROS CON LA CLUSULA ON
hm
ra
ue
aq
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.
hm
ra
ue
aq
Una unin triple es una combinacin de tres tablas. En SQL:1999 compatible con la
sintaxis, se une se realizan de izquierda a derecha. Por lo tanto, la primera combinacin
que se realiza es que los empleados JOIN DEPARTAMENTS. La primera condicin de
combinacin puede hacer referencia a las columnas de los EMPLOYEES y
DEPARTAMENTS, pero no puede hacer referencia a columnas en localidades. La
segunda condicin de combinacin se puede hacer referencia a columnas de las tres
tablas.
Nota: El ejemplo de cdigo tambin se puede lograr con la clusula USING:
hm
ra
ue
hm
aq
ue
ra
aq
hm
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:
ra
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.
ue
hm
aq
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.
El ejemplo que se muestra es una auto-combinacin de la tabla EMPLOYESS, sobre la
base de las columnas EMPLOYEE_ID y MANAGER_ID.
Nota: El parntesis alrededor de las columnas combinadas, como en el ejemplo de la
diapositiva, (e.manager_id = m.employee_id) es opcional. Por lo tanto, incluso en
e.manager_id = m.employee_id va a funcionar.
ue
ra
aq
hm
ra
ue
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.
aq
hm
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.
ue
ra
aq
hm
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.
ra
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.
hm
aq
ue
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.
RIGHT OUTER JOIN
ra
ue
hm
aq
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
ra
Todas los registros de la primera tabla se unen a todas los registros de la segunda
tabla
Incluya siempre una condicin de unin vlida si se quiere evitar un producto
cartesiano.
ue
hm
aq
aq
ue
ra
hm
EXAMEN
1.
2.
3.
4.
5.
6.
7.
8.
Equijoins
Nonequijoins
Left Outer Join
Right Outer Join
Full Outer Join
Self joins
Natural joins
Productos cartesianos
hm
aq
ue
Respuestas: 1, 2, 3, 4, 6, 8
ra
RESUMEN
aq
Productos cartesianos
ue
ra
En esta leccin, usted debe haber aprendido a utilizar se une para mostrar los datos de
varias tablas mediante el uso de:
hm
ra
ue
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.
hm
aq
ue
ra
aq
hm
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.
ue
ra
aq
hm
ra
ue
hm
aq
ra
ue
aq
hm