En este módulo, profundizaremos en los tipos de joins avanzados que puedes utilizar en BigQuery para realizar consultas más complejas y eficientes. Los joins son una herramienta poderosa para combinar datos de diferentes tablas, y entender cómo utilizarlos correctamente es crucial para cualquier analista de datos o ingeniero de datos.

Tipos de Joins Avanzados

  1. Cross Join

Un cross join (o producto cartesiano) combina cada fila de la primera tabla con cada fila de la segunda tabla. Este tipo de join puede generar un gran número de filas, por lo que debe usarse con precaución.

Ejemplo:

SELECT *
FROM table1
CROSS JOIN table2;

  1. Self Join

Un self join es una join de una tabla consigo misma. Esto puede ser útil para comparar filas dentro de la misma tabla.

Ejemplo:

SELECT a.column1, b.column2
FROM table1 a
JOIN table1 b
ON a.common_column = b.common_column;

  1. Full Outer Join

Un full outer join devuelve todas las filas cuando hay una coincidencia en una de las tablas. Si no hay coincidencia, las filas no coincidentes también se incluirán con valores NULL.

Ejemplo:

SELECT *
FROM table1
FULL OUTER JOIN table2
ON table1.id = table2.id;

  1. Lateral Join

Un lateral join permite que una subconsulta en la cláusula FROM haga referencia a columnas de tablas que aparecen antes en la misma cláusula FROM.

Ejemplo:

SELECT t1.id, t2.value
FROM table1 t1,
LATERAL (SELECT value FROM table2 WHERE table2.id = t1.id) t2;

Ejemplos Prácticos

Ejemplo 1: Cross Join

Supongamos que tenemos dos tablas, products y categories, y queremos combinar cada producto con cada categoría.

Tabla products: | product_id | product_name | |------------|--------------| | 1 | Laptop | | 2 | Smartphone |

Tabla categories: | category_id | category_name | |-------------|----------------| | A | Electronics | | B | Accessories |

Consulta:

SELECT *
FROM products
CROSS JOIN categories;

Resultado: | product_id | product_name | category_id | category_name | |------------|--------------|-------------|----------------| | 1 | Laptop | A | Electronics | | 1 | Laptop | B | Accessories | | 2 | Smartphone | A | Electronics | | 2 | Smartphone | B | Accessories |

Ejemplo 2: Self Join

Supongamos que tenemos una tabla employees y queremos encontrar pares de empleados que trabajan en el mismo departamento.

Tabla employees: | employee_id | employee_name | department_id | |-------------|---------------|---------------| | 1 | Alice | 101 | | 2 | Bob | 102 | | 3 | Charlie | 101 |

Consulta:

SELECT a.employee_name AS employee1, b.employee_name AS employee2
FROM employees a
JOIN employees b
ON a.department_id = b.department_id
AND a.employee_id < b.employee_id;

Resultado: | employee1 | employee2 | |-----------|-----------| | Alice | Charlie |

Ejemplo 3: Full Outer Join

Supongamos que tenemos dos tablas, orders y customers, y queremos obtener una lista completa de todos los pedidos y clientes, incluso si no hay coincidencias.

Tabla orders: | order_id | customer_id | amount | |----------|-------------|--------| | 1 | 101 | 250 | | 2 | 102 | 450 |

Tabla customers: | customer_id | customer_name | |-------------|---------------| | 101 | John Doe | | 103 | Jane Smith |

Consulta:

SELECT *
FROM orders
FULL OUTER JOIN customers
ON orders.customer_id = customers.customer_id;

Resultado: | order_id | customer_id | amount | customer_id | customer_name | |----------|-------------|--------|-------------|---------------| | 1 | 101 | 250 | 101 | John Doe | | 2 | 102 | 450 | NULL | NULL | | NULL | 103 | NULL | 103 | Jane Smith |

Ejercicios Prácticos

Ejercicio 1: Cross Join

Dada la siguiente tabla students y courses, realiza un cross join para combinar cada estudiante con cada curso.

Tabla students: | student_id | student_name | |------------|--------------| | 1 | Alice | | 2 | Bob |

Tabla courses: | course_id | course_name | |-----------|-------------| | A | Math | | B | Science |

Consulta:

-- Escribe tu consulta aquí

Ejercicio 2: Self Join

Dada la siguiente tabla employees, encuentra pares de empleados que trabajan en el mismo departamento.

Tabla employees: | employee_id | employee_name | department_id | |-------------|---------------|---------------| | 1 | Alice | 101 | | 2 | Bob | 102 | | 3 | Charlie | 101 | | 4 | David | 102 |

Consulta:

-- Escribe tu consulta aquí

Ejercicio 3: Full Outer Join

Dada la siguiente tabla orders y customers, realiza un full outer join para obtener una lista completa de todos los pedidos y clientes.

Tabla orders: | order_id | customer_id | amount | |----------|-------------|--------| | 1 | 101 | 250 | | 2 | 102 | 450 |

Tabla customers: | customer_id | customer_name | |-------------|---------------| | 101 | John Doe | | 103 | Jane Smith |

Consulta:

-- Escribe tu consulta aquí

Soluciones

Solución Ejercicio 1

SELECT *
FROM students
CROSS JOIN courses;

Solución Ejercicio 2

SELECT a.employee_name AS employee1, b.employee_name AS employee2
FROM employees a
JOIN employees b
ON a.department_id = b.department_id
AND a.employee_id < b.employee_id;

Solución Ejercicio 3

SELECT *
FROM orders
FULL OUTER JOIN customers
ON orders.customer_id = customers.customer_id;

Conclusión

En esta sección, hemos explorado varios tipos de joins avanzados en BigQuery, incluyendo cross joins, self joins, full outer joins y lateral joins. Estos joins te permiten realizar consultas más complejas y obtener insights más profundos de tus datos. Asegúrate de practicar estos conceptos con los ejercicios proporcionados para consolidar tu comprensión. En el próximo módulo, profundizaremos en el manejo de campos anidados y repetidos en BigQuery.

Curso de BigQuery

Módulo 1: Introducción a BigQuery

Módulo 2: SQL Básico en BigQuery

Módulo 3: SQL Intermedio en BigQuery

Módulo 4: SQL Avanzado en BigQuery

Módulo 5: Gestión de Datos en BigQuery

Módulo 6: Optimización del Rendimiento de BigQuery

Módulo 7: Seguridad y Cumplimiento en BigQuery

Módulo 8: Integración y Automatización de BigQuery

Módulo 9: Machine Learning en BigQuery (BQML)

Módulo 10: Casos de Uso de BigQuery en el Mundo Real

© Copyright 2024. Todos los derechos reservados