Base necesaria para construir consultas y resolver un CRUD en aplicaciones web.
SQL (Structured Query Language) es el lenguaje estándar para consultar y manipular información en una base de datos relacional.
Hay distintos motores (MySQL, MariaDB, PostgreSQL, SQL Server). En la web es muy común trabajar con MySQL/MariaDB. La sintaxis base es muy parecida entre motores, pero puede haber diferencias en detalles.
usuarios, productos).nombre, precio).id autoincrement).ventas.usuario_id → usuarios.id).CRUD son las 4 operaciones básicas para manejar datos:
INSERTSELECTUPDATEDELETEUPDATE o DELETE, prueba el WHERE con un SELECT.
Sintaxis base:
SELECT columna1, columna2
FROM tabla;
Ejemplo:
SELECT nombre, correo
FROM usuarios;
SELECT * trae todas las columnas:
SELECT *
FROM usuarios;
SELECT id, nombre, edad
FROM usuarios
WHERE activo = 1 AND edad >= 18;
LIKE para buscar texto:
SELECT id, nombre
FROM usuarios
WHERE nombre LIKE 'Al%'; -- empieza con Al
SELECT id, nombre
FROM usuarios
WHERE nombre LIKE '%art%'; -- contiene art
IN para varios valores:
SELECT id, nombre
FROM usuarios
WHERE id IN (1, 3, 7);
SELECT id, nombre
FROM usuarios
WHERE activo = 1
ORDER BY id DESC
LIMIT 10;
Sirve para renombrar columnas en el resultado (no cambia la tabla real):
SELECT nombre AS NombreCompleto, correo AS Email
FROM usuarios;
INSERT INTO usuarios (nombre, correo, edad, activo)
VALUES ('Ana', 'ana@mail.com', 20, 1);
UPDATE usuarios
SET edad = 21
WHERE id = 5;
DELETE FROM usuarios
WHERE id = 5;
activo = 0) en lugar de borrar físicamente.
CREATE TABLE define la estructura de una tabla: columnas, tipos de dato, llaves y reglas.
CREATE TABLE usuarios (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
nombre VARCHAR(120) NOT NULL,
correo VARCHAR(150) NOT NULL UNIQUE,
edad TINYINT UNSIGNED,
activo TINYINT(1) NOT NULL DEFAULT 1,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
Tipos comunes en MySQL: INT, VARCHAR(n), TEXT, DECIMAL(10,2),
DATE, DATETIME, TIMESTAMP, TINYINT(1).
Agregar una columna:
ALTER TABLE usuarios
ADD COLUMN telefono VARCHAR(20) NULL;
Agregar una columna con valor por defecto:
ALTER TABLE usuarios
ADD COLUMN rol VARCHAR(30) NOT NULL DEFAULT 'alumno';
Modificar tipo de dato de una columna:
ALTER TABLE usuarios
MODIFY COLUMN nombre VARCHAR(180) NOT NULL;
Renombrar una columna (MySQL 8+):
ALTER TABLE usuarios
RENAME COLUMN correo TO email;
Resuelve cada ejercicio escribiendo la consulta. Luego revisa la respuesta.
Ejercicio 1: En usuarios, muestra id, nombre y edad de usuarios
con edad >= 18, ordenados por edad de mayor a menor.
SELECT id, nombre, edad
FROM usuarios
WHERE edad >= 18
ORDER BY edad DESC;
Ejercicio 2: En productos, muestra nombre y precio usando alias:
Producto y PrecioMXN.
SELECT nombre AS Producto, precio AS PrecioMXN
FROM productos;
Ejercicio 3: Inserta un producto en productos con:
nombre = "Mouse", precio = 199.00, stock = 15.
INSERT INTO productos (nombre, precio, stock)
VALUES ('Mouse', 199.00, 15);
Ejercicio 4: Actualiza usuarios para poner activo = 0 al registro
cuyo correo sea "ana@mail.com".
UPDATE usuarios
SET activo = 0
WHERE correo = 'ana@mail.com';
Ejercicio 5: Crea una tabla llamada tareas con:
id autoincrement primary key, titulo varchar(120) not null,
puntos tinyint unsigned not null default 10, activo tinyint(1) default 1.
CREATE TABLE tareas (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
titulo VARCHAR(120) NOT NULL,
puntos TINYINT UNSIGNED NOT NULL DEFAULT 10,
activo TINYINT(1) NOT NULL DEFAULT 1
);
Ejercicio 6: A la tabla tareas, agrega una columna fecha_entrega
tipo DATE que pueda ser NULL.
ALTER TABLE tareas
ADD COLUMN fecha_entrega DATE NULL;
SELECT con el WHERE correcto. WHERE en UPDATE o DELETE.