Informe de Tipos de Join

26
[ESCRIBIR EL NOMBRE DE LA COMPAÑÍA] OPERADORES Y TIPOS DE JOIN ASIGNATURA: Base de Datos II DOCENTE: Ing. Diana Cruzado Vargas ALUMNO: Correa Chávez, Jonathan. Ciclo: V Cajamarca – Perú 2012

Transcript of Informe de Tipos de Join

Page 1: Informe de Tipos de Join

OPERADORES Y TIPOS DE JOIN

ASIGNATURA:

Base de Datos II

DOCENTE:

Ing. Diana Cruzado Vargas

ALUMNO:

Correa Chávez, Jonathan.

Ciclo:

V

Cajamarca – Perú 2012

Page 2: Informe de Tipos de Join

TIPOS DE OPERADORES EN ORACLE

OBTENIENDO DATOS DE MÚLTIPLES TABLAS

Page 3: Informe de Tipos de Join

A. INTRODUCCION

En algunas ocasiones se requieren datos de más de una tabla. Utilizando cláusulas SQL es posible recuperar datos combinados de varias tablas, uniéndolas entre sí de dos en dos.

En Oracle existen dos formas de hacer una unión entre tablas, la clásica, que está disponible en todas las versiones, pero no cumple con los estándares ANSI y la estándar, que se puede usar a partir de Oracle 9i y cumple con la regulación SQL:1999.

A partir de aquí vamos a utilizar la Base de Datos HR para todos los ejemplos

B. CONCEPTOS BÁSICOS

PRODUCTO CARTESIANO

Cuando una condición Join (asociación) es inválida 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 número de filas, y el resultado es raramente utilizado. Siempre se debe incluir una condición Join válida en una cláusula WHERE, a menos que se tenga una necesidad específica para combinar todas las filas de todas las tablas.

El producto cartesiano es útil para algunas pruebas cuando se necesita generar un largo número de filas simulando un razonable número de datos.

En la imagen 1 posterior el reporte muestra datos de dos tablas separadas.

o El identificador del empleado existe en la tabla EMPLOYEESo El identificador del departamento existe las tablas de EMPLOYEES

y DEPARTMENTSo El identificador de localización existe en la tabla DEPARTMENTS

para producir el reporte se necesita asociar las tablas EMPLOYEES y DEPARTMENTS y acceder a los datos de ambas.

Page 4: Informe de Tipos de Join

Ejemplo:

Un Producto cartesiano es generado si una condición JOIN (asociación) 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 cláusula 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

.

.

.

.

.

EMPLOYEES 107 FILAS EMPLOYEES 27 FILAS

.

.

Producto Cartesiano

107*27=2889

Elaboración propia

Imagen 1

Page 5: Informe de 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 estándar de ANSI. En el nuevo SQL: 1999 la sintaxis JOIN no ofrece ningún funcionamiento benéfico con respecto a la sintaxis JOIN propiedad de Oracle.

Definiendo Joins

Cuando los datos de más de una tabla de una base de datos son requeridos, una condición 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 foránea (foreing key). Para desplegar datos de dos o más tablas relacionadas. Se escribe una simple condición join en la cláusula WHERE.

En la sintaxis:table1.column denota la tabla y columna donde el dato será recuperado

table1.column1 =table2.column2 es la condición Join (o relación) del conjunto de tablas

Normas a seguir

SELECT tabla1.columna1, tabla2.columna2FROM tabla1, tabla2WHERE tabla1.columna1 = tabla2.columna2;

Oracle Propietary Joins (9i and prior):

SQL: 1999 Compliant Joins:

Equijoin Cross JoinsNon-Equijoin Natural JoinsOuter Join Using clauseSelf Join Full or two sided outer Joins

Arbitrary join conditions for outer Joins

Page 6: Informe de Tipos de Join

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 más de una tabla, el nombre de la columna debe ser antecedido con el nombre de la tabla.

La asociación con n tablas en su conjunto, requiere un mínimo de n-1 condiciones de asociación. Por ejemplo, un Join o asociación 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 más de una columna es requerida para identificar de forma única a cada columna.

Oracle Propietary Joins (9i and prior):

1. Unión de Igualdad (Equijoin)

Este tipo de unión implica que los valores de las columnas utilizadas en la condición de unión deben ser iguales. Es el tipo de unión que se suele producir entre tablas relacionadas por una clave primaria y una clave ajena. Los equijoins también 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 relación 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 foránea.

Page 7: Informe de Tipos de Join

1.1.Recuperando registros con equijoins

La cláusula 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.

o departments.department_id y departments.location_id son columnas de la tabla DEPARTMENTS.

La cláusula FROM especifica las tablas de la base de datos que se deben acceder:

o Tabla EMPLOYEESo Tabla DEPARTMENTS

La cláusula WHERE como las tablas se relacionaran o asociaran:

o EMPLOYEES.DEPARTMENT_ID = DEPARTMENTS.DEPARTMENT_ID Puesto que la columna DEPARTMENT_ID es común en ambas tablas, esta debe ser antecedida del nombre de la tabla para evitar ambigüedades.

Primary keyForeign key

Page 8: Informe de Tipos de Join

Ejemplo

1.2. Condiciones adicionales de búsqueda

De forma adicional al Join, se puede tener un criterio en la cláusula WHERE para restringir las filas bajo las consideraciones de una o más tablas. Por ejemplo, para desplegar el número de departamento y nombre de departamento del empleado Matos, se necesita de una condición adicional en la cláusula WHERE.

Ejemplo:

Page 9: Informe de Tipos de Join

1.3. Cualificando columnas ambiguas

Se necesitan cualificar el nombre de las columnas en la cláusula WHERE con el nombre de la tabla para evitar ambigüedad. Sin el prefijo de la tabla, la columna DEPARTMENT_ID podría 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 desempeño, puesto que se le indica al servidor Oracle exactamente la columna a buscar.

El requerimiento para cualificar nombres de columnas ambiguas es también aplicable para columnas que pueden ser ambiguas en otras cláusulas, como la cláusula SELECT o la cláusula ORDER BY

1.3.1. Alias de tablasCualificar 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 código SQL más pequeño y usar menos memoria.

Note como en el ejemplo, el alias de una tabla es identificado en la cláusula 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 más de 30 caracteres, pero es mejor que sean cortos.

Si un alias de tabla es usado para una tabla en particular en la cláusulaFROM, entonces este alias debe ser substituido en por toda la sentencia SELECT

El alias debe ser significativo El alias es válido solamente para la sentencia SELECT actual

Page 10: Informe de Tipos de Join

Ejemplo:

1.4. Condiciones adicionales de búsqueda para más de dos tablas

En algunas ocasiones se requiere más 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:

Page 11: Informe de Tipos de Join

2. Non-Equijoins

Un non-equijoin es un Join conteniendo alguna otra condición diferente a un operador de igualdad.

Ejemplo:

La relación entre las tablas EMPLOYEES y JOBS es un ejemplo de un non-equijoin. Una relación 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 relación es obtenida usando otro operador diferente al (=).

En el ejemplo anterior se crea un non-equijoin para evaluar la clasificación de salario de los empleados. El salario debe estar entre algún 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:

Page 12: Informe de Tipos de Join

Todos los salarios de los empleados se encuentran en los límites provistos por la tabla JOBS. Esto es, no se tienen empleados que ganen menos que el valor contenido en la columna MIN_SALARY o más que el valor contenido en la columna MAX_SALARY.

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

3. Outer Join (Uniones Externas).

3.1.Obteniendo registros con comparaciones no directas

Si una fila no cumple una condición Join, esta fila no aparecerá en el resultado de la consulta. Por ejemplo en la condición 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, sólo se muestran 106.

3.2.Usando Outer Joins para obtener registros sin una comparación directa

.

.

.

Page 13: Informe de Tipos de Join

Estas uniones muestran tanto los registros que cumplen las condiciones como los que no las cumplen, mostrando la información que falta como valores nulos.

SINTAXIS

La ausencia de filas puede ser obtenida si un operador outer join es utilizado en la condición join. El operador es una símbolo positivo encerrado entre paréntesis (+), y es colocado a un lado del join que es deficiente en información. Este operador tiene el efecto de crear una o más filas nulas, para el cual una o más filas de una tabla no deficiente pueda ser asociada.

En la sintaxis:

table1.column = Es la condición que asocia (o relaciona) las tablas.table2.column (+) Es el símbolo outer join, que puede ser colocado a un lado de la condición de la cláusula WHERE, pero no en ambos lados.(Coloque el símbolo outer join seguido del nombre de la columna de la tabla con deficiencia de información).

Ejemplo:

SELECT tabla1.columna1, tabla2.columna2FROM tabla1, tabla2WHERE tabla1.columna1(+) = tabla2.columna2;

SELECT tabla1.columna1, tabla2.columna2FROM tabla1, tabla2WHERE tabla1.columna1 = tabla2.columna2(+);

Page 14: Informe de Tipos de Join

En el ejemplo anterior se muestran los apellidos, departamentos y nombres. El departamento de contratación no tiene ningún 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 expresión – en el lado que tenga ausencia de información. Esto regresa aquellas filas de una tabla que no tenga una correspondencia con la otra tabla.

Una condición que involucra un outer join no puede utilizar el operador IN o ser vinculado con otra condición 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:

Page 15: Informe de Tipos de Join

En el ejemplo anterior el Join de la tabla EMPLOYEES se realiza a sí mismo.Para simular dos tablas en la cláusula FROM, hay dos alias llamados w y m, de la misma tabla EMPLOYEES.En este ejemplo, la cláusula WHERE contiene el Join de esta manera “donde el número del jefe del empleado es igual al número del empleado asignado al jefe”.

SQL: 1999 Compliant Joins:

Definiendo joinsUtilizando la sintaxis SQL 1999, se puede obtener los mismos resultados que hemos visto en los temas anteriores.

Sintaxis:

SELECT tabla1.columna1, tabla2.columna2FROM tabla1[CROSS JOIN tabla2] | [NATURAL JOIN tabla2] |[JOIN tabla2 USING (columna2)] |[JOIN tabla2ON (tabla1.columna1 = tabla2.columna2)] |[LEFT | RIGHT | FULL OUTER JOIN tabla2ON (tabla1.columna1 = tabla2.columna2)];

Page 16: Informe de Tipos de Join

Los resultados obtenidos con ambas sintaxis son equivalentes. CROSS JOIN devuelve un producto cartesiano de las dos tablas. NATURAL JOIN une dos tablas basándose en que tengan el mismo nombre de

columna. JOIN realiza una unión 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 unión externa entre las dos

tablas especificando el nombre de la columna de la unión.

1. CROSS JOIN

Equivale al producto cartesiano en la unión de dos tablas.

Page 17: Informe de Tipos de Join

2. NATURAL JOIN

Este tipo de unión se basa en que el nombre de las columnas de las tablas implicadas sea el mismo, además, los tipos de dato de ambas columnas tiene que ser también 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 común estuviese presente, el join puede usarla.

2.1.Natural Joins con una cláusula WHERELas restricciones adicionales en un natural join son implementadas por el uso de la cláusula WHERE. En el ejemplo siguiente se limitan las filas resultantes con un número de departamento igual a 20 o 50.

Ejemplo:

Page 18: Informe de Tipos de Join

2.2.La cláusula USINGEl natural joins utiliza todas las columnas cuyos nombres y tipos de datos sean iguales para asociar las tablas. Las columnas referenciadas en la cláusula 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 asociación de la columna DEPARTMENT_ID de las tablas EMPLOYEES y DEPARTMENTS, para así ver la localización donde el empleado trabaja.

2.3.Creando joins con la cláusula ONLa cláusula ON puede ser utilizada para asociar columnas que tienen diferentes nombres:

Un Three-Way Join es un join de tres tablas

Page 19: Informe de Tipos de Join

2.4. OUTER JOINSLas uniones externas devuelven, además de los resultados que cumplen las condiciones establecidas, los resultados que no la cumplen, pudiendo especificar el sentido de la condición.

2.4.1. LEFT OUTER JOINRecupera todos los resultados de la tabla situada a la izquierda de la condición, aunque no haya coincidencias con la tabla que está a la derecha.

Ejemplo:

2.4.2. RIGHT OUTER JOINRecupera todos los resultados de la tabla situada a la derecha de la condición, aunque no haya coincidencias con la tabla que está a la izquierda.

Page 20: Informe de Tipos de Join

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

D. ResumenExisten múltiples caminos para asociar tablas.

Tipos de joins

• Equijoins.• Non-equijoins.• Outer joins.• Self joins.• Cross joins.• Natural joins.• Full u Outer joins.