0% encontró este documento útil (0 votos)
244 vistas13 páginas

Join en Mysql

La sentencia JOIN en SQL permite combinar registros de dos o más tablas. Existen tres tipos de JOIN: interno, que muestra solo registros con correspondencias en ambas tablas; externo, que muestra también registros sin correspondencias; y cruzado, que muestra el producto cartesiano de ambas tablas. El JOIN interno es el más común y puede ser de equivalencia, natural o theta.

Cargado por

Alvaro Zuñiga
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
244 vistas13 páginas

Join en Mysql

La sentencia JOIN en SQL permite combinar registros de dos o más tablas. Existen tres tipos de JOIN: interno, que muestra solo registros con correspondencias en ambas tablas; externo, que muestra también registros sin correspondencias; y cruzado, que muestra el producto cartesiano de ambas tablas. El JOIN interno es el más común y puede ser de equivalencia, natural o theta.

Cargado por

Alvaro Zuñiga
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd

Join

ver http://www.programacionweb.net/articulos/articulo/combinar-
tablas-join/
La sentencia join 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 tipos deJOIN:
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.

Índice

1 Tablas de ejemplo

 2 Combinación interna (INNER JOIN)


o 2.1 De equivalencia (equi-join)
 2.1.1 Natural (Natural join)
o 2.2 Cruzada (Cross join)
 3 Combinación externa (OUTER JOIN)
o 3.1 De tabla izquierda (LEFT OUTER JOIN o LEFT JOIN)
o 3.2 De tabla derecha (RIGHT OUTER JOIN o RIGHT JOIN)
o 3.3 Combinación completa (FULL OUTER JOIN)
 4 Implementación
o 4.1 Algoritmos de combinación
 4.1.1 Bucles anidados
 4.1.2 Combinación por fusión
 4.1.3 Combinación Hash
o 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[editar]
Todas las explicaciones que están a continuación usan las siguientes dos tablas para ilustrar
el efecto de diferentes clases de uniones JOIN.
Tabla Empleado

Apellido IDDepartamento

Andrade 31

Jordán 33

Steinberg 33

Róbinson 34

Zolano 34

Gaspar 36

Tabla Departamento

NombreDepartamento IDDepartamento

Ventas 31

Ingeniería 33

Producción 34

Mercadeo 35
La tabla Empleado contiene los apellidos de los empleados junto al número 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 número de departamento que no se encuentra en
la tabla Departamento (Gaspar). Igualmente, existen departamentos a los cuales no
pertenece ningún empleado (Mercadeo). Esto servirá para presentar algunos ejemplos más
adelante.

Combinación interna (INNER JOIN)[editar]


Con esta operación 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 sólo permanecen aquellos
registros en la tabla combinada que satisfacen las condiciones que se especifiquen. 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 palabra  JOIN , mientras que la segunda es implícitay usa ','
para separar las tablas a combinar en la sentencia FROM de la declaración 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
número de departamento de un empleado no coincide con los números 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 explícita (A) e implícita (B).
A. Ejemplo de la sentencia INNER JOIN explícita:

SELECT Campos
FROM empleado INNER JOIN departamento
ON empleado.IDDepartamento = departamento.IDDepartamento

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

SELECT Campos
FROM empleado, departamento
WHERE empleado.IDDepartamento = departamento.IDDepartamento
Resultados:

Empleado.Apel Empleado.IDDeparta departamento.NombreDepart departamento.IDDeparta


lido mento amento mento

Zolano 34 Producción 34

Jordá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 registros correspondientes en la otra tabla. No existe un
departamento con número 36 ni existe un empleado con número de departamento 35.
A la combinación que utiliza comparaciones dentro del predicado JOIN se le llama theta-join.
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)[editar]
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 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 tabla Departamento.
SQL:2003 no tiene una sintaxis específica para esta clase de combinaciones.
Natural (Natural join)[editar]
Es una especialización de la combinación de equivalencia, anteriormente mencionada. En
este caso se comparan todas las columnas que tengan el mismo nombre en ambas tablas. La
tabla resultante contiene sólo una columna por cada par de columnas con el mismo nombre.
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 tabla resultante.

Empleado.Apellid
IDDepartamento Departamento.NombreDepartamento
o

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, porque al añadir, quitar o renombrar las columnaspuede perder el
sentido la sentencia; por esta razón es preferible expresar el predicado usando las otras
expresiones nombradas anteriormente (ejemplos A y B).
Cruzada (Cross join)[editar]
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 predicado que filtre 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.Apel Empleado.IDDeparta Departamento.NombreDepart Departamento.IDDeparta


lido mento amento mento

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 33

Andrade 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 WHERE para hallar resultados específicos.

Combinación externa (OUTER JOIN)[editar]

Mediante esta operación 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 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 correspondencia, ya sean de tabla izquierda, de tabla derecha o
combinación completa.

De tabla izquierda (LEFT OUTER JOIN o LEFT JOIN)[editar]


El resultado de esta operación 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 combinación interna)
donde no se mostraba el empleado cuyo departamento 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.Ape Empleado.IDDeparta Departamento.NombreDepa Departamento.IDDepart


llido mento rtamento amento

Jordán 33 Ingeniería 33

Andrade 31 Ventas 31

Róbinson 34 Producción 34

Zolano 34 Producción 34

Gaspar 36 NULL NULL

Steinberg 33 Ingeniería 33

De tabla derecha (RIGHT OUTER JOIN o RIGHT JOIN)[editar]


Esta operación es inversa a la anterior; el resultado de esta operación 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 combinación externa:

SELECT *
FROM empleado
RIGHT OUTER JOIN departamento
ON empleado.IDDepartamento = departamento.IDDepartamento

Empleado.Ap Empleado.IDDepart Departamento.NombreDep Departamento.IDDepa


ellido amento artamento rtamento

Zolano 34 Producción 34

Jordán 33 Ingeniería 33

Ró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)[editar]


Esta operación 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 combinación externa completa:


SELECT *
FROM empleado
FULL OUTER JOIN departamento
ON empleado.IDDepartamento = departamento.IDDepartamento

Empleado.Ap Empleado.IDDepart Departamento.NombreDep Departamento.IDDepa


ellido amento artamento rtamento

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 muestra ademá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 combinaciones de tabla 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[editar]
La implementación 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 difíciles de ejecutar eficientemente. La combinación interna de tablas se
puede hacer con propiedad conmutativa y asociativa, así que el usuario sólo crea la
consulta y el sistema de base de datos determina la manera más eficiente de realizar
la operación. Esta decision la toma el optimizador de consultas, que 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 operación, de manera que elegir el mejor orden de combinaciones
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 la combinación. Cuál algoritmo es el
más eficiente dependerá de los tamaños de las tablas de entrada, la cantidad
de filas de cada 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 respectivamente
"operando externo(outer)" y "operandointerno(inner)", o bien
simplemente izquierdo y derecho. En el caso de bucles anidados, 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 izquierda
El operando interno de cada combinación del plan es una tabla base.
Profundo a la derecha
El operando externo de cada combinación del plan es una tabla base.
Denso
Ambas 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
externa a la izquierda y la interna a la derecha (por convención).

También podría gustarte