Hoy vamos a una de las partes más interesantes cuando trabajas con bases de datos relacionales — unir datos de varias tablas usando JOIN. Es una herramienta potente que te abre la puerta a crear relaciones complejas y hacer análisis de verdad.
Imagina que tu base de datos es un cómic gigante, donde cada tabla separada es una viñeta. Para tener la historia completa, tienes que unir esas viñetas. Justo para eso sirve JOIN. Unir datos es el proceso que permite a una consulta sacar información de varias tablas y conectarla según condiciones que tú defines.
Las bases de datos relacionales están construidas alrededor de la idea de relaciones entre tablas. Cada tabla guarda info sobre una entidad concreta, y para ver el panorama completo, muchas veces queremos juntar datos de diferentes tablas. Por ejemplo:
- La tabla
studentstiene la lista de estudiantes. - La tabla
coursesguarda la lista de cursos. - La tabla
enrollmentsmuestra quién está en qué curso.
Para saber qué estudiante está en qué curso, tenemos que unir esas tablas. En entrevistas, un desarrollador que sabe usar JOIN se ve muy pro, porque es una de las skills más buscadas en el mundo de los datos.
Tipos principales de uniones
En PostgreSQL hay varios tipos de JOIN, y cada uno está pensado para tareas concretas. Vamos a verlos en general, sin liarnos con ejemplos complicados todavía:
Tipo de JOIN |
Descripción |
|---|---|
INNER JOIN |
Devuelve las filas que tienen coincidencia en ambas tablas. |
LEFT JOIN |
Devuelve todas las filas de la tabla de la izquierda, y de la derecha solo las que coinciden. |
RIGHT JOIN |
Devuelve todas las filas de la tabla de la derecha, y de la izquierda solo las que coinciden. |
FULL OUTER JOIN |
Devuelve todas las filas de ambas tablas, rellenando con NULL donde no hay coincidencias. |
La elección de un tipo de JOIN depende de lo que necesitas:
- Si solo quieres los datos que coinciden en ambas tablas, usa
INNER JOIN. - Si quieres mantener todos los datos de una tabla y de la otra solo los que coinciden, te sirven
LEFT JOINoRIGHT JOIN. - Si necesitas todos los datos de ambas tablas, aunque no coincidan, usa
FULL OUTER JOIN.
Vamos a ver cómo funcionan todas estas uniones en la práctica.
Ejemplo de problema — "¿Quién está en qué curso?"
Supón que tenemos tres tablas:
Tabla students
| id | name |
|---|---|
| 1 | Otto |
| 2 | Anna |
| 3 | Peter |
Tabla courses
| id | title |
|---|---|
| 101 | Matemáticas |
| 102 | Inglés |
Tabla enrollments
| student_id | course_id |
|---|---|
| 1 | 101 |
| 2 | 102 |
Estas tablas están relacionadas así:
- El campo
idenstudentses el identificador único del estudiante. - El campo
idencourseses el identificador único del curso. - En la tabla
enrollmentslas columnasstudent_idycourse_idcrean la relación entre estudiantes y cursos.
Supón que queremos responder a la pregunta: ¿qué estudiante está inscrito en qué curso?
La respuesta se puede sacar usando JOIN. Vamos a unir las tablas según sus relaciones:
- Unimos
studentsyenrollmentsporid = student_id. - Unimos
enrollmentsycoursesporcourse_id = id.
Así se vería la consulta SQL:
SELECT students.name, courses.title
FROM enrollments
JOIN students ON enrollments.student_id = students.id
JOIN courses ON enrollments.course_id = courses.id;
¿Qué hace esta consulta?
FROM enrollments— empezamos desde la tabla que conecta estudiantes y cursos.JOIN students ON enrollments.student_id = students.id— la unimos con los estudiantes para sacar sus nombres.JOIN courses ON enrollments.course_id = courses.id— la unimos con los cursos para sacar los títulos.
El resultado será así:
| name | title |
|---|---|
| Otto | Matemáticas |
| Anna | Inglés |
Ojo: si un estudiante no tiene ningún curso, no aparecerá en el resultado — porque JOIN por defecto es estricto (INNER JOIN). Más adelante veremos cómo incluir también a esos estudiantes usando LEFT JOIN.
Si algo de esta consulta no te queda claro, ¡no te rayes! Poco a poco lo vas a pillar — ¡ese es el objetivo de las siguientes lecciones!
¿Para qué sirve esto en la vida real?
Ahora que ya sabes cómo unir tablas, vamos a hablar del mundo real. ¿Alguna vez te has preguntado cómo funciona una tienda online? Por ejemplo, cuando eliges un móvil y ves las reseñas de otros usuarios.
- La tabla
productscontiene información sobre los productos. - La tabla
reviewscontiene las reseñas de los compradores. - La tabla
customerscontiene información sobre los propios compradores.
Para mostrar las reseñas en la web, hay que unir las tablas products, reviews y customers. Eso es JOIN en acción.
¿En qué fijarse?
Antes de meternos a fondo con JOIN en las siguientes lecciones, aquí tienes un par de cosas que vale la pena recordar:
- El orden en
JOINimporta. Por ejemplo,LEFT JOINdevuelve filas de la tabla de la izquierda, así que si cambias el orden, cambias el resultado. - Trabaja con tablas pequeñas. Al principio, evita consultas con millones de filas. Recuerda, hasta la consulta más simple debe ser clara.
- Acostúmbrate a pensar en relaciones. Cuando veas las tablas como partes de una estructura grande, trabajar con
JOINserá natural.
Desde hoy vamos a empezar a convertirnos en especialistas en SQL. En la próxima lección vas a aprender cómo usar INNER JOIN para sacar datos de dos tablas. Será un paso importante en tu aprendizaje de PostgreSQL.
GO TO FULL VERSION