You are on page 1of 10

Join

Join
La sentencia join en SQL permite combinar registros de dos o ms tablas en una base de datos relacional. En el Lenguaje de Consultas Estructurado (SQL), hay tres tipo de JOIN: interno, externo, y cruzado. En casos especiales una tabla puede unirse a s misma, produciendo una auto-combinacin, SELF-JOIN. Matemticamente, JOIN es composicin relacional, la operacin fundamental en el lgebra relacional, y generalizando es una funcin de composicin.

Tablas de ejemplo
Todas las explicaciones que estn a continuacin usan las siguientes dos tablas para ilustrar el efecto de diferentes clases de uniones JOIN.

Tabla Empleado
Apellido IDDepartamento Andrade Jordn Steinberg Rbinson Zolano Gaspar 31 33 33 34 34 36

Tabla Departamento
NombreDepartamento IDDepartamento Ventas Ingeniera Produccin Mercadeo 31 33 34 35

La tabla Empleado contiene los apellidos de los empleados junto al nmero del departamento al que pertenecen, mientras que la tabla Departamento contiene el nombre de los departamentos de la empresa. Existen empleados que tienen asignado un nmero de departamento que no se encuentra en la tabla Departamento (Gaspar). Igualmente, existen departamentos a los cuales no pertenece ningn empleado (Mercadeo). Esto servir para presentar algunos ejemplos ms adelante.

Join

Combinacin interna (INNER JOIN)


Con esta operacin se calcula el producto cruzado de todos los registros; as cada registro en la tabla A es combinado con cada registro de la tabla B; pero slo permanecen aquellos registros en la tabla combinada que satisfacen las condiciones que se especifiquen. Este es el tipo de JOIN ms utilizado por lo que es considerado el tipo de combinacin predeterminado. SQL:2003 especifica dos formas diferentes para expresar estas combinaciones. La primera, conocida como explcita usa la palabra JOIN, mientras que la segunda es implcita y usa ',' para separar las tablas a combinar en la sentencia FROM de la declaracin SELECT. Entonces siempre se genera el producto cruzado del cual se seleccionan las combinaciones que cumplan lo que indica la sentencia WHERE. Es necesario tener especial cuidado cuando se combinan columnas con valores nulos NULL ya que el valor nulo no se combina con otro valor o con otro nulo, excepto cuando se le agregan predicados tales como IS NULL o IS NOT NULL. Como ejemplo, la siguiente consulta toma todos los registros de la tabla Empleado y encuentra todas las combinaciones en la tabla Departamento. La sentencia JOIN compara los valores en la columna IDDepartamento en ambas tablas. Cuando no existe esta correspondencia entre algunas combinaciones, stas no se muestran; es decir que si el nmero de departamento de un empleado no coincide con los nmeros de departamento de la tabla Departamento, no se mostrar el empleado con su respectivo departamento en la tabla resultante. Las dos consultas siguientes son similares, y se realizan de manera explicita (A) e implcita (B). A. Ejemplo de la sentencia INNER JOIN explcita: SELECT * FROM empleado INNER JOIN departamento ON empleado.IDDepartamento = departamento.IDDepartamento B. Ejemplo de la sentencia INNER JOIN implcita: SELECT * FROM empleado, departamento WHERE empleado.IDDepartamento = departamento.IDDepartamento Resultados:
Empleado.Apellido Empleado.IDdepartamento departamento.NombreDepartamento departamento.IDDepartamento Zolano Jordn Rbinson Steinberg Andrade 34 33 34 33 31 Produccin Ingeniera Produccin Ingeniera Ventas 34 33 34 33 31

El empleado Gaspar y el departamento de Mercadeo no son presentados en los resultados ya que ninguno de stos tiene registros correspondientes en la otra tabla. No existe un departamento con nmero 36 ni existe un empleado con nmero de departamento 35. A la combinacin que utiliza comparaciones dentro del predicado JOIN se le llama theta-join. C. Ejemplo de combinacin tipo theta: SELECT * FROM empleado

Join INNER JOIN departamento ON empleado.IDDepartamento < departamento.IDDepartamento Las operaciones INNER JOIN puede ser clasificadas como de equivalencia, naturales, y cruzadas. De equivalencia (equi-join) Es una especie de theta-join que usa comparaciones de igualdad en el predicado JOIN. Cuando se usan operadores, tales como < o > no se puede clasificar en este rango. D. Ejemplo de combinacin de equivalencia: SELECT * FROM empleado INNER JOIN departamento ON empleado.IDDepartamento = departamento.IDDepartamento La tabla resultante presenta dos columnas llamadas IDDepartamento, una proveniente de la tabla Empleado y otra de la tabla Departamento. SQL:2003 no tiene una sintaxis especfica para esta clase de combinaciones. Natural (Natural join) Es una especializacin de la combinacin de equivalencia, anteriormente mencionada. En este caso se comparan todas las columnas que tengan el mismo nombre en ambas tablas. La tabla resultante contiene slo una columna por cada par de columnas con el mismo nombre. E. Ejemplo de combinacin natural: SELECT * FROM empleado NATURAL JOIN departamento El resultado es un poco diferente al del ejemplo D, ya que esta vez la columna IDDepartamento se muestra sola una vez en la tabla resultante.
Empleado.Apellido IDDepartamento Departamento.NombreDepartamento Zolano Jordn Rbinson Steinberg Andrade 34 33 34 33 31 Produccin Ingeniera Produccin Ingeniera Ventas

El uso de esta sentencia NATURAL puede producir resultados ambiguos y generar problemas si la base de datos cambia, porque al aadir, quitar, o renombrar las columnas, puede perder el sentido la sentencia; por esta razn es preferible expresar el predicado usando las otras expresiones nombradas anteriormente (ejemplos A y B).

Join Cruzada (Cross join) Presenta el producto cartesiano de todos los registros de las dos tablas. El cdigo SQL para realizar este producto cartesiano enuncia las tablas que sern combinadas, pero no incluye algn predicado que filtre el resultado. F. Ejemplo de combinacin cruzada explcita: SELECT * FROM empleado CROSS JOIN departamento G. Ejemplo de combinacin cruzada implcita: SELECT * FROM empleado, departamento;
Empleado.Apellido Empleado.IDDepartamento Departamento.NombreDepartamento Departamento.IDDepartamento Andrade Jordn Steinberg Zolano Rbinson Gaspar Andrade Jordn Steinberg Solano Rbinson Gaspar Andrade Jordn Steinberg Solano Rbinson Gaspar Andrade Jordn Steinberg Solano Rbinson Gaspar 31 33 33 34 34 36 31 33 33 34 34 36 31 33 33 34 34 36 31 33 33 34 34 36 Ventas Ventas Ventas Ventas Ventas Ventas Ingeniera Ingeniera Ingeniera Ingeniera Ingeniera Ingeniera Produccin Produccin Produccin Produccin Produccin Produccin Mercadeo Mercadeo Mercadeo Mercadeo Mercadeo Mercadeo 31 31 31 31 31 31 33 33 33 33 33 33 34 34 34 34 34 34 35 35 35 35 35 35

Esta clase de combinaciones son usadas pocas veces, generalmente se les agregan condiciones de filtrado con la sentencia WHERE para hallar resultados especficos.

Join

Combinacin externa (OUTER JOIN)


Mediante esta operacin no se requiere que cada registro en las tablas a tratar tenga un registro equivalente en la otra tabla. El registro es mantenido en la tabla combinada si no existe otro registro que le corresponda. En SQL:2003 no existe una notacin implcita para las combinaciones externas. Este tipo de operacin se subdivide dependiendo de la tabla a la cual se le admitirn los registros que no tienen correspondencia, ya sean de tabla izquierda, de tabla derecha, o combinacin completa.

de tabla izquierda (LEFT OUTER JOIN o LEFT JOIN)


El resultado de esta operacin siempre contiene todos los registros de la tabla de la izquierda (la primera tabla que se menciona en la consulta), aun cuando no exista un registro correspondiente en la tabla de la derecha, para uno de la izquierda. La sentencia LEFT OUTER JOIN retorna la pareja de todos los valores de la tabla izquierda con los valores de la tabla de la derecha correspondientes, o retorna un valor nulo NULL en caso de no correspondencia. A diferencia del resultado presentado en los ejemplos A y B (de combinacin interna) donde no se mostraba el empleado cuyo departamento no exista; en el siguiente ejemplo se presentarn los empleados con su respectivo departamento, e inclusive se presentar el empleado, cuyo departamento no existe. H. Ejemplo de tabla izquierda para la combinacin externa: SELECT * FROM empleado LEFT OUTER JOIN departamento ON empleado.IDDepartamento = departamento.IDDepartamento
Empleado.Apellido Empleado.IDDepartamento Departamento.NombreDepartamento Departamento.IDDepartamento Jordn Andrade Rbinson Zolano Gaspar Steinberg 33 31 34 34 36 33 Ingeniera Ventas Produccin Produccin NULL Ingeniera 33 31 34 34 NULL 33

de tabla derecha (RIGHT OUTER JOIN o RIGHT JOIN)


Esta operacin es inversa a la anterior; el resultado de esta operacin siempre contiene todos los registros de la tabla de la derecha (la segunda tabla que se menciona en la consulta), aun cuando no exista un registro correspondiente en la tabla de la izquierda, para uno de la derecha. La sentencia RIGHT OUTER JOIN retorna la pareja de todos los valores de la tabla derecha con los valores de la tabla de la izquierda correspondientes, o retorna un valor nulo NULL en caso de no correspondencia. I. Ejemplo de tabla derecha para la combinacin externa: SELECT * FROM empleado RIGHT OUTER JOIN departamento ON empleado.IDDepartamento = departamento.IDDepartamento

Join

Empleado.Apellido Empleado.IDDepartamento Departamento.NombreDepartamento Departamento.IDDepartamento Zolano Jordn Rbinson Steinberg Andrade NULL 34 33 34 33 31 NULL Produccin Ingeniera Produccin Ingeniera Ventas Mercadeo 34 33 34 33 31 35

En este caso el rea de Mercadeo fue presentada en los resultados, aunque an no hay empleados registrados en dicha rea.

combinacin completa (FULL OUTER JOIN)


Esta operacin presenta los resultados de tabla izquierda y tabla derecha aunque no tengan correspondencia en la otra tabla. La tabla combinada contendr, entonces, todos los registros de ambas tablas y presentar valores nulos NULLs para registros sin pareja. J. Ejemplo de combinacin externa completa: SELECT * FROM empleado FULL OUTER JOIN departamento ON empleado.IDDepartamento = departamento.IDDepartamento
Empleado.Apellido Empleado.IDDepartamento Departamento.NombreDepartamento Departamento.IDDepartamento Zolano Jordn Rbinson Gaspar Steinberg Andrade NULL 34 33 34 36 33 31 NULL Produccin Ingeniera Produccin NULL Ingeniera Ventas Mercadeo 34 33 34 NULL 33 31 35

Como se puede notar, en este caso se encuentra el empleado Gaspar con valor nulo en su rea correspondiente, y se muestra adems el departamento de Mercadeo con valor nulo en los empleados de esa rea. Algunos sistemas de bases de datos no soportan esta funcionalidad, pero esta puede ser emulada a travs de las combinaciones de tabla izquierda, tabla derecha y de la sentencia de unin union. K. El mismo ejemplo puede expresarse as: SELECT * FROM empleado LEFT JOIN departamento ON empleado.IDDepartamento = departamento.IDDepartamento UNION SELECT * FROM empleado RIGHT JOIN departamento

Join ON empleado.IDDepartamento = departamento.IDDepartamento empleado.IDDepartamento IS NULL

WHERE

Implementacin
La implementacin eficiente de combinaciones ha sido un objetivo de mucho trabajo en los sistemas de bases de datos, pues aunque sean internas o externas, son muy comunes y difciles de ejecutar eficientemente. La combinacin interna de tablas se puede hacer con propiedad conmutativa y asociativa, as que el usuario slo crea la consulta y el sistema de base de datos determina la manera ms eficiente de realizar la operacin, esta decision la toma el optimizador de consultas quien tiene en cuenta dos puntos importantes: El orden de las combinaciones Como las combinaciones son conmutativas, el orden en el cual son combinadas las tablas no modifica el resultado final de la consulta. En cambio, s tiene un gran impacto sobre el costo de la operacin, de manera que elegir el mejor orden de combinaciones es muy importante. El mtodo de la combinacin Dadas dos tablas y una condicin de combinacin, existen unos cuantos algoritmos que devuelven el resultado de la combinacin. Cul algoritmo es el ms eficiente depender de los tamaos de las tablas de entrada, la cantidad de filas de cada una que satisfacen la condicin de combinacin, y las operaciones requeridas por el resto de la consulta. Los diferentes algoritmos tratan de forma diferente a las entradas. A las entradas de una combinacin se las llama respectivamente "operando externo(outer)" y "operando interno(inner)", o bien simplemente izquierdo y derecho. En el caso de bucles anidados, por ejemplo, la relacin interna ser completamente recorrida por cada fila de la relacin externa. Los planes de ejecucin que incluyen combinaciones pueden clasificarse en: Profundo a la izquierda El operando interno de cada combinacin del plan es una tabla base. Profundo a la derecha El operando externo de cada combinacin del plan es una tabla base. Denso Ambas entradas son combinaciones. Estos nombres derivan de la apariencia de la representacin grfica del plan de ejecucin como un rbol, con la relacin externa a la izquierda y la interna a la derecha (por convencin).

Algoritmos de combinacin
Existen tres algoritmos fundamentales para ejecutar una operacin de combinacin. Bucles anidados ste es el ms simple de los algortimos de combinacin. Por cada tupla de la relacin externa, se recorre completamente la relacin interna, y toda tupla que verifique la condicin de combinacin se aade al resultado. El algoritmo puede ser fcilmente generalizado para cualquier nmero de relaciones. Pseudocdigo para la combinacin de las relaciones and :

Por cada tupla en R, llamada r: Por cada tupla en S, llamada s: Si la tupla <r,s> satisface la condicin de combinacin

Join Entonces agregar la tupla <r,s> a la salida La complejidad computacional del algoritmo es de operaciones de entrada/salida, donde y

son la cantidad de tuplas en y respectivamente. Naturalmente, este algoritmo tiene un desempeo pobre si alguna de las relaciones es muy grande. El desempeo puede mejorarse si la relacin interna tiene un ndice sobre las columnas del predicado de combinacin. Existe una variacin del algoritmo de bucles anidados, llamada bucles anidados en bloque. Sea lugar de leer las dos relaciones tupla por tupla, se lee la relacin disponible, excepto dos pginas. Por cada bloque de vez, y por cada pgina leda de se realiza una iteracin sobre . En

en bloques, llenando toda la memoria , leyendo una pgina por , y cada par de

, la tupla de la pgina es comparada con las del bloque de

tuplas que satisfacen la condicin de combinacin se agrega a la pgina de salida. El algortimo de bucles anidados en bloque tiene una complejidad computacional de entrada/salida, donde y de entrada/salida si es el nmero de pginas de memoria disponibles y y operaciones de

son el tamao en pginas de operaciones de

respectivamente. Notar que la complejidad computacional es de cabe en la memoria disponible.

Combinacin por fusin Si ambas relaciones estn ordenadas por los atributos de combinacin, la operacin es trivial: 1. Por cada tupla de la relacin externa, 1. Se toma el grupo de tuplas actual de la relacin interna; un grupo est formado por un conjunto de tuplas contiguas con el mismo valor en el atributo de combinacin. 2. Por cada tupla del grupo interno actual que satisfaga la condicin de combinacin, se agrega una tupla al resultado. Una vez agotado el grupo interno, ambas bsquedas, la interna y la externa, pueden avanzar al siguiente grupo. Por esta razn muchos optimizadores guardan pista del ordenamiento en los nodos del plan (si uno o ambos operandos ya estn ordenados en funcin del atributo de combinacin, no hace falta otro ordenamiento. De lo contrario, el sistema de gestin de base de datos deber realizarlo, generalmente utilizando un ordenamiento externo para evitar consumir demasiada memoria. Combinacin Hash Este algoritmo puede ser utilizado para combinaciones "equi-join". El acceso a las tablas a ser combinadas se realiza construyendo tablas hash sobre los atributos de combinacin. La bsqueda en tabla hash es mucho ms rpida que a travs de rboles de ndice, pero slo puede realizarse una bsqueda por la condicin de igualdad.

Optimizacin de la combinacin
Semi-combinacin Es una optimizacin tcnica para las combinaciones en bases de datos distribuidas. El predicado JOIN es aplicado en diferentes fases, comenzando con la ms temprana. Esto puede reducir el tamao de los resultados inmediatos que deben ser intercambiados con nodos remotos, as reduce el trfico de red entre nodos, esto puede mejorarse con un filtro Bloom.

Join

Enlaces externos
Sentencia Join en MySQL 5.0 [1] Expresiones de tablas en PostgreSQL 8.4 (Ingls) [2] Combinar tablas JOIN [3]

Referencias
[1] http:/ / dev. mysql. com/ doc/ refman/ 5. 0/ es/ join. html [2] http:/ / www. postgresql. org/ docs/ 8. 4/ static/ queries-table-expressions. html [3] http:/ / www. programacionweb. net/ articulos/ articulo/ ?num=467

Fuentes y contribuyentes del artculo

10

Fuentes y contribuyentes del artculo


Join Fuente: http://es.wikipedia.org/w/index.php?oldid=56765023 Contribuyentes: Charrua85, Cratn, Ctrl Z, Gacpro, GermanX, Humitos, Ignacio Icke, Jesusosm, Manuelt15, Nioger, P4W3R, Pipepupo, Plux, Rgfernandez, Segedano, Yachar, 97 ediciones annimas

Licencia
Creative Commons Attribution-Share Alike 3.0 Unported //creativecommons.org/licenses/by-sa/3.0/

You might also like