Lección 7: Joins
Los Joins nos permiten realizar consultas cuyo resultado puede estar formado por columnas de diferentes tablas. Esto es posible porque las tablas albergan una clave foránea, están relacionadas de alguna manera. De este modo podemos realizar consultas con datos de ambas tablas. No obstante esta utilidad hay que usarla con precaución ya que consume muchos recursos.
Para la lección he creado una base de datos minimalista con fruta y colores.
Puedes descargarla aquí.
INNER JOIN
El más conocido y utilizado. Une los valores que coinciden en ambas tablas si hay relación. En caso contrario omite la fila.
SELECT [tabla.columnas] FROM [tabla_1] INNER JOIN [tabla_2] ON [tabla_1.columna] = [tabla_2.columna];
SELECT * FROM Frutas INNER JOIN Colores ON Frutas.ColorId = Colores.ColorId;
FrutaId | Nombre | ColorId | ColorIColorId | Nombre
1 Melocotón 3 3 Naranja
2 Kiwi 4 4 Verde
3 Coco 5 5 Marrón
Para simplificar el resultado daremos algunos alias.
SELECT Frutas.Nombre AS Nombre, Colores.Nombre AS Color FROM Frutas INNER JOIN Colores ON Frutas.ColorId = Colores.ColorId;
Fruta | Color
Melocotón Naranja
Kiwi Verde
Coco Marrón
Mucho mejor, ¿no? Ahora te deberías estar preguntando: ¿Donde esta el Higo y la Manzana?. INNER JOIN
es un solterón empedernido, ignora las relaciones que no van a ningún lado o las filas nulas.
LEFT JOIN
Une los valores de la primera tabla con la segunda, aunque encuentre relaciones rotas o Nulas. Básicamente no omite ninguna fila de la primera tabla.
SELECT [tabla.columnas] FROM [tabla_1] LEFT JOIN [tabla_2] ON [tabla_1.columna] = [tabla_2.columna];
SELECT Frutas.Nombre AS Nombre, Colores.Nombre AS Color FROM Frutas LEFT JOIN Colores ON Frutas.ColorId = Colores.ColorId;
Fruta | Color
Melocotón Naranja
Kiwi Verde
Coco Marrón
Higo NULL
Manzana NULL
RIGHT JOIN
Mismo mecanismo del anterior pero invertido. Une los valores de la segunda tabla con la primera. En este caso no omite filas de la segunda tabla.
SELECT [tabla.columnas] FROM [tabla_1] RIGHT JOIN [tabla_2] ON [tabla_1.columna] = [tabla_2.columna];
Lamentablemente SQLite no es compatible con RIGHT JOIN
, por lo que no podremos visualizar un resultado real. Aunque conseguiremos el mismo efecto con LEFT JOIN
y la tabla contraria.
SELECT Frutas.Nombre AS Nombre, Colores.Nombre AS Color FROM Frutas LEFT JOIN Colores ON Frutas.ColorId = Colores.ColorId;
Fruta | Color
Melocotón Naranja
Kiwi Verde
Coco Marrón
Higo NULL
Manzana NULL
FULL JOIN
No ignora ninguna fila, ni de la primera tabla ni de la segunda.
SELECT [tabla.columnas] FROM [tabla_1] FULL JOIN [tabla_2] ON [tabla_1.columna] = [tabla_2.columna];
Lamentablemente SQLite no es compatible con FULL JOIN
, por lo que no podremos ver su resultado.
SQL UNION
Combina los valores de diferentes consultas en una sola columna o varias. Además suprime las repeticiones.
SELECT [tabla.columnas] FROM [tabla_1]
UNION
SELECT [tabla.columnas] FROM [tabla_2];
Es necesario que las columnas a mezclar se denominen con el mismo alias o nombre.
SELECT Frutas.nombre FROM Frutas
UNION
SELECT Colores.nombre FROM Colores
Nombre
Amarillo
Coco
Higo
Kiwi
Manzana
Marrón
Melocotón
Naranja
Rojo
Verde
En caso de necesitar que muestres los datos en crudo, sin eliminar las repeticiones, utiliza UNION ALL
.
SELECT [tabla.columnas] FROM [tabla_1]
UNION ALL
SELECT [tabla.columnas] FROM [tabla_2];
SELECT Frutas.nombre FROM Frutas
UNION ALL
SELECT Colores.nombre FROM Colores
Esta obra está bajo una Licencia Creative Commons Atribución-NoComercial-SinDerivadas 4.0 Internacional.
¿Me invitas a un café? ☕
Puedes hacerlo usando el terminal.
ssh customer@andros.dev -p 5555
Comentarios
Nuevo comentario
Nueva replica {{ formatEllipsisAuthor(replyComment.author) }}
Escribe el primer comentario
{{ comments.length }} comentarios