Que es SQL y por que es importante
SQL (Structured Query Language) es el lenguaje estandar para comunicarte con bases de datos relacionales. Si cursas Sistemas, Ingenieria, Administracion o cualquier carrera que tenga materias como "Bases de Datos" o "Gestion de Datos", SQL es una herramienta que si o si vas a tener que aprender.
A diferencia de otros lenguajes de programacion, SQL es declarativo: le decis a la base de datos QUE queres obtener, no COMO obtenerlo. Esto lo hace bastante intuitivo una vez que entendes la logica basica.
En este tutorial vas a aprender las consultas fundamentales de SQL con ejemplos practicos usando una base de datos de ejemplo. Al terminar, vas a poder hacer consultas SELECT, filtrar datos, ordenarlos, agruparlos y hasta hacer JOINs entre tablas.
Configurar tu entorno de practica
Antes de escribir tu primera consulta, necesitas un lugar donde practicar. Te recomendamos estas opciones, de la mas simple a la mas completa:
Opcion 1: Online (sin instalar nada)
- SQLite Online (sqliteonline.com): Abris el navegador y ya podes escribir consultas. Ideal para empezar rapido.
- DB Fiddle (db-fiddle.com): Te permite elegir entre MySQL, PostgreSQL y SQLite. Podes compartir tus consultas con un link.
Opcion 2: Instalar MySQL + MySQL Workbench
Descarga MySQL Community Server
Anda a dev.mysql.com/downloads y descarga el instalador de MySQL Community Server. Es gratuito.
Instala MySQL
Segui el asistente de instalacion. Cuando te pida una contraseña para root, elegí una que te acuerdes y anotala.
Descarga MySQL Workbench
Es la interfaz grafica para administrar MySQL. Se descarga por separado desde la misma pagina de MySQL.
Conectate al servidor
Abrí MySQL Workbench, hacele click en la conexion local y escribí la contraseña de root. Ya estas listo para practicar.
Crear la base de datos de ejemplo
Para este tutorial vamos a usar una base de datos simple de una tienda. Copia y ejecuta este SQL para crearla:
-- Crear la base de datos
CREATE DATABASE tienda;
USE tienda;
-- Tabla de clientes
CREATE TABLE clientes (
id INT PRIMARY KEY AUTO_INCREMENT,
nombre VARCHAR(100) NOT NULL,
email VARCHAR(100),
ciudad VARCHAR(50),
fecha_registro DATE
);
-- Tabla de productos
CREATE TABLE productos (
id INT PRIMARY KEY AUTO_INCREMENT,
nombre VARCHAR(100) NOT NULL,
precio DECIMAL(10,2),
categoria VARCHAR(50),
stock INT DEFAULT 0
);
-- Tabla de ventas
CREATE TABLE ventas (
id INT PRIMARY KEY AUTO_INCREMENT,
cliente_id INT,
producto_id INT,
cantidad INT,
fecha DATE,
FOREIGN KEY (cliente_id) REFERENCES clientes(id),
FOREIGN KEY (producto_id) REFERENCES productos(id)
);
-- Insertar datos de ejemplo
INSERT INTO clientes (nombre, email, ciudad, fecha_registro) VALUES
('Maria Garcia', 'maria@email.com', 'Buenos Aires', '2025-01-15'),
('Juan Lopez', 'juan@email.com', 'Cordoba', '2025-02-20'),
('Ana Martinez', 'ana@email.com', 'Rosario', '2025-03-10'),
('Carlos Rodriguez', 'carlos@email.com', 'Buenos Aires', '2025-04-05'),
('Laura Fernandez', 'laura@email.com', 'Mendoza', '2025-05-12');
INSERT INTO productos (nombre, precio, categoria, stock) VALUES
('Notebook HP', 450000.00, 'Tecnologia', 15),
('Mouse Logitech', 25000.00, 'Accesorios', 50),
('Teclado Mecanico', 45000.00, 'Accesorios', 30),
('Monitor Samsung', 280000.00, 'Tecnologia', 8),
('Auriculares Sony', 65000.00, 'Audio', 25);
INSERT INTO ventas (cliente_id, producto_id, cantidad, fecha) VALUES
(1, 1, 1, '2025-06-01'),
(1, 2, 2, '2025-06-01'),
(2, 3, 1, '2025-06-15'),
(3, 1, 1, '2025-07-01'),
(4, 4, 1, '2025-07-10'),
(5, 5, 3, '2025-07-20'),
(2, 2, 1, '2025-08-01'),
(3, 3, 2, '2025-08-15');
SELECT: Tu primera consulta
La instruccion SELECT es el corazon de SQL. Se usa para consultar (leer) datos de una o mas tablas. La estructura basica es:
-- Seleccionar TODAS las columnas de una tabla
SELECT * FROM clientes;
-- Seleccionar columnas especificas
SELECT nombre, email FROM clientes;
-- Darle un alias a las columnas
SELECT nombre AS "Nombre Completo", email AS "Correo"
FROM clientes;
SELECT * en produccion o en trabajos avanzados. Selecciona solo las columnas que necesites. Esto mejora el rendimiento y deja mas claro que datos estas consultando.
WHERE: Filtrar datos
La clausula WHERE te permite filtrar los resultados segun una condicion. Es como ponerle un filtro a tu consulta:
-- Clientes de Buenos Aires
SELECT * FROM clientes
WHERE ciudad = 'Buenos Aires';
-- Productos con precio mayor a 50000
SELECT nombre, precio FROM productos
WHERE precio > 50000;
-- Productos de la categoria Tecnologia con stock mayor a 10
SELECT * FROM productos
WHERE categoria = 'Tecnologia' AND stock > 10;
-- Clientes de Buenos Aires O Cordoba
SELECT * FROM clientes
WHERE ciudad = 'Buenos Aires' OR ciudad = 'Cordoba';
-- Clientes registrados en 2025 (usando BETWEEN)
SELECT * FROM clientes
WHERE fecha_registro BETWEEN '2025-01-01' AND '2025-12-31';
-- Buscar por patron de texto (LIKE)
SELECT * FROM clientes
WHERE nombre LIKE 'M%'; -- Nombres que empiezan con M
SELECT * FROM clientes
WHERE email LIKE '%@email.com'; -- Emails de email.com
-- Verificar si un valor esta en una lista (IN)
SELECT * FROM clientes
WHERE ciudad IN ('Buenos Aires', 'Rosario', 'Mendoza');
ORDER BY y LIMIT: Ordenar y limitar resultados
Estas clausulas te permiten controlar el orden y la cantidad de resultados:
-- Ordenar productos por precio (menor a mayor)
SELECT * FROM productos
ORDER BY precio ASC;
-- Ordenar por precio de mayor a menor
SELECT * FROM productos
ORDER BY precio DESC;
-- Ordenar por categoria y dentro de cada categoria por precio
SELECT * FROM productos
ORDER BY categoria, precio DESC;
-- Los 3 productos mas caros
SELECT * FROM productos
ORDER BY precio DESC
LIMIT 3;
-- Saltear los primeros 2 y mostrar los siguientes 3 (paginacion)
SELECT * FROM productos
ORDER BY precio DESC
LIMIT 3 OFFSET 2;
Funciones de agregacion: COUNT, SUM, AVG, MAX, MIN
Las funciones de agregacion resumen datos de multiples filas en un solo valor. Son esenciales para cualquier analisis de datos:
-- Contar cuantos clientes hay
SELECT COUNT(*) AS total_clientes FROM clientes;
-- Contar clientes por ciudad
SELECT ciudad, COUNT(*) AS cantidad
FROM clientes
GROUP BY ciudad;
-- Sumar el stock total de productos
SELECT SUM(stock) AS stock_total FROM productos;
-- Precio promedio de los productos
SELECT AVG(precio) AS precio_promedio FROM productos;
-- Producto mas caro y mas barato
SELECT MAX(precio) AS mas_caro, MIN(precio) AS mas_barato
FROM productos;
-- Precio promedio por categoria
SELECT categoria, AVG(precio) AS precio_promedio, COUNT(*) AS cantidad
FROM productos
GROUP BY categoria;
-- Categorias con precio promedio mayor a 100000
SELECT categoria, AVG(precio) AS precio_promedio
FROM productos
GROUP BY categoria
HAVING AVG(precio) > 100000;
WHERE filtra filas individuales ANTES de agrupar. HAVING filtra grupos DESPUES de agrupar. Si queres filtrar por una funcion de agregacion (como AVG o SUM), tenes que usar HAVING.
JOIN: Combinar tablas
El JOIN es probablemente el concepto mas importante de SQL. Te permite combinar datos de dos o mas tablas usando una columna en comun. Hay varios tipos:
INNER JOIN
Devuelve solo las filas que tienen coincidencia en ambas tablas:
-- Ventas con nombre del cliente y nombre del producto
SELECT
v.id AS venta_id,
c.nombre AS cliente,
p.nombre AS producto,
v.cantidad,
v.fecha
FROM ventas v
INNER JOIN clientes c ON v.cliente_id = c.id
INNER JOIN productos p ON v.producto_id = p.id;
-- Total gastado por cada cliente
SELECT
c.nombre AS cliente,
SUM(p.precio * v.cantidad) AS total_gastado
FROM ventas v
INNER JOIN clientes c ON v.cliente_id = c.id
INNER JOIN productos p ON v.producto_id = p.id
GROUP BY c.nombre
ORDER BY total_gastado DESC;
LEFT JOIN
Devuelve todas las filas de la tabla izquierda, aunque no tengan coincidencia en la derecha:
-- Todos los clientes, incluso los que no compraron nada
SELECT
c.nombre AS cliente,
COUNT(v.id) AS total_compras
FROM clientes c
LEFT JOIN ventas v ON c.id = v.cliente_id
GROUP BY c.nombre;
RIGHT JOIN
Es lo mismo pero al reves: devuelve todas las filas de la tabla derecha. En la practica se usa menos porque siempre podes reordenar las tablas y usar LEFT JOIN.
INSERT, UPDATE y DELETE: Modificar datos
Ademas de consultar, SQL te permite agregar, modificar y eliminar datos:
INSERT: Agregar registros
-- Insertar un nuevo cliente
INSERT INTO clientes (nombre, email, ciudad, fecha_registro)
VALUES ('Pedro Gomez', 'pedro@email.com', 'Tucuman', '2025-09-01');
-- Insertar multiples registros de una vez
INSERT INTO clientes (nombre, email, ciudad, fecha_registro) VALUES
('Sofia Diaz', 'sofia@email.com', 'Salta', '2025-09-15'),
('Lucas Ruiz', 'lucas@email.com', 'Buenos Aires', '2025-10-01');
UPDATE: Modificar registros
-- Actualizar el email de un cliente
UPDATE clientes
SET email = 'maria.garcia@email.com'
WHERE id = 1;
-- Aumentar el precio de todos los productos de Tecnologia un 10%
UPDATE productos
SET precio = precio * 1.10
WHERE categoria = 'Tecnologia';
DELETE: Eliminar registros
-- Eliminar un cliente especifico
DELETE FROM clientes
WHERE id = 7;
-- Eliminar todos los productos sin stock
DELETE FROM productos
WHERE stock = 0;
WHERE cuando uses UPDATE o DELETE. Si la olvidas, vas a modificar o borrar TODOS los registros de la tabla. Antes de ejecutar un DELETE, probá la condicion con un SELECT para verificar que afecta las filas correctas.
Subconsultas
Una subconsulta es una consulta dentro de otra consulta. Son muy utiles para resolver problemas complejos paso a paso:
-- Clientes que compraron el producto mas caro
SELECT c.nombre
FROM clientes c
INNER JOIN ventas v ON c.id = v.cliente_id
WHERE v.producto_id = (
SELECT id FROM productos
ORDER BY precio DESC
LIMIT 1
);
-- Productos con precio mayor al promedio
SELECT nombre, precio
FROM productos
WHERE precio > (SELECT AVG(precio) FROM productos);
-- Clientes que hicieron al menos una compra
SELECT nombre FROM clientes
WHERE id IN (SELECT DISTINCT cliente_id FROM ventas);
Ejercicios para practicar
La mejor forma de aprender SQL es practicando. Aca tenes algunos ejercicios para resolver con la base de datos que creamos. Intenta resolverlos antes de mirar la solucion:
- Listado de productos: Mostra el nombre y precio de todos los productos ordenados de mas barato a mas caro.
- Clientes de Buenos Aires: Lista los nombres y emails de los clientes que viven en Buenos Aires.
- Ventas de junio 2025: Mostra todas las ventas realizadas en junio de 2025 con el nombre del cliente y del producto.
- Total por categoria: Calcula el valor total del inventario (precio x stock) de cada categoria de producto.
- Cliente estrella: Encontra al cliente que gasto mas dinero en total.
Conclusion
Si llegaste hasta aca, ya tenes las bases solidas de SQL que necesitas para tus trabajos universitarios. Repasemos lo que aprendiste:
- SELECT para consultar datos de una tabla
- WHERE para filtrar con condiciones
- ORDER BY y LIMIT para ordenar y paginar
- Funciones de agregacion (COUNT, SUM, AVG, MAX, MIN) con GROUP BY
- JOIN para combinar datos de multiples tablas
- INSERT, UPDATE, DELETE para modificar datos
- Subconsultas para resolver problemas complejos
SQL es un lenguaje que se aprende practicando. Cuantas mas consultas escribas, mas natural te va a resultar. No tengas miedo de experimentar y romper cosas en tu base de datos de practica, para eso esta.