Tecnología que te entiende
SQL para principiantes: de cero a consultas avanzadas
Bases de datos

SQL para principiantes: de cero a consultas avanzadas

18 Apr 2026 2 min de lectura 830 vistas

SQL es el lenguaje universal para hablar con bases de datos relacionales. MySQL, PostgreSQL, MariaDB, SQLite — todos hablan SQL (con dialectos). Aprende los fundamentos una vez y funcionan en todos lados.

¿Qué es SQL?

SQL (Structured Query Language) es el lenguaje estándar para crear, leer, actualizar y eliminar datos en bases de datos relacionales. Una base de datos relacional organiza los datos en tablas (como hojas de cálculo relacionadas entre sí por claves).

Crear una base de datos y tablas

-- Crear la base de datos
CREATE DATABASE escuela CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
USE escuela;

-- Crear tabla de alumnos
CREATE TABLE alumnos (
    id          INT AUTO_INCREMENT PRIMARY KEY,
    nombre      VARCHAR(100) NOT NULL,
    email       VARCHAR(150) UNIQUE NOT NULL,
    semestre    TINYINT NOT NULL DEFAULT 1,
    created_at  TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- Crear tabla de materias
CREATE TABLE materias (
    id      INT AUTO_INCREMENT PRIMARY KEY,
    nombre  VARCHAR(100) NOT NULL,
    creditos TINYINT NOT NULL
);

-- Tabla intermedia para la relación muchos-a-muchos
CREATE TABLE inscripciones (
    alumno_id   INT,
    materia_id  INT,
    calificacion DECIMAL(4,2),
    PRIMARY KEY (alumno_id, materia_id),
    FOREIGN KEY (alumno_id) REFERENCES alumnos(id) ON DELETE CASCADE,
    FOREIGN KEY (materia_id) REFERENCES materias(id) ON DELETE CASCADE
);

Insertar datos

-- Un registro
INSERT INTO alumnos (nombre, email, semestre)
VALUES ('Juan Pérez', 'juan@ejemplo.com', 3);

-- Múltiples registros de una sola vez
INSERT INTO materias (nombre, creditos) VALUES
('Redes de Computadoras', 8),
('Ciberseguridad', 6),
('Programación Web', 8),
('Bases de Datos', 6);

Consultar datos: SELECT

-- Todos los campos de todos los alumnos
SELECT * FROM alumnos;

-- Solo campos específicos
SELECT nombre, email FROM alumnos;

-- Con filtro
SELECT * FROM alumnos WHERE semestre = 3;

-- Múltiples condiciones
SELECT * FROM alumnos WHERE semestre >= 3 AND semestre <= 5;

-- Ordenar resultados
SELECT * FROM alumnos ORDER BY nombre ASC;

-- Limitar resultados (paginación)
SELECT * FROM alumnos ORDER BY created_at DESC LIMIT 10 OFFSET 0;

-- Buscar con LIKE (% = cualquier cantidad de caracteres)
SELECT * FROM alumnos WHERE nombre LIKE 'Juan%';

Actualizar y eliminar

-- Actualizar un registro específico (SIEMPRE usa WHERE en UPDATE)
UPDATE alumnos
SET semestre = 4, email = 'nuevo@email.com'
WHERE id = 1;

-- DANGER: UPDATE sin WHERE modifica TODOS los registros
-- UPDATE alumnos SET semestre = 1;  ← NUNCA sin WHERE

-- Eliminar un registro (SIEMPRE usa WHERE en DELETE)
DELETE FROM alumnos WHERE id = 5;

-- Eliminar con condición
DELETE FROM alumnos WHERE semestre = 1 AND created_at < '2024-01-01';

Consultas con JOIN: relacionar tablas

-- Calificaciones de todos los alumnos con nombre de materia
SELECT
    a.nombre AS alumno,
    m.nombre AS materia,
    i.calificacion
FROM inscripciones i
INNER JOIN alumnos a ON i.alumno_id = a.id
INNER JOIN materias m ON i.materia_id = m.id
ORDER BY a.nombre, m.nombre;

-- Promedio de calificaciones por alumno
SELECT
    a.nombre,
    ROUND(AVG(i.calificacion), 2) AS promedio,
    COUNT(i.materia_id) AS materias_cursadas
FROM alumnos a
LEFT JOIN inscripciones i ON a.id = i.alumno_id
GROUP BY a.id, a.nombre
HAVING AVG(i.calificacion) >= 7.0
ORDER BY promedio DESC;

Funciones de agregación

-- Contar registros
SELECT COUNT(*) FROM alumnos;
SELECT COUNT(*) FROM alumnos WHERE semestre = 5;

-- Valores mínimo, máximo, suma y promedio
SELECT
    MIN(calificacion) AS minima,
    MAX(calificacion) AS maxima,
    AVG(calificacion) AS promedio,
    SUM(creditos) AS total_creditos
FROM inscripciones i
JOIN materias m ON i.materia_id = m.id
WHERE i.alumno_id = 1;
⚠️ Las reglas de oro: Siempre usa WHERE en UPDATE y DELETE · Nunca construyas queries concatenando strings con datos del usuario (SQL injection) · Usa prepared statements en el código de tu aplicación · Haz EXPLAIN SELECT... para entender cómo MySQL ejecuta tu query.
"SQL fue diseñado en los años 70 y sigue siendo relevante hoy porque el modelo relacional refleja cómo el mundo real organiza la información."