SQL desde cero: tu primera consulta en 20 minutos
Si nunca escribiste una línea de SQL, este es tu punto de entrada. En 20 minutos vas a estar haciendo consultas reales, sin instalar nada, desde el navegador.
1 · Qué es SQL (y por qué DuckDB)
SQL es el idioma para hacerle preguntas a los datos: "mostrame las ventas mayores a mil pesos, ordenadas de mayor a menor". Es la herramienta número uno de cualquiera que trabaja con datos.
Vamos a usar DuckDB, un motor pensado para análisis de datos (no para apps). Corre entero en tu navegador, gratis, sin cuenta ni instalación.
2 · Abrí la consola de DuckDB
Entrá a shell.duckdb.org. Vas a ver una consola tipo terminal con un cursor. Ahí escribís tus consultas y las corrés con Enter. No te asustes por el look: es el mismo SQL que usa todo el mundo.
La consola corre una instrucción por vez. Cada bloque de este tutorial es una sola línea: usá el botón Copiar, pegala, apretá Enter, y recién ahí seguí con la siguiente.
Antes de arrancar, comprobá que responde. Esta es la consulta más chica que existe: no toca ningún dato, solo pide el número 1.
SELECT 1;
Qué esperar: una tablita con un 1 adentro. Si la ves, la consola está viva y lista.
3 · Creá la tabla vacía
Una tabla es como una hoja de cálculo, pero con las reglas declaradas de entrada: antes de cargar un solo dato le decís qué columnas tiene y de qué tipo es cada una. VARCHAR es texto, INT es número entero.
Copiá esta línea, pegala en la consola y apretá Enter:
CREATE TABLE ventas(producto VARCHAR, categoria VARCHAR, precio INT, unidades INT, ciudad VARCHAR);
Qué esperar: nada visible, o un escueto aviso de que salió bien. Es lo correcto — creaste la estructura, todavía sin filas adentro.
4 · Cargá las filas
La tabla existe pero está vacía. INSERT INTO le mete filas: cada paréntesis es una venta, con sus valores en el mismo orden en que declaraste las columnas.
Van en dos tandas de tres para que cada línea quede corta. Primera:
INSERT INTO ventas VALUES ('Café','Bebida',1200,34,'Mendoza'),('Medialuna','Panadería',600,52,'Mendoza'),('Té','Bebida',900,12,'Córdoba');
Y la segunda:
INSERT INTO ventas VALUES ('Tostado','Comida',2500,20,'Mendoza'),('Jugo','Bebida',1100,28,'Córdoba'),('Budín','Panadería',1400,15,'Mendoza');
Qué esperar: cada una te avisa que insertó 3 filas. Ya tenés 6 ventas cargadas: cada fila es una venta, cada columna un dato de esa venta.
5 · Tu primera consulta
Pedí todo lo que hay en la tabla. SELECT * significa "traé todas las columnas"; FROM ventas, "de la tabla ventas":
SELECT * FROM ventas;
Deberías ver las 6 filas. ¡Esa fue tu primera consulta SQL!
;), DuckDB en la web igual suele correr la línea. Pero acostumbrate a cerrarlas: en otras herramientas es obligatorio.6 · Elegí solo las columnas que te importan
En vez de *, nombrá las columnas que querés:
SELECT producto, precio FROM ventas;
7 · Filtrá con WHERE
WHERE se queda solo con las filas que cumplen una condición. Mostremos lo que cuesta más de 1000:
SELECT producto, precio FROM ventas WHERE precio > 1000;
8 · Ordená con ORDER BY
ORDER BY ... DESC ordena de mayor a menor (ASC sería de menor a mayor):
SELECT producto, precio FROM ventas WHERE precio > 1000 ORDER BY precio DESC;
9 · Cortá con LIMIT
Para ver solo las 3 primeras filas del resultado:
SELECT producto, precio FROM ventas ORDER BY precio DESC LIMIT 3;
10 · La primera consulta útil: agrupar y contar
Acá está el salto. GROUP BY junta filas por categoría, y con COUNT y SUM las resumís. "¿Cuántos productos y cuántas unidades vendí por categoría?":
SELECT categoria, COUNT(*) AS productos, SUM(unidades) AS total_unidades FROM ventas GROUP BY categoria ORDER BY total_unidades DESC;
Eso ya es análisis de datos: pasaste de filas sueltas a una respuesta. Con estas cinco piezas — SELECT, WHERE, ORDER BY, LIMIT, GROUP BY — resolvés la enorme mayoría de las preguntas del día a día.
11 · Bonus: consultá un archivo real de internet
El superpoder de DuckDB: leer un CSV remoto con una sola línea, sin descargarlo. Probá con un dataset público clásico (los pasajeros del Titanic):
SELECT Sex, COUNT(*) AS pasajeros, ROUND(AVG(Age), 1) AS edad_prom FROM read_csv_auto('https://raw.githubusercontent.com/datasciencedojo/datasets/master/titanic.csv') GROUP BY Sex;
La misma idea sirve para cualquier CSV público: cambiás la URL y listo. Así se analizan datos de verdad.
¿Listo para el siguiente nivel?
Ya sabés consultar y agrupar. El tema que más separa a un analista junior de uno senior son las window functions: rankings, acumulados y comparaciones fila a fila.
Window functions en SQL → Crear mi cuenta gratis en Mundo Data