PostgreSQL Joins: Guía Completa para Combinar Tablas

PostgreSQL Joins: Guía Completa para Combinar Tablas

En el mundo de las bases de datos relacionales, la combinación de datos de diferentes tablas es una tarea esencial. PostgreSQL, un sistema de gestión de bases de datos relacional de código abierto, ofrece una variedad de joins que permiten a los usuarios realizar este proceso de manera eficiente y flexible. Este artículo te guiará a través de los diferentes tipos de joins en PostgreSQL, explicando su funcionamiento y sintaxis a través de ejemplos concretos.

Para ilustrar los diferentes tipos de joins, utilizaremos dos tablas de ejemplo: «COMPANY» y «DEPARTMENT». La tabla «COMPANY» almacena información sobre las empresas, incluyendo su ID (companyid), nombre (companyname) y dirección (companyaddress). La tabla «DEPARTMENT» almacena información sobre los departamentos, incluyendo su ID (departmentid), nombre (departmentname) y la empresa a la que pertenece (companyid).

Tipos de Joins en PostgreSQL

CROSS JOIN

El CROSS JOIN produce el producto cartesiano de dos tablas. Esto significa que cada fila de la primera tabla se combina con cada fila de la segunda tabla. El resultado es una tabla que contiene todas las posibles combinaciones de filas de ambas tablas.

sql
-- Ejemplo de CROSS JOIN
SELECT * FROM COMPANY CROSS JOIN DEPARTMENT;

| companyid | companyname | companyaddress | departmentid | department_name |
|—|—|—|—|—|
| 1 | Company A | Address 1 | 1 | Sales |
| 1 | Company A | Address 1 | 2 | Marketing |
| 1 | Company A | Address 1 | 3 | Finance |
| 2 | Company B | Address 2 | 1 | Sales |
| 2 | Company B | Address 2 | 2 | Marketing |
| 2 | Company B | Address 2 | 3 | Finance |

INNER JOIN

El INNER JOIN devuelve las filas donde los valores en las columnas especificadas coinciden en ambas tablas. En otras palabras, solo las filas que comparten un valor común en la columna especificada se incluyen en el resultado.

LEER:  React Forms: Guía Completa para Formularios Dinámicos y Controlados

sql
-- Ejemplo de INNER JOIN
SELECT * FROM COMPANY INNER JOIN DEPARTMENT ON COMPANY.company_id = DEPARTMENT.company_id;

| companyid | companyname | companyaddress | departmentid | department_name |
|—|—|—|—|—|
| 1 | Company A | Address 1 | 1 | Sales |
| 1 | Company A | Address 1 | 2 | Marketing |
| 1 | Company A | Address 1 | 3 | Finance |
| 2 | Company B | Address 2 | 1 | Sales |
| 2 | Company B | Address 2 | 2 | Marketing |

LEFT OUTER JOIN

El LEFT OUTER JOIN devuelve todas las filas de la tabla izquierda (la tabla especificada antes de la palabra clave LEFT) y las filas coincidentes de la tabla derecha. Si no hay una fila coincidente en la tabla derecha, se rellenarán los valores de las columnas de la tabla derecha con valores NULL.

sql
-- Ejemplo de LEFT OUTER JOIN
SELECT * FROM COMPANY LEFT OUTER JOIN DEPARTMENT ON COMPANY.company_id = DEPARTMENT.company_id;

| companyid | companyname | companyaddress | departmentid | department_name |
|—|—|—|—|—|
| 1 | Company A | Address 1 | 1 | Sales |
| 1 | Company A | Address 1 | 2 | Marketing |
| 1 | Company A | Address 1 | 3 | Finance |
| 2 | Company B | Address 2 | 1 | Sales |
| 2 | Company B | Address 2 | 2 | Marketing |
| 3 | Company C | Address 3 | NULL | NULL |

RIGHT OUTER JOIN

El RIGHT OUTER JOIN devuelve todas las filas de la tabla derecha (la tabla especificada antes de la palabra clave RIGHT) y las filas coincidentes de la tabla izquierda. Si no hay una fila coincidente en la tabla izquierda, se rellenarán los valores de las columnas de la tabla izquierda con valores NULL.

sql
-- Ejemplo de RIGHT OUTER JOIN
SELECT * FROM COMPANY RIGHT OUTER JOIN DEPARTMENT ON COMPANY.company_id = DEPARTMENT.company_id;

| companyid | companyname | companyaddress | departmentid | department_name |
|—|—|—|—|—|
| 1 | Company A | Address 1 | 1 | Sales |
| 1 | Company A | Address 1 | 2 | Marketing |
| 1 | Company A | Address 1 | 3 | Finance |
| 2 | Company B | Address 2 | 1 | Sales |
| 2 | Company B | Address 2 | 2 | Marketing |
| NULL | NULL | NULL | 4 | Research & Development |

FULL OUTER JOIN

El FULL OUTER JOIN devuelve todas las filas de la tabla izquierda y todas las filas de la tabla derecha, independientemente de si hay una fila coincidente en la otra tabla. Si no hay una fila coincidente, se rellenarán los valores de las columnas de la tabla que no tiene una fila coincidente con valores NULL.

LEER:  AMD AM5 Motherboard: ¿AMD o Nvidia? Gráficos en Debate

sql
-- Ejemplo de FULL OUTER JOIN
SELECT * FROM COMPANY FULL OUTER JOIN DEPARTMENT ON COMPANY.company_id = DEPARTMENT.company_id;

| companyid | companyname | companyaddress | departmentid | department_name |
|—|—|—|—|—|
| 1 | Company A | Address 1 | 1 | Sales |
| 1 | Company A | Address 1 | 2 | Marketing |
| 1 | Company A | Address 1 | 3 | Finance |
| 2 | Company B | Address 2 | 1 | Sales |
| 2 | Company B | Address 2 | 2 | Marketing |
| 3 | Company C | Address 3 | NULL | NULL |
| NULL | NULL | NULL | 4 | Research & Development |

Resumen de Joins en PostgreSQL

| Tipo de Join | Descripción |
|—|—|
| CROSS JOIN | Produce el producto cartesiano de dos tablas, combinando cada fila de la primera tabla con cada fila de la segunda tabla. |
| INNER JOIN | Devuelve las filas donde los valores en las columnas especificadas coinciden en ambas tablas. |
| LEFT OUTER JOIN | Devuelve todas las filas de la tabla izquierda y las filas coincidentes de la tabla derecha, rellenando valores NULL para las filas que no coinciden en la tabla derecha. |
| RIGHT OUTER JOIN | Devuelve todas las filas de la tabla derecha y las filas coincidentes de la tabla izquierda, rellenando valores NULL para las filas que no coinciden en la tabla izquierda. |
| FULL OUTER JOIN | Devuelve todas las filas de ambas tablas, rellenando valores NULL para las filas que no coinciden en la otra tabla. |

Consideraciones al Elegir un Join

La elección del tipo de join depende de la información que se busca recuperar.

  • Si se necesitan todas las combinaciones posibles de filas de dos tablas, se utiliza CROSS JOIN.
  • Si se necesitan solo las filas donde los valores en las columnas especificadas coinciden, se utiliza INNER JOIN.
  • Si se necesitan todas las filas de la tabla izquierda, incluso si no hay una fila coincidente en la tabla derecha, se utiliza LEFT OUTER JOIN.
  • Si se necesitan todas las filas de la tabla derecha, incluso si no hay una fila coincidente en la tabla izquierda, se utiliza RIGHT OUTER JOIN.
  • Si se necesitan todas las filas de ambas tablas, independientemente de si hay una fila coincidente en la otra tabla, se utiliza FULL OUTER JOIN.
LEER:  While en Python: Guía Completa con Ejemplos Prácticos

Conclusión

Los joins son una herramienta esencial para trabajar con datos en PostgreSQL. Dominar los diferentes tipos de joins te permite combinar datos de diferentes tablas de manera eficiente y flexible, obteniendo la información que necesitas. Al elegir el tipo de join adecuado, puedes obtener resultados precisos y personalizados.