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:
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:
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í:
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:
There is One Comment.