0% encontró este documento útil (0 votos)
207 vistas6 páginas

Joins SQL: Tipos y Ejemplos Prácticos

Este documento explica los diferentes tipos de JOIN en SQL, incluyendo INNER JOIN, OUTER JOIN (LEFT JOIN, RIGHT JOIN y FULL JOIN) y CROSS JOIN. Describe cómo cada uno combina registros entre tablas y muestra ejemplos utilizando tablas de empleados y departamentos. También incluye diagramas de Venn para ilustrar visualmente los resultados de cada tipo de JOIN.
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 TXT, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
207 vistas6 páginas

Joins SQL: Tipos y Ejemplos Prácticos

Este documento explica los diferentes tipos de JOIN en SQL, incluyendo INNER JOIN, OUTER JOIN (LEFT JOIN, RIGHT JOIN y FULL JOIN) y CROSS JOIN. Describe cómo cada uno combina registros entre tablas y muestra ejemplos utilizando tablas de empleados y departamentos. También incluye diagramas de Venn para ilustrar visualmente los resultados de cada tipo de JOIN.
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 TXT, PDF, TXT o lee en línea desde Scribd

Join

Ir a la navegaciónIr a la búsqueda

Joins del SQL y sus representaciones como diagramas de Venn


La sentencia JOIN (unir, combinar) de SQL permite combinar registros de una o más
tablas en una base de datos. En el Lenguaje de Consultas Estructurado (SQL) hay
tres tipos de JOIN: interno, externo y cruzado. El estándar ANSI del SQL especifica
cinco tipos de JOIN: INNER, LEFT OUTER, RIGHT OUTER, FULL OUTER y CROSS. 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)
2.1 Theta Join
2.1.1 Equi-join
2.1.2 Natural join
3 Combinación externa (OUTER JOIN)
3.1 LEFT JOIN
3.1.1 LEFT JOIN excluyendo la intersección
3.2 RIGHT OUTER JOIN o RIGHT JOIN
3.2.1 RIGHT JOIN excluyendo la intersección
3.3 Equivalencia entre LEFT JOIN y RIGHT JOIN
3.4 Combinación completa (FULL OUTER JOIN)
3.4.1 FULL JOIN excluyendo la intersección
4 Cruzada (Cross join)
5 Implementación
5.1 Algoritmos de combinación
5.1.1 Bucles anidados
5.1.2 Combinación por fusión
5.1.3 Combinación Hash
5.2 Optimización de la combinación
5.2.1 Semi-combinación
6 Véase también
7 Enlaces externos
Tablas de ejemplo
Todas las explicaciones que están a continuación usan las siguientes dos tablas
para ilustrar el efecto de diferentes clases de uniones JOIN.

Empleado
Apellido IDDepartamento
Andrade 31
Jordán 33
Steinberg 33
Róbinson 34
Zolano 34
Gaspar 36
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 los
nombres 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)

Diagrama de Venn representando el Inner Join, entre las tablas A y B, de una


sentencia SQL
Con esta operación cada registro en la tabla A es combinado con los
correspondientes de la tabla B que satisfagan las condiciones que se especifiquen
en el predicado del JOIN. Cualquier registro de la tabla A o de la tabla B que no
tenga uno correspondiente en la otra tabla es excluido, y solo aparecerán los que
tengan correspondencia en la otra tabla. 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 junto con las condiciones
después de la palabra reservada ON. La segunda es implícita y usa las comas para
separar las tablas a combinar en la sentencia FROM, y se usa la sentencia WHERE
para establecer las condiciones, la cual entonces es obligatoria para el INNER JOIN
pues de lo contrario la sentencia sería un CROSS JOIN (ver más abajo).

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, estas 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).

Ejemplo de la sentencia INNER JOIN explícita:

SELECT *
FROM empleado
INNER JOIN departamento
ON [Link] = [Link]
Ejemplo de la sentencia INNER JOIN implícita:

SELECT *
FROM empleado, departamento
WHERE [Link] = [Link]
Resultados:

Empleado Departamento
Apellido IDDepartamento NombreDepartamento IDDepartamento
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 estos 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.

Theta Join
A la combinación que utiliza comparaciones dentro del predicado JOIN se le llama
theta-join. Se pueden hacer comparaciones de <, <=, =, <>, >= y >.

Ejemplo de combinación tipo theta:

SELECT *
FROM empleado
INNER JOIN departamento
ON [Link] < [Link]
Las operaciones INNER JOIN puede ser clasificadas como de igualdad, naturales y
cruzadas.

Equi-join
Es una variedad del theta-join que usa comparaciones de igualdad en el predicado
JOIN. Cuando se usan otros operadores de comparación no se puede clasificar en este
rango.

Ejemplo de combinación de igualdad:

SELECT *
FROM empleado
INNER JOIN departamento
ON [Link] = [Link]
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 join
Es una especialización de la combinación de igualdad, anteriormente mencionada, que
se representa por el símbolo ⋈. 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.

Ejemplo de combinación natural:

SELECT *
FROM empleado NATURAL JOIN departamento
El resultado es un poco diferente al del ejemplo de la tabla anterior, ya que esta
vez la columna IDDepartamento se muestra sola una vez en la tabla resultante.

Empleado (campo común) Departamento


Apellido IDDepartamento 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, porque al añadir, quitar o renombrar las
columnas puede perder el sentido la sentencia; por esta razón es preferible
expresar el predicado usando las otras expresiones nombradas anteriormente.
Combinación externa (OUTER JOIN)
Mediante esta operación no se requiere que un registro en una tabla tenga un
registro relacionado en la otra tabla. El registro es mantenido en la tabla
combinada aunque no exista el correspondiente en la otra tabla.

Existen tres tipos de combinaciones externas, el Left Join, el Right Join y el Full
Join, donde se toman todos los registros de la tabla de la izquierda, o todos los
de la tabla derecha, o todos los registros respectivamente.

LEFT JOIN

Diagrama de Venn representando el Left Join, entre las tablas A y B, de una


sentencia SQL
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), independientemente
de si existe un registro correspondiente en la tabla de la derecha.

La sentencia LEFT JOIN retorna la pareja de todos los valores de la tabla izquierda
con los valores de la tabla de la derecha correspondientes, si los hay, o retorna
un valor nulo NULL en los campos de la tabla derecha cuando no haya
correspondencia.
A diferencia del resultado presentado en los ejemplos 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, y adicionalmente se
presenta un empleado cuyo departamento no existe.

El empleado que no tiene departamento se encuentra en el área amarilla del diagrama


de la derecha, mientras que los empleados con departamento están en el área
anaranjada, en la intersección de A y B.

Ejemplo de left join para la combinación externa:

SELECT *
FROM empleado
LEFT OUTER JOIN departamento
ON [Link] = [Link]
Empleado Departamento
Apellido IDDepartamento NombreDepartamento IDDepartamento
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
LEFT JOIN excluyendo la intersección

Diagrama de Venn representando el Left Join, entre las tablas A y B, agregando una
condición donde las claves de B son nulas
Si se quieren mostrar solo los registros de la primera tabla que no tengan
correspondientes en la segunda, se puede agregar la condición adecuada en la
cláusula WHERE. Esto nos dará los empleados que no estén asignados a ningún
departamento, que en el diagrama de la derecha se representan en amarillo.

SELECT *
FROM empleado
LEFT OUTER JOIN departamento
ON [Link] = [Link]
WHERE [Link] IS NULL
Empleado Departamento
Apellido IDDepartamento NombreDepartamento IDDepartamento
Gaspar 36 NULL NULL
RIGHT OUTER JOIN o RIGHT JOIN

Diagrama de Venn representando el Right Join, entre las tablas A y B, de una


sentencia SQL
Esta operación es una imagen refleja de 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), independientemente de si existe o no un registro
correspondiente en la tabla de la izquierda.

La sentencia RIGHT OUTER JOIN retorna todos los valores de la tabla derecha con los
valores de la tabla de la izquierda correspondientes, si los hay, o retorna un
valor nulo NULL en los campos de la tabla izquierda cuando no haya correspondencia.
En el diagrama de la derecha, los departamentos que no tienen empleados están en el
área verde mientras que los departamentos con empleados están en el área
anaranjada, en la intersección de A y B.

Ejemplo de right join para la combinación externa:

SELECT *
FROM empleado
RIGHT OUTER JOIN departamento
ON [Link] = [Link]
Empleado Departamento
Apellido IDDepartamento NombreDepartamento IDDepartamento
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.

RIGHT JOIN excluyendo la intersección

Diagrama de Venn representando el Right Join, entre las tablas A y B, agregando una
condición donde las claves de A son nulas
Si se quieren mostrar solo los registros de la tabla de Departamento que no tengan
correspondientes en la tabla de Empleado, se puede agregar la condición adecuada en
la cláusula WHERE. Esto nos dará los departamentos que no tengan asignados ningún
empleado. En el diagrama de la derecha, esto se representa en verde.

SELECT *
FROM empleado
RIGHT OUTER JOIN departamento
ON [Link] = [Link]
WHERE [Link] IS NULL
Empleado Departamento
Apellido IDDepartamento NombreDepartamento IDDepartamento
NULL NULL Mercadeo 35
Equivalencia entre LEFT JOIN y RIGHT JOIN

Left Join equivalente al Right Join anterior


Hay una total equivalencia entre las sentencias que usan LEFT JOIN y las que usan
RIGHT JOIN. Todo lo que se puede hacer con uno se puede hacer con el otro.
Cambiando la perspectiva de cuál es la tabla izquierda y cuál es la tabla derecha,
y teniendo cuidado con las condiciones, se puede hacer la sentencia equivalente.
Por ejemplo, hagamos el RIGHT JOIN anterior pero esta vez usando LEFT JOIN. En el
RIGHT JOIN anterior se consideraba la tabla Empleado a la izquierda y la tabla de
Departamento a la derecha. Para hacer un LEFT JOIN equivalente cambiamos de
perspectiva y "volteamos" las tablas. Consideremos ahora la tabla de Departamento a
la izquierda y la tabla de Empleado a la derecha. Podemos obtener exactamente el
mismo resultado con la sentencia siguiente:

También podría gustarte