robot de la enciclopedia para niños

Sentencia JOIN en SQL para niños

Enciclopedia para niños

La sentencia JOIN (que significa "unir" o "combinar" en inglés) en SQL es una herramienta muy útil. Permite juntar información de una o más tablas en una base de datos. Imagina que tienes diferentes listas de datos y quieres verlos juntos. ¡Para eso sirve JOIN!

En el Lenguaje de Consultas Estructurado (SQL), existen varios tipos de JOIN para combinar tus datos. Los más comunes son:

  • INNER JOIN (Combinación Interna)
  • LEFT OUTER JOIN (Combinación Externa Izquierda)
  • RIGHT OUTER JOIN (Combinación Externa Derecha)
  • FULL OUTER JOIN (Combinación Externa Completa)
  • CROSS JOIN (Combinación Cruzada)

Una tabla incluso puede unirse consigo misma. Esto se llama "auto-combinación" o SELF-JOIN.

¿Cómo funcionan los JOIN? Ejemplos con tablas

Para entender mejor cómo funcionan los diferentes tipos de JOIN, usaremos dos tablas de ejemplo. Imagina que son parte de una base de datos de una empresa:

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 tiene los apellidos de las personas y el número del departamento al que pertenecen. La tabla Departamento tiene los nombres de los departamentos y sus números de identificación.

Fíjate que hay un empleado (Gaspar) con un número de departamento (36) que no aparece en la tabla Departamento. También hay un departamento (Mercadeo, ID 35) que no tiene ningún empleado asignado en la tabla Empleado. Esto nos ayudará a ver las diferencias entre los tipos de JOIN.

Combinación Interna (INNER JOIN)

Archivo:SQL Join - 07 A Inner Join B
Diagrama de Venn representando el Inner Join, entre las tablas A y B, de una sentencia SQL

El INNER JOIN es como buscar coincidencias exactas. Solo muestra los registros que tienen un valor que coincide en ambas tablas. Si un registro de una tabla no tiene un compañero en la otra, ¡no aparece en el resultado! Es el tipo de JOIN más usado.

Por ejemplo, si queremos ver qué empleados están en qué departamento, y solo nos interesan los que tienen un departamento válido, usaríamos un INNER JOIN.

Puedes escribir un INNER JOIN de dos maneras:

  • Forma explícita: Usando las palabras `INNER JOIN` y `ON`.
  • Forma implícita: Poniendo las tablas separadas por comas y usando `WHERE` para la condición.

Es importante saber que los valores "nulos" (que significan "sin valor" o "vacío") no se consideran una coincidencia.

Aquí tienes un ejemplo de cómo se vería la consulta y su resultado:

Ejemplo de INNER JOIN explícita:

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

Ejemplo de INNER JOIN implícita:

 SELECT *
 FROM   empleado, departamento
 WHERE  empleado.IDDepartamento = departamento.IDDepartamento

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

Como puedes ver, el empleado Gaspar (IDDepartamento 36) no aparece. Tampoco el departamento de Mercadeo (IDDepartamento 35). Esto es porque no tienen una coincidencia en la otra tabla.

Combinación Externa (OUTER JOIN)

A diferencia del INNER JOIN, con un OUTER JOIN no es necesario que un registro tenga una coincidencia en la otra tabla para aparecer en el resultado. El registro se mantiene, y si no hay coincidencia, se mostrará un valor nulo (vacío) en los campos de la tabla que no tiene pareja.

Hay tres tipos de OUTER JOIN: LEFT JOIN, RIGHT JOIN y FULL JOIN.

Combinación Externa Izquierda (LEFT JOIN)

Archivo:SQL Join - 01b A Left Join B
Diagrama de Venn representando el Left Join, entre las tablas A y B, de una sentencia SQL

El LEFT JOIN siempre muestra todos los registros de la tabla que está a la izquierda (la primera que nombras en tu consulta). Si un registro de la tabla izquierda no tiene una coincidencia en la tabla de la derecha, los campos de la tabla derecha aparecerán como nulos (vacíos).

En nuestro ejemplo, el empleado Gaspar no tiene un departamento válido. Con un LEFT JOIN, Gaspar sí aparecerá en el resultado, pero su información de departamento estará vacía.

Ejemplo de LEFT JOIN:

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

Resultados:

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 para encontrar registros sin coincidencia

Archivo:SQL Join - 02 A Left Join B Where B.key = null
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 solo quieres ver los registros de la tabla izquierda que NO tienen una coincidencia en la tabla derecha, puedes añadir una condición `WHERE` para buscar los valores nulos.

Ejemplo:

 SELECT *
 FROM   empleado
        LEFT OUTER JOIN departamento
           ON empleado.IDDepartamento = departamento.IDDepartamento
 WHERE  departamento.IDDepartamento IS NULL

Resultados:

Empleado Departamento
Apellido IDDepartamento NombreDepartamento IDDepartamento
Gaspar 36 NULL NULL

Combinación Externa Derecha (RIGHT JOIN)

Archivo:SQL Join - 03b A Right Join B
Diagrama de Venn representando el Right Join, entre las tablas A y B, de una sentencia SQL

El RIGHT JOIN es lo opuesto al LEFT JOIN. Siempre muestra todos los registros de la tabla que está a la derecha (la segunda que nombras). Si un registro de la tabla derecha no tiene una coincidencia en la tabla de la izquierda, los campos de la tabla izquierda aparecerán como nulos.

En nuestro ejemplo, el departamento de Mercadeo no tiene empleados. Con un RIGHT JOIN, Mercadeo sí aparecerá en el resultado, pero su información de empleados estará vacía.

Ejemplo de RIGHT JOIN:

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

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
NULL NULL Mercadeo 35

RIGHT JOIN para encontrar registros sin coincidencia

Archivo:SQL Join - 04 A Right Join B Where A.key = null
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 solo quieres ver los registros de la tabla derecha que NO tienen una coincidencia en la tabla izquierda, puedes añadir una condición `WHERE` para buscar los valores nulos.

Ejemplo:

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

Resultados:

Empleado Departamento
Apellido IDDepartamento NombreDepartamento IDDepartamento
NULL NULL Mercadeo 35

Equivalencia entre LEFT JOIN y RIGHT JOIN

Archivo:SQL Join - 04.5 Left Join equivalente a Right Join
Left Join equivalente al Right Join anterior

LEFT JOIN y RIGHT JOIN son muy parecidos. Todo lo que puedes hacer con uno, lo puedes hacer con el otro. Solo necesitas cambiar el orden de las tablas en tu consulta.

Por ejemplo, el último RIGHT JOIN que hicimos (para encontrar departamentos sin empleados) se puede hacer con un LEFT JOIN si cambiamos el orden de las tablas:

 SELECT *
 FROM   departamento
        LEFT OUTER JOIN empleado
           ON departamento.IDDepartamento = empleado.IDDepartamento
 WHERE  empleado.IDDepartamento IS NULL

Resultados:

Departamento Empleado
NombreDepartamento IDDepartamento Apellido IDDepartamento
Mercadeo 35 NULL NULL

Combinación Externa Completa (FULL OUTER JOIN)

Archivo:SQL Join - 05b A Full Join B
Diagrama de Venn representando el Full Join, entre las tablas A y B, de una sentencia SQL

El FULL OUTER JOIN es el más completo. Muestra todos los registros de ambas tablas. Si un registro no tiene coincidencia en la otra tabla, sus campos aparecerán como nulos.

En nuestro ejemplo, el FULL OUTER JOIN mostrará a Gaspar (sin departamento) y al departamento de Mercadeo (sin empleados), además de todas las coincidencias.

Ejemplo de FULL OUTER JOIN:

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

Resultados:

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

Algunos sistemas de bases de datos no tienen el FULL OUTER JOIN directamente. Pero se puede lograr el mismo resultado combinando un LEFT JOIN y un RIGHT JOIN con la sentencia `UNION`.

Ejemplo usando `UNION`:

 SELECT *
 FROM   empleado
        LEFT JOIN departamento
           ON empleado.IDDepartamento = departamento.IDDepartamento
 UNION
 SELECT *
 FROM   empleado
        RIGHT JOIN departamento
           ON empleado.IDDepartamento = departamento.IDDepartamento

FULL JOIN para encontrar registros sin coincidencia en ninguna tabla

Archivo:SQL Join - 06b A Full Join B Where A.key = null Or B.key = null
Diagrama de Venn representando el Full Join, entre las tablas A y B, agregando condiciones donde la clave de A o la de B son nulas

Si quieres ver solo los registros que no tienen coincidencia en ninguna de las tablas, puedes añadir una condición `WHERE` para buscar los valores nulos en ambas.

Ejemplo:

 SELECT *
 FROM   empleado
        FULL OUTER JOIN departamento
           ON empleado.IDDepartamento = departamento.IDDepartamento
 WHERE  (empleado.IDDepartamento IS NULL)  OR  (departamento.IDDepartamento is NULL)

Resultados:

Empleado Departamento
Apellido IDDepartamento NombreDepartamento IDDepartamento
Gaspar 36 NULL NULL
NULL NULL Mercadeo 35

Combinación Cruzada (CROSS JOIN)

Archivo:SQL Join - 08 A Cross Join B
Representación como producto cartesiano del Cross Join, entre las tablas A y B, de una sentencia SQL

El CROSS JOIN es como hacer todas las combinaciones posibles. Toma cada registro de la primera tabla y lo combina con CADA registro de la segunda tabla. Es como si multiplicaras las filas de una tabla por las filas de la otra.

Se usa menos que los otros JOINs, a menos que quieras crear una lista de todas las combinaciones posibles.

Ejemplo de CROSS JOIN explícita:

 SELECT *
 FROM empleado CROSS JOIN departamento

Ejemplo de CROSS JOIN implícita:

 SELECT *
 FROM   empleado, departamento;

Resultados (solo un fragmento, ya que la tabla completa es muy grande):

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

Galería de imágenes

Véase también

Kids robot.svg En inglés: Join (SQL) Facts for Kids

kids search engine
Sentencia JOIN en SQL para Niños. Enciclopedia Kiddle.