Skip to content
Este artículo tiene fines educativos. Te animamos a verificar con fuentes oficiales.

¿Alguna vez te preguntaste cómo hace tu banco para saber cuánto tenés en tu cuenta en guaraníes al instante? O cómo la app de tu feriado en Encarnación calcula los precios de los pasajes en tiempo real. Detrás de todo eso está SQL, el idioma secreto que habla con las bases de datos. En este curso, vas a aprender a crear tus propias tablas, guardar datos de tu barrio y hasta hacer consultas como un profesional. ¡Empecemos!

¿Por qué SQL es el idioma secreto de los datos?

Imaginate que estás en el Mercado 4 de Asunción y ves a tu abuela vendiendo chipá, tereré y sopa paraguaya. Cada venta que hace queda registrada en un cuaderno: qué vendió, cuánto costó, a quién le vendió. Ahora, pensá en una base de datos como ese cuaderno, pero digital y gigante. SQL es el idioma que usás para hablar con esa base de datos. Con SQL podés preguntar cosas como: <<¿Cuántos kilogramos de yerba mate vendió la señora Rosa en su puesto de Luque durante julio?>> o <<¿Cuál es el precio promedio de un chipá en las ferias de Encarnación?>>. Sin SQL, esos datos serían un montón de números sin sentido. Con SQL, se convierten en información útil.

¿Qué es SQL? SQL (Structured Query Language) es un lenguaje diseñado para comunicarse con bases de datos relacionales. Su poder está en permitirte hacer operaciones complejas con una sola línea de código.
  • Crear y modificar estructuras de datos (tablas, índices)
  • Insertar, actualizar y borrar registros
  • Consultar datos con filtros y ordenamientos
  • Controlar el acceso a la información
Base de datos relacional

En clair : Una base de datos relacional es como un archivador gigante donde cada carpeta (tabla) tiene hojas (registros) con información relacionada entre sí, como los precios de los productos y las ventas de la feria.

Définition : Sistema de almacenamiento de datos organizado en tablas que se relacionan entre sí mediante claves únicas. Cada tabla contiene filas (registros) y columnas (campos) con información estructurada.

À ne pas confondre : Una base de datos no relacional (como MongoDB) guarda datos en documentos JSON sin relaciones fijas entre ellos.

Las bases de datos relacionales son las más usadas en el mundo real, desde bancos hasta apps de delivery.

Ejemplo: Lista de precios de productos típicos

Don Roque tiene un puesto en la feria de Encarnación y quiere organizar los precios de sus productos típicos en una tabla digital.

  • Chipá: 2 500 PYG la unidad
  • Tereré (1 litro): 3 800 PYG
  • Sopa paraguaya (porción): 4 200 PYG
  • Yerba mate (1 kg): 25 000 PYG
  • Mbejú (porción): 3 000 PYG

Con SQL, Don Roque podría crear una tabla para registrar estos precios y consultarlos cuando necesite.

Los 4 superpoderes de SQL: DDL, DML, DQL y DCL

SQL no es un solo lenguaje, sino un conjunto de sublenguajes. Cada uno tiene un propósito específico, como los diferentes roles en un equipo de fútbol: el arquero defiende (DCL), los mediocampistas organizan (DML), los delanteros anotan (DQL) y el entrenador diseña el esquema (DDL). Vamos a ver qué hace cada uno con ejemplos de tu vida diaria en Paraguay.

Resumen de los 4 tipos de sentencias SQL
DDL: Definición de estructuras

En clair : Es como diseñar los estantes y cajones de tu puesto en la feria antes de poner los productos.

Définition : Conjunto de comandos que permiten definir y modificar objetos de la base de datos sin alterar los datos almacenados.

À ne pas confondre : DML modifica los datos dentro de las tablas, no su estructura.

Usá DDL cuando necesites crear una nueva tabla para registrar datos de tu negocio.

DML: Manipulación de datos

En clair : Es como agregar, cambiar o sacar productos de tu puesto en la feria según la demanda.

Définition : Conjunto de comandos que permiten manipular los datos almacenados en la base de datos (INSERT, UPDATE, DELETE).

À ne pas confondre : DDL no toca los datos, solo la estructura.

Usá DML cuando necesites registrar una nueva venta o corregir un precio.

DQL: Consulta de datos

En clair : Es como buscar en tu cuaderno de ventas cuántos chipá vendiste el domingo pasado.

Définition : Conjunto de comandos que permiten consultar y recuperar datos almacenados en la base de datos (SELECT, WHERE, GROUP BY).

À ne pas confondre : DML modifica datos, DQL solo los lee.

Usá DQL cuando necesites responder preguntas sobre tus datos.

DCL: Control de acceso

En clair : Es como decidir quién puede ver o modificar los precios de tu puesto en la feria.

Définition : Conjunto de comandos que permiten controlar el acceso a los datos y recursos de la base de datos (GRANT, REVOKE).

À ne pas confondre : DML y DQL no gestionan permisos, solo DCL.

Usá DCL cuando trabajes en equipo y necesites proteger información sensible.

TipoComandos principalesEjemplo práctico en Paraguay¿Cuándo usarlo?
DDLCREATE, ALTER, DROPCrear tabla de productos para tu puesto en la feria de EncarnaciónCuando necesites definir una nueva estructura de datos
DMLINSERT, UPDATE, DELETERegistrar una venta de tereré en tu almacén de LuqueCuando necesites modificar datos existentes
DQLSELECT, WHERE, ORDER BYConsultar cuántos kg de yerba vendiste en julio en Ciudad del EsteCuando necesites extraer información específica
DCLGRANT, REVOKEDar acceso a tu socio para ver los precios de tu negocioCuando necesites controlar quién accede a tus datos

Tu primera tabla: CREATE TABLE con datos de tu barrio

Vamos a crear tu primera tabla en SQL. Imaginate que tenés un pequeño almacén en el barrio Republicano de Asunción y querés registrar los productos que vendés, sus precios y cantidades. Con la sentencia CREATE TABLE, podés definir exactamente qué columnas va a tener tu tabla y qué tipo de datos guardará cada una. Es como diseñar el plano de tu puesto en la feria antes de poner los productos.

Pasos para crear una tabla en SQL

Sigue estos pasos como si estuvieras armando un mueble de IKEA, pero con SQL:

  1. Decidí qué columnas necesitas (nombre, precio, cantidad, etc.)
  2. Elegí el tipo de dato para cada columna (texto, número, fecha)
  3. Definí si alguna columna es clave primaria (única para cada registro)
  4. Ejecutá el comando CREATE TABLE con la sintaxis correcta
  5. Verificá que la tabla se creó correctamente con SHOW TABLES

¡Listo! Ahora tenés una tabla vacía esperando tus datos.

Sintaxis básica de CREATE TABLE
CREATETABLEnombretabla(columna1tipodato[restricciones],columna2tipodato[restricciones],...);
La estructura mínima para crear una tabla en SQL estándar.
Ejemplo: Tabla de productos de un almacén en Luque

Don Luis tiene un almacén en Luque y quiere registrar los productos que más se venden en su negocio.

  • Nombre del producto (texto, máximo 50 caracteres)
  • Precio por unidad (número con decimales)
  • Cantidad en stock (número entero)
  • Fecha de última actualización (fecha)
  • Categoría (texto, opciones: 'Alimentos', 'Limpieza', 'Bebidas')

Con esta tabla, Don Luis puede llevar un control exacto de su inventario y precios.

Ejercicio: Crea tu tabla de ferias libres

Crea una tabla llamada 'puestosferia' con las siguientes columnas: id (clave primaria), nombrepuesto (texto), tipoproducto (texto), preciopromedio (número), cantidadvendida_ayer (entero).

Solution
  1. Definir columnas y tipos de datos — Decidí qué columnas necesitas y sus tipos de datos según el enunciado.
  2. Escribir el comando CREATE TABLE — Usá la sintaxis correcta con los tipos de datos adecuados.
  3. Verificar la creación — Ejecutá SHOW TABLES para confirmar que la tabla existe.

→ CREATE TABLE puestosferia ( id INT PRIMARY KEY AUTOINCREMENT, nombrepuesto VARCHAR(100), tipoproducto VARCHAR(50), preciopromedio DECIMAL(10,2), cantidadvendida_ayer INT );

Insertar y modificar: INSERT, UPDATE y DELETE en contexto local

Ahora que tenés tu tabla creada, es hora de llenarla con datos reales. Imaginate que sos el dueño de un almacén en el Mercado 4 de Asunción y querés registrar los productos que tenés en stock. Con INSERT agregás nuevos registros, con UPDATE modificás los existentes y con DELETE eliminás los que ya no tenés. Es como actualizar tu inventario en el cuaderno cada vez que vendés o comprás algo.

Sintaxis de INSERT, UPDATE y DELETE
INSERTINTOnombretabla(columna1,columna2)VALUES(valor1,valor2);UPDATEnombretablaSETcolumna1=valor1WHEREcondicio´n;DELETEFROMnombretablaWHEREcondicio´n;
La estructura básica para cada operación.
Ejemplo: Actualizar stock de yerba en un almacén de Luque

Don Pedro tiene un almacén en Luque y acaba de recibir un nuevo lote de yerba Canchanara. Necesita actualizar su inventario.

  • Producto actual: Yerba Canchanara, stock = 20 unidades, precio = 25 000 PYG
  • Nuevo lote: 50 unidades a 24 500 PYG por unidad
  • Don Pedro usa UPDATE para modificar el precio y la cantidad
  • El sistema registra la fecha de actualización automáticamente

Con UPDATE, Don Pedro mantiene su inventario actualizado sin errores.

¡Cuidado con el WHERE en UPDATE y DELETE! El comando UPDATE y DELETE SIEMPRE deben llevar una condición WHERE, o borrarás TODOS los registros de la tabla. Es el error más común que veo en mis estudiantes.

Ejercicio: Registra ventas en tu tienda de barrio

1) Inserta 3 productos nuevos en tu tabla 'productos' (usá los datos del ejemplo anterior). 2) Un cliente compra 2 unidades de chipá, actualiza el stock. 3) Elimina el producto que ya no tenés en stock.

  • Productos a insertar: 'Chipá' (2500 PYG, 50 unidades), 'Tereré' (3800 PYG, 30 unidades), 'Yerba' (25000 PYG, 100 unidades)
  • Stock después de venta: chipá = 48 unidades
  • Producto a eliminar: 'Mbejú' (ya no se vende)
Solution
  1. Insertar productos nuevos — Usá INSERT INTO para agregar los tres productos a tu tabla.
  2. Actualizar stock después de venta — Usá UPDATE para restar 2 unidades del stock de chipá.
  3. Eliminar producto sin stock — Usá DELETE FROM donde el stock sea 0 para el producto 'Mbejú'.

→ INSERT INTO productos (nombre, precio, stock) VALUES ('Chipá', 2500, 50); INSERT INTO productos (nombre, precio, stock) VALUES ('Tereré', 3800, 30); INSERT INTO productos (nombre, precio, stock) VALUES ('Yerba', 25000, 100); UPDATE productos SET stock = stock - 2 WHERE nombre = 'Chipá'; DELETE FROM productos WHERE nombre = 'Mbejú';

Consultas que hablan: SELECT y filtros como un pro

Sintaxis básica de SELECT con filtros
SELECTcolumna1,columna2,...FROMnombretablaWHEREcondicio´nORDERBYcolumna[ASC|DESC];
La estructura mínima para consultar datos con condiciones.
Ejemplo: Consultar productos caros en Encarnación

Don Ramón tiene una tienda en Encarnación y quiere saber qué productos cuestan más de 10 000 PYG para promocionarlos.

  • Tabla 'productos' con columnas: id, nombre, precio, stock, categoria
  • Consulta: SELECT nombre, precio FROM productos WHERE precio > 10000 ORDER BY precio DESC
  • Resultado: Yerba (25 000 PYG), Queso Paraguay (18 000 PYG), Dulce de leche (12 000 PYG)
  • Don Ramón puede decidir hacer una promoción en estos productos

Con SELECT y WHERE, Don Ramón toma decisiones basadas en datos reales.

Pasos para hacer una consulta efectiva

Antes de escribir tu consulta, seguí estos pasos como si fuera una receta de cocina:

  1. Definí qué información necesitás (qué columnas)
  2. Decidí de qué tabla vas a extraer los datos
  3. Aplicá los filtros necesarios (WHERE)
  4. Ordená los resultados si es necesario (ORDER BY)
  5. Limitá los resultados si son muchos (LIMIT)

Si seguís estos pasos, nunca te perderás en tus consultas.

Ejercicio: Consulta datos de tu almacén en Luque

1) ¿Qué productos tienen stock menor a 10 unidades? 2) ¿Cuál es el precio promedio de los productos de la categoría 'Alimentos'? 3) Mostrá los 5 productos más caros ordenados de mayor a menor.

  • Tabla 'productos' con columnas: id, nombre, precio, stock, categoria
  • Datos de ejemplo: Yerba (25000, 15, 'Alimentos'), Chipá (2500, 5, 'Alimentos'), Queso (18000, 8, 'Alimentos'), Tereré (3800, 20, 'Bebidas'), Jabón (1200, 30, 'Limpieza')
Solution
  1. Productos con stock bajo — Usá WHERE stock < 10 y ORDER BY stock ASC.
  2. Precio promedio de alimentos — Usá WHERE categoria = 'Alimentos' y agregá la función AVG.
  3. Top 5 productos más caros — Usá ORDER BY precio DESC y LIMIT 5.

→ SELECT nombre, stock FROM productos WHERE stock < 10 ORDER BY stock ASC; SELECT AVG(precio) AS preciopromedio FROM productos WHERE categoria = 'Alimentos'; SELECT nombre, precio FROM productos ORDER BY precio DESC LIMIT 5;

Ordenar y agrupar: ORDER BY, GROUP BY y funciones agregadas

Funciones agregadas y GROUP BY
SELECTfuncionagregada(columna),columnagrupoFROMnombretablaGROUPBYcolumnagrupoORDERBYfuncionagregadaDESC;Funcionesagregadascomunes:COUNT()CuentafilasSUM(columna)SumavaloresAVG(columna)PromedioMAX(columna)Valorma´ximoMIN(columna)Valormı´nimo
Las funciones más útiles para resumir datos.
Ejemplo: Ventas por categoría en Encarnación

La feria de Encarnación quiere saber cuántos productos vende cada categoría para organizar mejor los puestos.

  • Tabla 'productosferia' con columnas: id, nombre, categoria, precio, cantidadvendida
  • Consulta: SELECT categoria, SUM(cantidadvendida) AS totalvendido FROM productosferia GROUP BY categoria ORDER BY totalvendido DESC
  • Resultado: Alimentos (1200 unidades), Bebidas (850 unidades), Artesanías (600 unidades)
  • La feria puede decidir dar más espacio a las categorías más vendidas

Con GROUP BY y SUM, la feria toma decisiones basadas en datos reales de ventas.

FunciónDescripciónEjemplo prácticoResultado
COUNT(*)Cuenta el número de filas¿Cuántos productos hay en total?150
SUM(cantidad)Suma valores numéricos¿Cuántos kg de yerba se vendieron?2500
AVG(precio)Calcula el promedio¿Cuál es el precio promedio de los chipá?2600
MAX(precio)Encuentra el valor máximo¿Cuál es el producto más caro?35000
MIN(precio)Encuentra el valor mínimo¿Cuál es el producto más barato?1200

Ejercicio: Estadísticas de tu almacén en Luque

1) ¿Cuántos productos hay en cada categoría? 2) ¿Cuál es el precio promedio de los productos de limpieza? 3) ¿Cuál es el valor total del inventario (precio * stock)? 4) ¿Cuál es el producto con mayor stock?

  • Tabla 'productos' con columnas: id, nombre, precio, stock, categoria
  • Datos de ejemplo: Yerba (25000, 15, 'Alimentos'), Chipá (2500, 5, 'Alimentos'), Jabón (1200, 30, 'Limpieza'), Tereré (3800, 20, 'Bebidas')
Solution
  1. Cantidad por categoría — Usá COUNT y GROUP BY categoria.
  2. Precio promedio de limpieza — Usá AVG(precio) y WHERE categoria = 'Limpieza'.
  3. Valor total del inventario — Usá SUM(precio * stock).
  4. Producto con mayor stock — Usá MAX(stock) y ORDER BY stock DESC LIMIT 1.

→ SELECT categoria, COUNT(*) AS cantidad FROM productos GROUP BY categoria; SELECT AVG(precio) AS preciopromedio FROM productos WHERE categoria = 'Limpieza'; SELECT SUM(precio * stock) AS valortotal FROM productos; SELECT nombre, stock FROM productos ORDER BY stock DESC LIMIT 1;

Relaciones entre tablas: el poder de las claves foráneas (JOIN)

Analogía: Familias paraguayas y sus relaciones

Pensá en las familias paraguayas: cada familia es una tabla, y los miembros son los registros. La clave primaria sería el apellido de la familia (único para cada familia), y la clave foránea sería el nombre de pila (puede repetirse en diferentes familias). Cuando querés saber todos los miembros de la familia González, usás un JOIN para combinar la tabla de familias con la tabla de miembros.

→ Las claves foráneas son como los lazos familiares que conectan tablas.

Ejemplo: Clientes y pedidos de un restaurante en Asunción

Don Carlos tiene un restaurante en el centro de Asunción y quiere llevar un registro de sus clientes y los pedidos que hacen.

  • Tabla 'clientes': id (clave primaria), nombre, telefono, email
  • Tabla 'pedidos': id (clave primaria), idcliente (clave foránea), fecha, total
  • Consulta para ver todos los pedidos con datos del cliente: SELECT clientes.nombre, pedidos.fecha, pedidos.total FROM clientes JOIN pedidos ON clientes.id = pedidos.idcliente ORDER BY pedidos.fecha DESC
  • Resultado: María González hizo un pedido de 15 000 PYG el 10/08/2024, Juan Martínez hizo un pedido de 22 000 PYG el 09/08/2024

Con JOIN, Don Carlos puede ver el historial completo de cada cliente sin datos repetidos.

Errores comunes con JOIN JOIN es poderoso pero puede ser peligroso si no lo usás correctamente. Estos son los errores que veo más seguido en mis estudiantes:

Ejercicio: Relaciona productos y ventas de tu tienda

Escribí una consulta SQL que muestre el nombre del producto, la cantidad vendida y la fecha de cada venta, ordenado por fecha descendente.

  • Tabla 'productos': id, nombre, precio, stock
  • Tabla 'ventas': id, idproducto, cantidad, fecha
  • Relación: ventas.idproducto = productos.id
Solution
  1. Identificar tablas y claves — productos (clave primaria: id) y ventas (clave foránea: idproducto).
  2. Escribir el JOIN — Usá INNER JOIN para combinar las tablas donde idproducto = id.
  3. Seleccionar columnas y ordenar — Mostrá nombre, cantidad y fecha, ordenado por fecha DESC.

→ SELECT productos.nombre, ventas.cantidad, ventas.fecha FROM productos JOIN ventas ON productos.id = ventas.idproducto ORDER BY ventas.fecha DESC;

Mini-proyecto: Crea tu base de datos de datos paraguayos

  • Elegí un tema real de Paraguay (turismo, ferias, deportes, cultura)
  • Diseñá el esquema de tu base de datos con al menos 3 tablas relacionadas
  • Crea las tablas con DDL (CREATE TABLE)
  • Insertá datos reales usando DML (INSERT)
  • Hacé consultas útiles con DQL (SELECT, JOIN, GROUP BY)
  • Guarda tu proyecto en un archivo .sql para compartirlo
Ejemplo completo: Base de datos de turismo en Encarnación

Una agencia de turismo en Encarnación quiere registrar información sobre los paquetes que vende, los clientes que los compran y los guías que los acompañan.

  • Tabla 'paquetes': id, nombre, precio, duraciondias, destino
  • Tabla 'clientes': id, nombre, telefono, email
  • Tabla 'reservas': id, idpaquete, idcliente, fechareserva, cantidadpersonas
  • Tabla 'guías': id, nombre, especialidad, telefono
  • Relaciones: reservas.idpaquete → paquetes.id, reservas.idcliente → clientes.id
  • Consulta útil: SELECT paquetes.nombre, COUNT(*) AS reservas FROM paquetes JOIN reservas ON paquetes.id = reservas.idpaquete GROUP BY paquetes.nombre ORDER BY reservas DESC

Con esta base de datos, la agencia puede identificar qué paquetes son los más populares y ajustar sus estrategias de marketing.

Ejercicio: Diseña tu propio proyecto con datos paraguayos

1) Diseñá el esquema de tu base de datos con al menos 3 tablas relacionadas. 2) Crea las tablas con CREATE TABLE. 3) Insertá 5 registros en cada tabla. 4) Hacé 3 consultas útiles con SELECT, JOIN y GROUP BY. 5) Guarda todo en un archivo llamado 'proyectotu_nombre.sql'.

FAQ

¿Necesito saber programar para aprender SQL?

No, SQL es un lenguaje de consulta que no requiere conocimientos de programación. Solo necesitas entender lógica básica y practicar con ejemplos concretos como los que te mostré en este curso.

¿Qué base de datos debo instalar para practicar SQL?

Puedes usar bases de datos gratuitas como SQLite (que viene con Python), MySQL o PostgreSQL. Para empezar, SQLite es suficiente porque no requiere configuración compleja. También podés practicar online en sitios como SQLFiddle o DB Fiddle sin instalar nada.

¿Por qué a veces me sale error 'syntax error' en mis consultas?

Los errores de sintaxis son muy comunes y suelen deberse a: olvidar un punto y coma al final de la consulta, usar comillas incorrectas (' en lugar de '), olvidar el WHERE en UPDATE/DELETE, o escribir mal el nombre de una tabla o columna. Siempre revisá tu consulta carácter por carácter y comparala con los ejemplos de este curso.

¿Cómo puedo aplicar SQL en mi vida diaria en Paraguay?

SQL te sirve para gestionar datos de tu negocio (ferias, almacenes, restaurantes), analizar información de redes sociales, crear informes para tu colegio o universidad, e incluso para proyectos personales como registrar gastos o inventarios. Cada vez que trabajás con datos estructurados, SQL es útil.

¿Qué diferencia hay entre SQL y Excel?

Excel es una hoja de cálculo que maneja hasta cientos de miles de filas, pero SQL está diseñado para millones de filas y múltiples tablas relacionadas. Excel es ideal para análisis rápidos y gráficos, mientras que SQL es mejor para gestionar datos complejos y automatizar procesos. Además, SQL permite trabajar con datos en tiempo real y en entornos colaborativos.

¿Dónde puedo encontrar datos reales de Paraguay para practicar?

Puedes usar datos abiertos del gobierno paraguayo en sitios como datos.gov.py, datosabiertos.py o el portal de transparencia. También podés crear tus propios datos simulando situaciones reales como ferias, ventas o inventarios. Lo importante es practicar con datos que te interesen y sean relevantes para tu contexto.

Fuentes

  1. en.wikipedia.org
  2. www.iso.org
  3. www.iana.org
  4. web.archive.org
  5. tools.ietf.org
  6. doi.org
  7. conservancy.umn.edu
  8. citeseerx.ist.psu.edu
  9. api.semanticscholar.org
  10. ui.adsabs.harvard.edu
  11. www.postgresql.org
  12. www.contrib.andrew.cmu.edu
  13. arstechnica.com
  14. hdl.handle.net
  15. books.google.com