← Mundo Data Tutorial gratis · 20 min

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.

Pegá una línea por vez. La consola web ejecuta lo que le llega de a una instrucción, y con textos largos o de varias líneas se atraganta. Cada bloque de este tutorial es una sola línea justamente por eso.

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!

Error común: si te olvidás el punto y coma final (;), 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