SQL desde cero · lección 5 de 6
Poner nombre a cada robo juntando dos tablas, y por qué aparece el error de columna ambigua.
La tabla robos no dice quién robó, sólo sospechoso_id: el número que apunta al id de sospechosos. JOIN junta cada robo con su sospechoso, y ON dice cómo emparejarlos: ON s.id = r.sospechoso_id.
Las letras son alias: FROM robos r JOIN sospechosos s te deja escribir r.botin y s.nombre. Hacen falta cuando dos tablas comparten un nombre de columna, como ciudad: sin decir de cuál, DuckDB te responde que es ambigua.
JOIN sólo deja las filas que encuentran pareja. Por eso aquí no aparece el robo sin sospechoso ni la gente sin robos. De esos se ocupa la siguiente lección.
sospechosos
| id | nombre | edad | ciudad | oficio |
|---|---|---|---|---|
| 1 | Lucía Prado | 34 | Bahía Lumen | fotógrafa |
| 2 | Joel Ibarra | 52 | Puerto Sal | cerrajero |
| 3 | Marta Solís | 27 | Bahía Lumen | enfermera |
| 4 | Iker Vela | 41 | San Ciro | taxista |
| 5 | Rocío Andrade | 63 | Puerto Sal | joyera |
| 6 | Damián Cuevas | 19 | San Ciro | repartidor |
| 7 | Elena Ruiz | 46 | Bahía Lumen | contadora |
| 8 | Bruno Paz | 38 | Puerto Sal | mecánico |
robos
| id | sospechoso_id | ciudad | botin |
|---|---|---|---|
| 1 | 2 | Puerto Sal | 1200 |
| 2 | 2 | Puerto Sal | 800 |
| 3 | 4 | San Ciro | 300 |
| 4 | 5 | Puerto Sal | 5000 |
| 5 | 8 | Puerto Sal | 450 |
| 6 | 8 | Bahía Lumen | 950 |
| 7 | 8 | San Ciro | 150 |
| 8 | 1 | Bahía Lumen | 2200 |
| 9 | NULL | Bahía Lumen | 700 |
Puedes escribir aquí mismo: cada ejercicio se ejecuta con DuckDB en tu navegador, sin instalar nada. Con el teclado: Ctrl + Enter.
El nombre del sospechoso y el botín de cada robo.
Añade: JOIN sospechosos s ON s.id = r.sospechoso_id
El nombre y el botín de los robos cometidos en Puerto Sal. Ejecútala tal como está para ver el error y luego corrígela.
Las dos tablas tienen ciudad. Queremos dónde fue el robo: WHERE r.ciudad = 'Puerto Sal'
El nombre y el botín total de cada sospechoso con robos.
Cambia r.botin por SUM(r.botin) y añade GROUP BY s.nombre al final.
Sólo el nombre de quien suma más botín, y su total.
Al final: ORDER BY SUM(r.botin) DESC LIMIT 1
Lección terminada.
Lección 6: los que faltan, con LEFT JOIN →