Вы находитесь на странице: 1из 20

[ESCRIBIR EL NOMBRE DE LA COMPAA]

OPERADORES Y TIPOS DE JOIN

ASIGNATURA:

Base de Datos II DOCENTE: Ing. Diana Cruzado Vargas ALUMNO: Correa Chvez, Jonathan. Ciclo: V Cajamarca Per 2012

TIPOS DE OPERADORES EN ORACLE

OBTENIENDO DATOS DE MLTIPLES TABLAS

A. INTRODUCCION En algunas ocasiones se requieren datos de ms de una tabla. Utilizando clusulas SQL es posible recuperar datos combinados de varias tablas, unindolas entre s de dos en dos. En Oracle existen dos formas de hacer una unin entre tablas, la clsica, que est disponible en todas las versiones, pero no cumple con los estndares ANSI y la estndar, que se puede usar a partir de Oracle 9i y cumple con la regulacin SQL:1999. A partir de aqu vamos a utilizar la Base de Datos HR para todos los ejemplos B. CONCEPTOS BSICOS PRODUCTO CARTESIANO Cuando una condicin Join (asociacin) es invlida u omitida completamente, el resultado es un producto cartesiano, en el que todas las combinaciones de filas son mostrada. Todas las filas de la primera tabla son asociadas con las filas de la segunda tabla. Un producto cartesiano tiende a generar un largo nmero de filas, y el resultado es raramente utilizado. Siempre se debe incluir una condicin Join vlida en una clusula WHERE, a menos que se tenga una necesidad especfica para combinar todas las filas de todas las tablas. El producto cartesiano es til para algunas pruebas cuando se necesita generar un largo nmero de filas simulando un razonable nmero de datos.

En la imagen 1 posterior el reporte muestra datos de dos tablas separadas. o o o El identificador del empleado existe en la tabla EMPLOYEES El identificador del departamento existe las tablas de EMPLOYEES y DEPARTMENTS El identificador de localizacin existe en la tabla DEPARTMENTS para producir el reporte se necesita asociar las tablas EMPLOYEES y DEPARTMENTS y acceder a los datos de ambas.

Ejemplo: EMPLOYEES 107 FILAS EMPLOYEES 27 FILAS

. .

. .

Producto Cartesiano 107*27=2889


. .

Elaboracin propia Imagen 1

Un Producto cartesiano es generado si una condicin JOIN (asociacin) es omitida. En la imagen anterior se muestra el apellido y nombre del departamento de las tablas EMPLOYEES y DEPARTMENTS. Puesto que no se ha especificado una clusula WHERE, todas las filas (107) de la tabla EMPLOYEES son asociadas con todas las filas (27) de la tabla DEPARTMENTS, en consecuencia 2889 filas son mostradas.

C. TIPOS DE JOIN La base de datos Oracle9i ofrece la sintaxis JOIN de SQL: 1999. Antes de la puesta en marcha de los productos 9i, la sintaxis del JOIN era diferente al estndar de ANSI. En el nuevo SQL: 1999 la sintaxis JOIN no ofrece ningn funcionamiento benfico con respecto a la sintaxis JOIN propiedad de Oracle.

Oracle Propietary Joins (9i and prior): Equijoin Non-Equijoin Outer Join Self Join

SQL: 1999 Compliant Joins: Cross Joins Natural Joins Using clause Full or two sided outer Joins Arbitrary join conditions for outer Joins

Definiendo Joins

SELECT tabla1.columna1, tabla2.columna2 FROM tabla1, tabla2 WHERE tabla1.columna1 = tabla2.columna2;

Cuando los datos de ms de una tabla de una base de datos son requeridos, una condicin Join es utilizada. Las filas en una tabla pueden ser asociadas con las filas de otra tabla de acuerdo a los valores comunes existentes en sus correspondientes columnas, esto es usualmente una llave primaria (primary key) y una llave fornea (foreing key). Para desplegar datos de dos o ms tablas relacionadas. Se escribe una simple condicin join en la clusula WHERE. En la sintaxis: table1.column denota la tabla y columna donde el dato ser recuperado table1.column1 = table2.column2 es la condicin Join (o relacin) del conjunto de tablas

Normas a seguir Cuando escribes una sentencia SELECT que asocia tablas, se precede al nombre de la columna con el nombre de la tabla para una mejor claridad y resaltar el acceso a la base de datos. Si el mismo nombre de columna aparece en ms de una tabla, el nombre de la columna debe ser antecedido con el nombre de la tabla. La asociacin con n tablas en su conjunto, requiere un mnimo de n-1 condiciones de asociacin. Por ejemplo, un Join o asociacin con 4 tablas, requiere de al menos 3 asociaciones. Esta regla puede no aplicarse si la tabla tiene una llave primaria concatenada, en estos casos ms de una columna es requerida para identificar de forma nica a cada columna.

Oracle Propietary Joins (9i and prior): 1. Unin de Igualdad (Equijoin) Este tipo de unin implica que los valores de las columnas utilizadas en la condicin de unin deben ser iguales. Es el tipo de unin que se suele producir entre tablas relacionadas por una clave primaria y una clave ajena. Los equijoins tambin son llamados simple Joins o Inner joins.

Ejemplo: Para determinar el nombre del departamento de un empleado, se compara el valor de la columna DEPARTMENT_ID de la tabla EMPLOYEES con el valor de la columna DEPARTMENT_ID de la tabla DEPARTMENTS. La relacin entre las tablas EMPLOYEES y DEPARTMENTS es un equijoinesto es, los valores en la columna DEPARTMENT_ID en ambas tablas deben ser iguales. Frecuentemente este tipo de asociaciones involucra una llave primaria y una llave fornea.

Foreign key

Primary key

1.1. Recuperando registros con equijoins La clusula SELECT especifica el nombre de las columnas a recuperar o employees.employee_id, employees.last_name y employees.department_id son columnas de la tabla EMPLOYEES. departments.department_id y departments.location_id son columnas de la tabla DEPARTMENTS.

La clusula FROM especifica las tablas de la base de datos que se deben acceder: o o Tabla EMPLOYEES Tabla DEPARTMENTS

La clusula WHERE como las tablas se relacionaran o asociaran: o EMPLOYEES.DEPARTMENT_ID = DEPARTMENTS.DEPARTMENT_ID Puesto que la columna DEPARTMENT_ID es comn en ambas tablas, esta debe ser antecedida del nombre de la tabla para evitar ambigedades.

Ejemplo

1.2. Condiciones adicionales de bsqueda De forma adicional al Join, se puede tener un criterio en la clusula WHERE para restringir las filas bajo las consideraciones de una o ms tablas. Por ejemplo, para desplegar el nmero de departamento y nombre de departamento del empleado Matos, se necesita de una condicin adicional en la clusula WHERE. Ejemplo:

1.3. Cualificando columnas ambiguas Se necesitan cualificar el nombre de las columnas en la clusula WHERE con el nombre de la tabla para evitar ambigedad. Sin el prefijo de la tabla, la columna DEPARTMENT_ID podra ser de la tabla DEPARTMENTS o EMPLOYEES. Es necesario agregar el prefijo de la tabla para ejecutar su consulta. Si no existen columnas con nombres comunes entre las tablas, no es necesario cualificar las columnas. Sin embargo, el uso del prefijo mejora el desempeo, puesto que se le indica al servidor Oracle exactamente la columna a buscar. El requerimiento para cualificar nombres de columnas ambiguas es tambin aplicable para columnas que pueden ser ambiguas en otras clusulas, como la clusula SELECT o la clusula ORDER BY 1.3.1. Alias de tablas Cualificar el nombre de columnas con el nombre de la tabla puede ser muy tardado, particularmente si los nombres de las tablas son largos. Se puede hacer uso de alias para tablas en lugar del nombre de la tabla. De la misma forma que se da un alias a una columna con otro nombre, un alias de tabla le otorga otro nombre a la misma. Los alias de tablas ayudan a mantener el cdigo SQL ms pequeo y usar menos memoria. Note como en el ejemplo, el alias de una tabla es identificado en la clusula FROM. El nombre de la tabla es especificado en su totalidad, seguido por un espacio y el nombre del alias. La tabla EMPLOYEES tiene el alias e y la tabla DEPARTMENTS el alias d. Normas Los alias de tablas pueden tener ms de 30 caracteres, pero es mejor que sean cortos. Si un alias de tabla es usado para una tabla en particular en la clusula FROM, entonces este alias debe ser substituido en por toda la sentencia SELECT El alias debe ser significativo El alias es vlido solamente para la sentencia SELECT actual

Ejemplo:

1.4. Condiciones adicionales de bsqueda para ms de dos tablas En algunas ocasiones se requiere ms de dos tablas. Por ejemplo, mostrar el apellido, nombre de departamento y ciudad para cada empleado, se necesita asociar las tablas EMPLOYEES, DEPARTMENTS y LOCATIONS. Ejemplo:

2. Non-Equijoins Un non-equijoin es un Join conteniendo alguna otra condicin diferente a un operador de igualdad. Ejemplo:

La relacin entre las tablas EMPLOYEES y JOBS es un ejemplo de un non-equijoin. Una relacin entre estas dos tablas es que la columna SALARY de la tabla EMPLOYEES puede encontrarse entre las columnas MIN_SALARY y MAX_SALARY de la tabla JOBS. La relacin es obtenida usando otro operador diferente al (=). En el ejemplo anterior se crea un non-equijoin para evaluar la clasificacin de salario de los empleados. El salario debe estar entre algn par de rangos altos y bajos. Es importante notar que todos los empleados aparecen exactamente desde que la consulta es ejecutada. Los empleados no se repiten en la lista. Existen dos razones para esto:

Todos los salarios de los empleados se encuentran en los lmites provistos por la tabla JOBS. Esto es, no se tienen empleados que ganen menos que el valor contenido en la columna MIN_SALARY o ms que el valor contenido en la columna MAX_SALARY.

Nota: Otras condiciones como <= y >= pueden ser utilizadas, pero es ms sencillo el BETWEEN. Recuerde especificar primeramente el rango menor que el mayor en la clusula BETWEEN.

3. Outer Join (Uniones Externas). 3.1. Obteniendo registros con comparaciones no directas Si una fila no cumple una condicin Join, esta fila no aparecer en el resultado de la consulta. Por ejemplo en la condicin equijoin de las tablas EMPLOYEES y DEPARTMENTS, Un empleado no aparece porque no existe un valor de departamento para l en la tabla EMPLOYEES. Por lo que en lugar de ver 107 empleados en el resultado, slo se muestran 106.

. . .

3.2. Usando Outer Joins para obtener registros sin una comparacin directa Estas uniones muestran tanto los registros que cumplen las condiciones como los que no las cumplen, mostrando la informacin que falta como valores nulos. SINTAXIS SELECT tabla1.columna1, tabla2.columna2 FROM tabla1, tabla2 WHERE tabla1.columna1(+) = tabla2.columna2;

SELECT tabla1.columna1, tabla2.columna2 FROM tabla1, tabla2 WHERE tabla1.columna1 = tabla2.columna2(+);

La ausencia de filas puede ser obtenida si un operador outer join es utilizado en la condicin join. El operador es una smbolo positivo encerrado entre parntesis (+), y es colocado a un lado del join que es deficiente en informacin. Este operador tiene el efecto de crear una o ms filas nulas, para el cual una o ms filas de una tabla no deficiente pueda ser asociada. En la sintaxis: table1.column = Es la condicin que asocia (o relaciona) las tablas. table2.column (+) Es el smbolo outer join, que puede ser colocado a un lado de la condicin de la clusula WHERE, pero no en ambos lados. (Coloque el smbolo outer join seguido del nombre de la columna de la tabla con deficiencia de informacin).

Ejemplo:

En el ejemplo anterior se muestran los apellidos, departamentos y nombres. El departamento de contratacin no tiene ningn empleado. El valor mostrado es vaci. 3.2.1. Restricciones del Outer Join El operador outer join puede aparecer en solo un lado de la expresin en el lado que tenga ausencia de informacin. Esto regresa aquellas filas de una tabla que no tenga una correspondencia con la otra tabla. Una condicin que involucra un outer join no puede utilizar el operador IN o ser vinculado con otra condicin por el operador OR.

4. Self Joins (Autouniones) 4.1. Asociando una tabla a si mismo En algunas ocasiones es necesario asociar una tabla a s mismo. Para encontrar el nombre del jefe de cada empleado, se requiere asociar la tabla EMPLOYEES con si misma o ejecutar un self join. Por ejemplo para encontrar el nombre del jefe de Whalen, se necesita:

Ejemplo:

En el ejemplo anterior el Join de la tabla EMPLOYEES se realiza a s mismo. Para simular dos tablas en la clusula FROM, hay dos alias llamados w y m, de la misma tabla EMPLOYEES. En este ejemplo, la clusula WHERE contiene el Join de esta manera donde el nmero del jefe del empleado es igual al nmero del empleado asignado al jefe.

SQL: 1999 Compliant Joins: Definiendo joins Utilizando la sintaxis SQL 1999, se puede obtener los mismos resultados que hemos visto en los temas anteriores. Sintaxis: SELECT tabla1.columna1, tabla2.columna2 FROM tabla1 [CROSS JOIN tabla2] | [NATURAL JOIN tabla2] | [JOIN tabla2 USING (columna2)] | [JOIN tabla2 ON (tabla1.columna1 = tabla2.columna2)] | [LEFT | RIGHT | FULL OUTER JOIN tabla2 ON (tabla1.columna1 = tabla2.columna2)];

Los resultados obtenidos con ambas sintaxis son equivalentes. CROSS JOIN devuelve un producto cartesiano de las dos tablas. NATURAL JOIN une dos tablas basndose en que tengan el mismo nombre de columna. JOIN realiza una unin entre las dos tablas especificando el nombre de la columna que las une. Se puede expresar como INNER JOIN. LEFT / RIGHT / FULL OUTER JOIN realiza una unin externa entre las dos tablas especificando el nombre de la columna de la unin.

1. CROSS JOIN Equivale al producto cartesiano en la unin de dos tablas.

2. NATURAL JOIN Este tipo de unin se basa en que el nombre de las columnas de las tablas implicadas sea el mismo, adems, los tipos de dato de ambas columnas tiene que ser tambin equivalente, de lo contrario, se producir un error.

En el ejemplo anterior, la tabla LOCATIONS es asociada con la tabla DEPARTMENT por la columna LOCATION_ID, que es la nica columna con el mismo nombre en ambas tablas. Si otra columna comn estuviese presente, el join puede usarla. 2.1. Natural Joins con una clusula WHERE Las restricciones adicionales en un natural join son implementadas por el uso de la clusula WHERE. En el ejemplo siguiente se limitan las filas resultantes con un nmero de departamento igual a 20 o 50. Ejemplo:

2.2. La clusula USING El natural joins utiliza todas las columnas cuyos nombres y tipos de datos sean iguales para asociar las tablas. Las columnas referenciadas en la clusula USING no tienen que ser cualificadas (con el nombre de la tabla o alias) en cualquier lugar de la sentencia SQL. Ejemplo:

En el ejemplo se muestra una asociacin de la columna DEPARTMENT_ID de las tablas EMPLOYEES y DEPARTMENTS, para as ver la localizacin donde el empleado trabaja. 2.3. Creando joins con la clusula ON La clusula ON puede ser utilizada para asociar columnas que tienen diferentes nombres:

Un Three-Way Join es un join de tres tablas

2.4. OUTER JOINS Las uniones externas devuelven, adems de los resultados que cumplen las condiciones establecidas, los resultados que no la cumplen, pudiendo especificar el sentido de la condicin. 2.4.1. LEFT OUTER JOIN Recupera todos los resultados de la tabla situada a la izquierda de la condicin, aunque no haya coincidencias con la tabla que est a la derecha.

Ejemplo:

2.4.2. RIGHT OUTER JOIN Recupera todos los resultados de la tabla situada a la derecha de la condicin, aunque no haya coincidencias con la tabla que est a la izquierda.

2.4.3. FULL OUTER JOIN Recupera todas las filas de la tabla situada a la derecha de la sentencia aunque no haya coincidencia con la de la izquierda, y tambin recupera todos los registros de la tabla izquierda aunque no exista ninguna coincidencia con la derecha.

D. Resumen Existen mltiples caminos para asociar tablas. Tipos de joins Equijoins. Non-equijoins. Outer joins. Self joins. Cross joins. Natural joins. Full u Outer joins.

Вам также может понравиться