Join (SQL)

8
 Tabla Empleado Ape llid o IDDe pa rtamento An drade 31 Jordán 33 Stei nb erg 33 Róbi n son 34 Zolano 34 Gaspar 36 Join De Wikipedia, la enciclopedia libre La se ntenci a j oin  en SQL permite combinar registros de dos o más 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-combinación, SELF-JOIN. Matemáticamente,  JOIN  es composición relacional, la operación fundamental en el álgebra relacional, y generalizando es una función de composici ón. Contenido 1 Tablas de ejemplo 2 Combinación interna (INNER JOIN) 2.1 De equi val encia (eq ui - join ) 2.1.1 Natural (Natural join) 2.2 Cruz ada (Cross joi n) 3 Combinación externa (OUTER JOIN) 3.1 de tab l a iz qui erda (LE FT OUTER JOIN o LEFT JOIN ) 3.2 d e tabla derecha (RIGH T OUTER JOIN o RIGHT JOIN) 3.3 combinación completa (FULL OUTER JOIN) 4 Implementación 4.1 Al gori tmos de combin ación 4.1.1 Bucles anidados 4.1.2 Combinación por fusión 4.1.3 Combinación Hash 4.2 Optimización de la combinación 4.2.1 Semi-combinación 5 Véase también 6 Enlaces externos Tablas de ejemplo Todas l as expli cac ion es q ue está n a contin uación u til iz an las sigu ien tes dos tablas p ara i l ustrar e l efecto d e d if erentes clases d e uniones JOIN. Tabla Departamento Nombr e De par tame nto IDDe par tame nto Ventas 31 Ing eniería 33 Producció n 34 Mercadeo 35 26/09/2011 Join - Wikipedia, la enciclopedia libre http://es.wikipedia.org/wiki/Join 1/8

Transcript of Join (SQL)

Page 1: Join (SQL)

5/11/2018 Join (SQL) - slidepdf.com

http://slidepdf.com/reader/full/join-sql-55a2328ee06a1 1/8

 

Tabla Empleado

Apellido IDDepartamento

Andrade 31

Jordán 33

Steinberg 33

Róbinson 34

Zolano 34

Gaspar 36

Join

De Wikipedia, la enciclopedia libre

La sentencia join en SQL permite combinar registros de dos o más tablas en una base de datos relacional. En el Lenguaje deConsultas Estructurado (SQL), hay tres tipo de JOIN : interno, externo, y cruzado.

En casos especiales una tabla puede unirse a sí misma, produciendo una auto-combinación, SELF-JOIN.

Matemáticamente, JOIN es composición relacional, la operación fundamental en el álgebra relacional, y generalizando es una fude composición.

Contenido

1 Tablas de ejemplo2 Combinación interna (INNER JOIN)

2.1 De equivalencia (equi-join)2.1.1 Natural (Natural join)

2.2 Cruzada (Cross join)3 Combinación externa (OUTER JOIN)

3.1 de tabla izquierda (LEFT OUTER JOIN o LEFT JOIN)3.2 de tabla derecha (RIGHT OUTER JOIN o RIGHT JOIN)3.3 combinación completa (FULL OUTER JOIN)

4 Implementación4.1 Algoritmos de combinación

4.1.1 Bucles anidados4.1.2 Combinación por fusión4.1.3 Combinación Hash

4.2 Optimización de la combinación

4.2.1 Semi-combinación5 Véase también6 Enlaces externos

Tablas de ejemplo

Todas las explicaciones que están a continuación utilizan las siguientes dos tablas para ilustrar el efecto de diferentes clases deuniones JOIN.

Tabla Departamento

NombreDepartamento IDDepartamento

Ventas 31

Ingeniería 33

Producción 34

Mercadeo 35

26/09/2011 Join - Wikipedia, la enciclopedia libre

http://es.wikipedia.org/wiki/Join

Page 2: Join (SQL)

5/11/2018 Join (SQL) - slidepdf.com

http://slidepdf.com/reader/full/join-sql-55a2328ee06a1 2/8

 

La tabla Empleado contiene a los empleados con el número del departamento al que pertenecen; mientras que la tablaDepartamento, contiene el nombre de los departamentos de la empresa, se puede notar que existe un empleado que tiene asignun número de departamento que no se encuentra en la tabla Departamento (Gaspar), igualmente, en la tabla Departamento existdepartamento al cual no pertenece empleado alguno (Mercadeo). Esto servirá para presentar algunos ejemplos más adelante.

Combinación interna ( INNER JOIN )

Con esta operación se calcula el producto cruzado de todos los registros; así cada registro en la tabla A es combinado con cad

registro de la tabla B; pero sólo permanecen aquellos registros en la tabla combinada que satisfacen las condiciones que seespecifiquen. Este es el tipo de JOIN más utilizado por lo que es considerado el tipo de combinación predeterminado.

SQL:2003 especifica dos formas diferentes para expresar estas combinaciones. La primera, conocida como explícita usa la paJOIN, mientras que la segunda es implícita y usa ',' para separar las tablas a combinar en la sentencia FROM de la declaraciónSELECT. Entonces siempre se genera el producto cruzado del cual se seleccionan las combinaciones que cumplan lo que indicsentencia WHERE.

Es necesario tener especial cuidado cuando se combinan columnas con valores nulos NULL ya que el valor nulo no se combinotro 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 ta

Departamento. La sentencia JOIN compara los valores en la columna IDDepartamento en ambas tablas. Cuando no existe estcorrespondencia entre algunas combinaciones, éstas no se muestran; es decir que si el número de departamento de un empleadcoincide con los números de departamento de la tabla Departamento, no se mostrará el empleado con su respectivo departameen la tabla resultante.

Las dos consultas siguientes son similares, y se realizan de manera explicita (A) e implícita (B).

A. Ejemplo de la sentencia INNER JOIN explícita:

SELECT *

FROM empleado

INNER JOIN departamento

ON empleado.IDDepartamento = departamento.IDDepartamento

B. Ejemplo de la sentencia INNER JOIN implícita:

SELECT *

FROM empleado, departamento

WHERE empleado.IDDepartamento = departamento.IDDepartamento

Resultados:

Empleado.Apellido Empleado.IDdepartamento departamento.NombreDepartamento departamento.IDDepartame

Zolano 34 Producción 34Jordán 33 Ingeniería 33

Róbinson 34 Producción 34

Steinberg 33 Ingeniería 33

Andrade 31 Ventas 31

El empleado Gaspar y el departamento de Mercadeo no son presentados en los resultados ya que ninguno de éstos tiene registcorrespondientes en la otra tabla. No existe un departamento con número 36 ni existe un empleado con número de departamen35.

A la combinación que utiliza comparaciones dentro del predicado JOIN se le llama theta-join.

26/09/2011 Join - Wikipedia, la enciclopedia libre

http://es.wikipedia.org/wiki/Join

Page 3: Join (SQL)

5/11/2018 Join (SQL) - slidepdf.com

http://slidepdf.com/reader/full/join-sql-55a2328ee06a1 3/8

 

C. Ejemplo de combinación tipo theta:

SELECT *

FROM empleado

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 > no se puede clasificar en este rango.

D. Ejemplo de combinación 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 tablaDepartamento.

SQL:2003 no tiene una sintaxis específica para esta clase de combinaciones.

Natural (Natural join)

Es una especialización de la combinación de equivalencia, anteriormente mencionada. En este caso se comparan todas las columque tengan el mismo nombre en ambas tablas. La tabla resultante contiene sólo una columna por cada par de columnas con el mnombre.

E. Ejemplo de combinación 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 taresultante.

Empleado.Apellido IDDepartamento Departamento.NombreDepartamento

Zolano 34 Producción

Jordán 33 Ingeniería

Róbinson 34 Producción

Steinberg 33 Ingeniería

Andrade 31 Ventas

El uso de esta sentencia NATURAL puede producir resultados ambiguos y generar problemas si la base de datos cambia, porañadir, quitar, o renombrar las columnas, puede perder el sentido la sentencia; por esta razón es preferible expresar el predicadusando las otras expresiones nombradas anteriormente (ejemplos A y B).

Cruzada (Cross join)

26/09/2011 Join - Wikipedia, la enciclopedia libre

http://es.wikipedia.org/wiki/Join

Page 4: Join (SQL)

5/11/2018 Join (SQL) - slidepdf.com

http://slidepdf.com/reader/full/join-sql-55a2328ee06a1 4/8

 

Presenta el producto cartesiano de todos los registros de las dos tablas.

El código SQL para realizar este producto cartesiano enuncia las tablas que serán combinadas, pero no incluye algún predicadofiltre el resultado.

F. Ejemplo de combinación cruzada explícita:

SELECT *

FROM empleado CROSS JOIN departamento

G. Ejemplo de combinación cruzada implícita:

SELECT *

FROM empleado, departamento;

Empleado.Apellido Empleado.IDDepartamento Departamento.NombreDepartamento Departamento.IDDepartam

Andrade 31 Ventas 31

Jordán 33 Ventas 31

Steinberg 33 Ventas 31

Zolano 34 Ventas 31

Róbinson 34 Ventas 31

Gaspar 36 Ventas 31

Andrade 31 Ingeniería 33

Jordán 33 Ingeniería 33

Steinberg 33 Ingeniería 33

Solano 34 Ingeniería 33

Róbinson 34 Ingeniería 33

Gaspar 36 Ingeniería 33Andrade 31 Producción 34

Jordán 33 Producción 34

Steinberg 33 Producción 34

Solano 34 Producción 34

Róbinson 34 Producción 34

Gaspar 36 Producción 34

Andrade 31 Mercadeo 35

Jordán 33 Mercadeo 35

Steinberg 33 Mercadeo 35

Solano 34 Mercadeo 35

Róbinson 34 Mercadeo 35

Gaspar 36 Mercadeo 35

Esta clase de combinaciones son usadas pocas veces, generalmente se les agregan condiciones de filtrado con la sentencia WH para hallar resultados específicos.

Combinación externa (OUTER JOIN )

26/09/2011 Join - Wikipedia, la enciclopedia libre

http://es.wikipedia.org/wiki/Join

Page 5: Join (SQL)

5/11/2018 Join (SQL) - slidepdf.com

http://slidepdf.com/reader/full/join-sql-55a2328ee06a1 5/8

 

Mediante esta operación no se requiere que cada registro en las tablas a tratar tenga un registro equivalente en la otra tabla. Elregistro es mantenido en la tabla combinada si no existe otro registro que le corresponda.

En SQL:2003 no existe una notación implícita para las combinaciones externas.

Este tipo de operación se subdivide dependiendo de la tabla a la cual se le admitirán los registros que no tienen correspondencisean de tabla izquierda, de tabla derecha, o combinación completa.

de tabla izquierda ( LEFT OUTER JOIN o LEFT JOIN )

El resultado de esta operación siempre contiene todos los registros de la tabla de la izquierda (la primera tabla que se mencionaconsulta), 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 tablla 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 combinación interna) donde no se mostraba el empleado cuyodepartamento no existía; en el siguiente ejemplo se presentarán los empleados con su respectivo departamento, e inclusive se

 presentará el empleado, cuyo departamento no existe.

H. Ejemplo de tabla izquierda para la combinación externa:

SELECT *

FROM empleado

LEFT OUTER JOIN departamento

ON empleado.IDDepartamento = departamento.IDDepartamento

Empleado.Apellido Empleado.IDDepartamento Departamento.NombreDepartamento Departamento.IDDepartam

Jordán 33 Ingeniería 33

Andrade 31 Ventas 31

Róbinson 34 Producción 34

Zolano 34 Producción 34Gaspar 36 NULL NULL

Steinberg 33 Ingeniería 33

de tabla derecha ( RIGHT OUTER JOIN o RIGHT JOIN )

Esta operación es inversa a la anterior; el resultado de esta operación siempre contiene todos los registros de la tabla de la dere(la segunda tabla que se menciona en la consulta), aun cuando no exista un registro correspondiente en la tabla de la izquierda, 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 tab

la izquierda correspondientes, o retorna un valor nulo NULL en caso de no correspondencia.

I. Ejemplo de tabla derecha para la combinación externa:

SELECT *

FROM empleado

RIGHT OUTER JOIN departamento

ON empleado.IDDepartamento = departamento.IDDepartamento

Empleado.Apellido Empleado.IDDepartamento Departamento.NombreDepartamento Departamento.IDDepartam

Zolano 34 Producción 34

26/09/2011 Join - Wikipedia, la enciclopedia libre

http://es.wikipedia.org/wiki/Join

Page 6: Join (SQL)

5/11/2018 Join (SQL) - slidepdf.com

http://slidepdf.com/reader/full/join-sql-55a2328ee06a1 6/8

 

Jordán 33 Ingeniería 33Róbinson 34 Producción 34

Steinberg 33 Ingeniería 33

Andrade 31 Ventas 31

 NULL NULL Mercadeo 35

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

combinación completa (FULL OUTER JOIN )

Esta operación presenta los resultados de tabla izquierda y tabla derecha aunque no tengan correspondencia en la otra tabla. Latabla combinada contendrá, entonces, todos los registros de ambas tablas y presentará valores nulos NULLs para registros sin

 pareja.

J. Ejemplo de combinación externa completa:

SELECT *

FROM empleado

FULL OUTER JOIN departamento

ON empleado.IDDepartamento = departamento.IDDepartamento

Empleado.Apellido Empleado.IDDepartamento Departamento.NombreDepartamento Departamento.IDDepartam

Zolano 34 Producción 34

Jordán 33 Ingeniería 33

Róbinson 34 Producción 34

Gaspar 36 NULL NULL

Steinberg 33 Ingeniería 33

Andrade 31 Ventas 31 NULL NULL Mercadeo 35

Como se puede notar, en este caso se encuentra el empleado Gaspar con valor nulo en su área correspondiente, y se muestraademás 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 través de las combinacionetabla izquierda, tabla derecha y de la sentencia de unión 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

ON empleado.IDDepartamento = departamento.IDDepartamento

WHERE empleado.IDDepartamento IS NULL

Implementación

La implementación eficiente de combinaciones ha sido un objetivo de mucho trabajo en los sistemas de bases de datos, pues au

26/09/2011 Join - Wikipedia, la enciclopedia libre

http://es.wikipedia.org/wiki/Join

Page 7: Join (SQL)

5/11/2018 Join (SQL) - slidepdf.com

http://slidepdf.com/reader/full/join-sql-55a2328ee06a1 7/8

 

sean internas o externas, son muy comunes y difíciles de ejecutar eficientemente. La combinación interna de tablas se puede haccon propiedad conmutativa y asociativa, así que el usuario sólo crea la consulta y el sistema de base de datos determina la manmás eficiente de realizar la operación, esta decision la toma el optimizador de consultas quien tiene en cuenta dos puntos import

El orden de las combinacionesComo las combinaciones son conmutativas, el orden en el cual son combinadas las tablas no modifica el resultado final deconsulta. En cambio, sí tiene un gran impacto sobre el costo de la operación, de manera que elegir el mejor orden decombinaciones es muy importante.

El método de la combinación

Dadas dos tablas y una condición de combinación, existen unos cuantos algoritmos que devuelven el resultado de lacombinación. Cuál algoritmo es el más eficiente dependerá de los tamaños de las tablas de entrada, la cantidad de filas dcada una que satisfacen la condición de combinación, 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 combinación se las llama respectivame"operando externo(outer)" y "operando interno(inner)", o bien simplemente izquierdo y derecho. En el caso de bucles anidado

 por ejemplo, la relación interna será completamente recorrida por cada fila de la relación externa.

Los planes de ejecución que incluyen combinaciones pueden clasificarse en:

Profundo a la izquierdaEl operando interno de cada combinación del plan es una tabla base.

Profundo a la derechaEl operando externo de cada combinación del plan es una tabla base.

DensoAmbas entradas son combinaciones.

Estos nombres derivan de la apariencia de la representación gráfica del plan de ejecución como un árbol, con la relación externizquierda y la interna a la derecha (por convención).

Algoritmos de combinación

Existen tres algoritmos fundamentales para ejecutar una operación de combinación.

Bucles anidados

Éste es el más simple de los algortimos de combinación. Por cada tupla de la relación externa, se recorre completamente la relinterna, y toda tupla que verifique la condición de combinación se añade al resultado. El algoritmo puede ser fácilmente generali

 para cualquier número de relaciones.

Pseudocódigo para la combinación de las relaciones R and S :

Por cada tupla en R, llamada r:

Por cada tupla en S, llamada s:

Si la tupla <r,s> satisface la condición de combinación

Entonces agregar la tupla <r,s> a la salida

La complejidad computacional del algoritmo es de O( | R | | S | ) operaciones de entrada/salida, donde | R | y | S | son la cantidatuplas en R y S respectivamente.

 Naturalmente, este algoritmo tiene un desempeño pobre si alguna de las relaciones es muy grande. El desempeño puede mejorla relación interna tiene un índice sobre las columnas del predicado de combinación.

Existe una variación del algoritmo de bucles anidados, llamada bucles anidados en bloque. Sea | R | < | S | . En lugar de leer larelaciones tupla por tupla, se lee la relación R en bloques, llenando toda la memoria disponible, excepto dos páginas. Por cada

 bloque de R se realiza una iteración sobre S , leyendo una página por vez, y por cada página leída de S , la tupla de la página es

26/09/2011 Join - Wikipedia, la enciclopedia libre

http://es.wikipedia.org/wiki/Join

Page 8: Join (SQL)

5/11/2018 Join (SQL) - slidepdf.com

http://slidepdf.com/reader/full/join-sql-55a2328ee06a1 8/8

 

comparada con las del bloque de R, y cada par de tuplas que satisfacen la condición de combinación se agrega a la página de s

El algortimo de bucles anidados en bloque tiene una complejidad computacional de operaciones de entrada/salid

donde M es el número de páginas de memoria disponibles y P r y P  s son el tamaño en páginas de R y de S respectivamente. Noque la complejidad computacional es de O( P r + P  s) operaciones de entrada/salida si R cabe en la memoria disponible.

Combinación por fusión

Si ambas relaciones están ordenadas por los atributos de combinación, la operación es trivial:

1. Por cada tupla de la relación externa,1. Se toma el grupo de tuplas actual de la relación interna; un grupo está formado por un conjunto de tuplas contigua

con el mismo valor en el atributo de combinación.2. Por cada tupla del grupo interno actual que satisfaga la condición de combinación, se agrega una tupla al resultado

Una vez agotado el grupo interno, ambas búsquedas, la interna y la externa, pueden avanzar al siguiente grupo.

Por esta razón muchos optimizadores guardan pista del ordenamiento en los nodos del plan (si uno o ambos operandos ya estáordenados en función del atributo de combinación, no hace falta otro ordenamiento. De lo contrario, el sistema de gestión de bde datos deberá realizarlo, generalmente utilizando un ordenamiento externo para evitar consumir demasiada memoria.

Combinación Hash

Este algoritmo puede ser utilizado para combinaciones "equi-join". El acceso a las tablas a ser combinadas se realiza construyentablas hash sobre los atributos de combinación. La búsqueda en tabla hash es mucho más rápida que a través de árboles de índ

 pero sólo puede realizarse una búsqueda por la condición de igualdad.

Optimización de la combinación

Semi-combinación

Es una optimización técnica para las combinaciones en bases de datos distribuidas. El predicado JOIN es aplicado en diferentefases, comenzando con la más temprana. Esto puede reducir el tamaño de los resultados inmediatos que deben ser intercambiacon nodos remotos, así reduce el tráfico de red entre nodos, esto puede mejorarse con un filtro Bloom.

Véase también

SQL

Enlaces externos

Sentencia Join en MySQL 5.0 (http://dev.mysql.com/doc/refman/5.0/es/join.html)Expresiones de tablas en PostgreSQL 8.4 (Inglés) (http://www.postgresql.org/docs/8.4/static/queries-table-expressionsCombinar tablas JOIN (http://www.programacionweb.net/articulos/articulo/?num=467)

Obtenido de «http://es.wikipedia.org/wiki/Join»Categoría: SQL

Esta página fue modificada por última vez el 15 ago 2011, a las 07:42.El texto está disponible bajo la Licencia Creative Commons Atribución Compartir Igual 3.0; podrían ser aplicables cláusadicionales. Lee los términos de uso para más información.Wikipedia® es una marca registrada de la Fundación Wikimedia, Inc., una organización sin ánimo de lucro.

26/09/2011 Join - Wikipedia, la enciclopedia libre

http://es.wikipedia.org/wiki/Join