
Learning Report: JOINS en SQL.
¡Volviendo a la carga después del resfriado! 😷
No sé cómo habéis estado esta semana, pero yo he pasado por una buena batalla contra un resfriado (del que aún intento salir). De esos que te dejan un día o dos sin dormir de lo que te duele la garganta, te dejan la nariz tapada y sin ganas de hacer nada más que echarte unos cuantos League of legends (para ponerte peor). Pero bueno, después de un par de tuppers de mi madre y pegárselo a mi pareja… ¡aquí estoy otra vez! Como he estado fuera unos días, hoy vuelvo con un tema bastante práctico, importante y, sobre todo, que me va a servir para afianzar conocimientos en SQL: los JOINS.
¿Qué son los JOINS en SQL?🧩
Imagina que tienes una biblioteca online con tablas que contienen información sobre libros, autores y categorías. Los JOINS te permiten combinar estos datos para tener una vista completa, como qué autor escribió qué libro, o la categoría del libro.
Os voy a mostrar las tablas con las que trabajaré los ejemplos. Son tablas pequeñas de 10 registros y son sintéticas (generadas por un LLM, ya hablaremos de cómo generar datos sintéticos con ChatGPT o cualquier otro).
Tabla libros
id | titulo | autor_id | categoria_id |
---|---|---|---|
1 | El Señor de los Anillos | 1 | 1 |
2 | Cien Años de Soledad | 2 | 2 |
3 | 1984 | 3 | 3 |
4 | Harry Potter y la Piedra… | 4 | 1 |
5 | El Hobbit | 1 | 1 |
6 | Crónica de una Muerte… | 2 | 2 |
7 | Un Mundo Feliz | 3 | 3 |
Tabla autores
id | nombre |
---|---|
1 | J.R.R. Tolkien |
2 | Gabriel García Márquez |
3 | George Orwell |
4 | J.K. Rowling |
5 | Dan Brown |
Tabla categorías
id | nombre |
---|---|
1 | Fantasía |
2 | Realismo Mágico |
3 | Distopía |
4 | Misterio |
5 | Filosofía |
Tipos de JOINS ¿Cómo combinar los datos?📖
1. INNER JOIN: Solo lo que tienen en común 📑
El INNER JOIN devuelve solo las filas que tienen coincidencia en ambas tablas. Los libros deben tener tanto un autor como una categoría asignada, por lo que los libros sin coincidencia en alguna de las tablas (autor o categoría) no aparecerá en la tabla resultado.
SELECT libros.titulo, autores.nombre AS autor, categorias.nombre AS categoria
FROM libros
INNER JOIN autores
ON libros.autor_id = autores.id
INNER JOIN categorias
ON libros.categoria_id = categorias.id;
titulo | autor | categoria |
---|---|---|
El Señor de los Anillos | J.R.R. Tolkien | Fantasía |
Cien Años de Soledad | Gabriel García Márquez | Realismo Mágico |
1984 | George Orwell | Distopía |
Harry Potter y la Piedra… | J.K. Rowling | Fantasía |
El Hobbit | J.R.R. Tolkien | Fantasía |
Crónica de una Muerte… | Gabriel García Márquez | Realismo Mágico |
Un Mundo Feliz | George Orwell | Distopía |
En este ejemplo aparecen solamente libros que tienen coincidencia en ambas tablas (autores y categorías). Los libros con valores NULL
en alguno de estos campos, como “Libro Sin Autor” o “Libro Perdido”, no aparecen en los resultados.
2. LEFT JOIN (LEFT OUTER JOIN): Todos los libros, incluso los sin autor o categoría 📚
El LEFT JOIN incluye todos los registros de la tabla de la izquierda (en este caso, libros
), y solo las coincidencias con la tabla de la derecha. Si algún libro no tiene autor o categoría aparecerá el famoso NULL
en el resultado. Lo que viene siendo un =BUSCARV()
en un Excel o Google Sheets.
SELECT libros.titulo, autores.nombre AS autor, categorias.nombre AS categoria
FROM libros
LEFT JOIN autores
ON libros.autor_id = autores.id
LEFT JOIN categorias
ON libros.categoria_id = categorias.id;
titulo | autor | categoria |
---|---|---|
El Señor de los Anillos | J.R.R. Tolkien | Fantasía |
Cien Años de Soledad | Gabriel García Márquez | Realismo Mágico |
1984 | George Orwell | Distopía |
Harry Potter y la Piedra… | J.K. Rowling | Fantasía |
El Hobbit | J.R.R. Tolkien | Fantasía |
Crónica de una Muerte… | Gabriel García Márquez | Realismo Mágico |
Un Mundo Feliz | George Orwell | Distopía |
Libro Sin Autor | NULL | Misterio |
Libro Sin Categoría | Dan Brown | NULL |
Libro Perdido | NULL | NULL |
En este caso, todos los libros están presentes en la tabla de resultado, incluso los que no tienen autor o categoría. Los libros como “Libro Sin Autor”, “Libro Sin Categoría” y “Libro Perdido” aparecen con campos NULL
donde no hay coincidencias. Ningún libro queda fuera, a diferencia del INNER JOIN.
3. RIGHT JOIN (RIGHT OUTER JOIN): Todas las castegorías, aunque no tengan libros asignados 📂
El RIGHT JOIN devuelve todas las filas de la tabla de la derecha, y solo las coincidencias en la izquierda. Esto nos permite ver todas las categorías, incluso si no tienen libros asociados.
SELECT libros.titulo, autores.nombre AS autor, categorias.nombre AS categoria
FROM libros
RIGHT JOIN categorias
ON libros.categoria_id = categorias.id
LEFT JOIN autores
ON libros.autor_id = autores.id;
titulo | autor | categoria |
---|---|---|
El Señor de los Anillos | J.R.R. Tolkien | Fantasía |
Harry Potter y la Piedra… | J.K. Rowling | Fantasía |
El Hobbit | J.R.R. Tolkien | Fantasía |
Cien Años de Soledad | Gabriel García Márquez | Realismo Mágico |
Crónica de una Muerte… | Gabriel García Márquez | Realismo Mágico |
1984 | George Orwell | Distopía |
Un Mundo Feliz | George Orwell | Distopía |
Libro Sin Autor | NULL | Misterio |
NULL | NULL | Filosofía |
Aquí vemos todas las categorías, incluso aquellas que no tienen libros asignados. En este caso, la categoría “Filosofía” aparece en el resultado, pero con valores NULL
para el tíulo y el autor poorque no tiene ningún libro asignado. Tabmién vemos libros como “Libro Sin Autor”, que aparece con NULL
en el campo de autor.
4. FULL JOIN: Todos los libros y categorías, aunque no coincidan 🔄
El FULL JOIN devuelve todas las filas de ambas tablas, incluso si no coinciden entre sí. Si no hay coincidencias, los campos aparecerán como NULL
.
SELECT libros.titulo, autores.nombre AS autor, categorias.nombre AS categoria
FROM libros
FULL OUTER JOIN categorias
ON libros.categoria_id = categorias.id
LEFT JOIN autores
ON libros.autor_id = autores.id;
titulo | autor | categoria |
---|---|---|
El Señor de los Anillos | J.R.R. Tolkien | Fantasía |
Cien Años de Soledad | Gabriel García Márquez | Realismo Mágico |
1984 | George Orwell | Distopía |
Harry Potter y la Piedra… | J.K. Rowling | Fantasía |
El Hobbit | J.R.R. Tolkien | Fantasía |
Crónica de una Muerte… | Gabriel García Márquez | Realismo Mágico |
Un Mundo Feliz | George Orwell | Distopía |
Libro Sin Autor | NULL | Misterio |
Libro Sin Categoría | Dan Brown | NULL |
Libro Perdido | NULL | NULL |
NULL | NULL | Filosofía |
En el FULL JOIN, vemos todo: tanto los libros como las categorías, aunque no coincidan. Si un libro no tiene autor o categoría… pues aparecere NULL
como ya hemos visto anteriormente. Este JOIN muestra todas las filas de ambas tablas, con valores nulos donde no hay coincidencias.
Al final los JOINS son una herramienta fundamental cuando trabajas con bases de datos, y dominar cómo combinar las diferentes tablas que tienes… te abre un sinfín de posibilidades para poder buscar patrones y conseguir hacer visualizaciones mucho más completas pero sobre todo más útiles.