Guía rápida de sql JOINS en sql

Las clausulas JOINS en sql se utilizan para combinar filas de dos o mas tablas que mantienen un campo común.

Existen diversos tipos de JOINS en sql:

  • INNER JOIN Devuelve todas las filas cuando hay al menos un resultado en ambas tablas
  • LEFT JOIN Devuelve todas las filas de la tabla de la izquierda y las filas coincidentes de la derecha
  • RIGHT JOIN Devuelve todas las filas de la tabla de la derecha y las filas coincidentes de la izquierda
  • FULL JOIN Devuelve todas las filas cuando hay coincidencias en alguna de las tablas

Como siempre, no os preocupéis, a continuación vamos a estudiar cada caso por separado y con ejemplos para cada uno de los tipos, de modo que vamos a ello:

INNER JOIN

Es la más común de todas, devuelve todas las filas de las tablas donde buscamos que cumplen la condición impuesta.

La sintaxis aunque algo compleja en principio se convierte en algo bastante sencillo cuando se entiende:

SELECT tabla1.columna, tabla2.columna, … FROM tabla1 INNER JOIN tabla2 ON tabla1.columna_de_union_1 = tabla2.columna_de_union_2

También puede usarse solo JOIN en lugar de INNER JOIN.

Utilizando conjuntos podemos ver que INNER JOIN es la intersección entre los dos conjuntos:

innerjoin

Ahora vamos a verlo en un ejemplo para observar su funcionamiento, aunque he optado por colocar un LIMIT al final con el fin de que solo me devuelva 7 resultados:

SELECT pedido.IdPedido, cliente.NombreEmpresa, pedido.FechaPedido FROM pedido INNER JOIN cliente ON pedido.IdCliente=cliente.IdCliente LIMIT 7

Que nos da de reultado:

Nº Pedido Empresa Fecha pedido
10248 Wilman Kala 1996-07-04
10249 Toms Spezialitäten 1996-07-05
10250 Hanari Carnes 1996-07-08
10251 Victuailles en stock 1996-07-08
10252 Suprêmes délices 1996-07-09
10253 Hanari Carnes 1996-07-10
10254 Chop-suey Chinese 1996-07-11

LEFT JOIN

Esta clausula devuelve todas las columnas de la tabla de la izquierda (tabla principal o tabla 1) junto con las coincidencias del lado derecho, devolviendo null si no hay resultados.

Su sintaxis es hermana del JOIN, siendo:

SELECT tabla1.columna, tabla2.columna, … FROM tabla1 LEFT JOIN tabla2 ON tabla1.columna_de_union_1 = tabla2.columna_de_union_2

Y su representación utilizando conjuntos es:

leftjoin

 

Siguiendo con el ejemplo anterior vamos a hacer la misma consulta utilizando LEFT JOIN y con un LIMIT de 15 para ver mejor que ocurre:

SELECT pedido.IdPedido, cliente.NombreEmpresa, pedido.FechaPedido FROM pedido LEFT JOIN cliente ON pedido.IdCliente=cliente.IdCliente LIMIT 15

Dando como resultado:

Nº Pedido Empresa Fecha pedido
10643 Alfreds Futterkiste 1997-08-25
10692 Alfreds Futterkiste 1997-10-03
10702 Alfreds Futterkiste 1997-10-13
10835 Alfreds Futterkiste 1998-01-15
10952 Alfreds Futterkiste 1998-03-16
11011 Alfreds Futterkiste 1998-04-09
10308 Ana Trujillo Emparedados y helados 1996-09-18
10625 Ana Trujillo Emparedados y helados 1997-08-08
10759 Ana Trujillo Emparedados y helados 1997-11-28
10926 Ana Trujillo Emparedados y helados 1998-03-04
10365 Antonio Moreno Taquería 1996-11-27
10507 Antonio Moreno Taquería 1997-04-15
10535 Antonio Moreno Taquería 1997-05-13
10573 Antonio Moreno Taquería 1997-06-19
10677 Antonio Moreno Taquería 1997-09-22

Vemos que hay cambios con la tabla anterior donde ahora ordena por el nombre de la empresa en lugar de por orden de pedido.

RIGHT JOIN

Seguimos nuestro camino por los JOINS y llegamos a RIGHT JOIN el cual nos devuelve todas las filas de la segunda tabla con los resultados de la tabla de la izquierda. Si no hay hay resultados con la tabla 2 entonces es NULL y no se muestra

Su sintaxis es idéntica a las anteriores tan solo introduciendo RIGTH JOIN:

SELECT tabla1.columna, tabla2.columna, … FROM tabla1 RIGHT JOIN tabla2 ON tabla1.columna_de_union_1 = tabla2.columna_de_union_2

Si observamos como funciona según los conjuntos, sería así:

rightjoin

 

Y si siguiendo con el mismo ejemplo de los apartados anteriores vamos a ver como es la consulta y su resulatado

SELECT pedido.IdPedido, cliente.NombreEmpresa, pedido.FechaPedido FROM pedido RIGHT JOIN cliente ON pedido.IdCliente=cliente.IdCliente LIMIT 15

Nº Pedido Empresa Fecha pedido
10248 Wilman Kala 1996-07-04
10249 Toms Spezialitäten 1996-07-05
10250 Hanari Carnes 1996-07-08
10251 Victuailles en stock 1996-07-08
10252 Suprêmes délices 1996-07-09
10253 Hanari Carnes 1996-07-10
10254 Chop-suey Chinese 1996-07-11
10255 Richter Supermarkt 1996-07-12
10256 Wellington Importadora 1996-07-15
10257 HILARIÓN-Abastos 1996-07-16
10258 Ernst Handel 1996-07-17
10259 Centro comercial Moctezuma 1996-07-18
10260 Ottilies Käseladen 1996-07-19
10261 Que Delícia 1996-07-19
10262 Rattlesnake Canyon Grocery 1996-07-22

FULL JOIN

Esta clausula no se puede utilizar en todas la BBDD, de hecho, en el instante en el que estoy desarrollando estos tutoriales estoy utilizando MySQL y no me permite usarlo, de modo que solo pondré la explicación y la sintaxis.

FULL JOIN o FULL OUTER JOIN como se utiliza en otras BBDD devuelve todos los resultados de la tabla 1 y de la tabla 2 combinando ambos resultados y dejando en blanco los campos donde no hay resultados.

Su sintaxis es:

SELECT tabla1.columna, tabla2.columna, … FROM tabla1 FULL JOIN tabla2 ON tabla1.columna_de_union_1 = tabla2.columna_de_union_2

Aunque puede ser que se necesite cambiar FULL JOIN por FULL OUTER JOIN.

Su representación según los conjuntos es:

fulljoin