Saltar al contenido principal
Casi todas las aplicaciones guardan sus datos en una base de datos relacional: la tienda online, el banco, la red social o la secretaría de la universidad. Los datos se organizan en tablas relacionadas entre sí, y se consultan con SQL (Structured Query Language), un lenguaje declarativo: se dice qué datos se quieren y el gestor decide cómo obtenerlos. SQL funciona casi igual en MySQL, PostgreSQL, SQLite, Oracle o SQL Server.

Lo que vas a aprender

  • Qué son las tablas, las filas, las columnas y las claves.
  • Cómo crear tablas y añadir, modificar y borrar datos.
  • Cómo hacer consultas con filtros, orden y límites.
  • Las funciones de agregado y la agrupación.
  • Cómo combinar tablas con JOIN.
  • Subconsultas, índices, normalización y transacciones.

Fundamentos

El modelo relacional

Usaremos este esquema de ejemplo:

Insertar, modificar y borrar

Un UPDATE o DELETE sin WHERE afecta a todas las filas.

Consultar: SELECT

Agregados y agrupación

  • Funciones de agregado: COUNT, SUM, AVG, MIN, MAX.
  • GROUP BY agrupa las filas con el mismo valor y calcula los agregados por grupo.
  • WHERE filtra filas antes de agrupar; HAVING filtra grupos después.

Combinar tablas: JOIN

Orden lógico de ejecución

Aunque se escribe empezando por SELECT, el gestor lo evalúa así: FROM → JOIN → WHERE → GROUP BY → HAVING → SELECT → ORDER BY → LIMIT Por eso no se puede usar en WHERE un alias definido en SELECT, y por eso los agregados van en HAVING.

Subconsultas

Índices

Un índice es una estructura auxiliar (normalmente un árbol B, primo de los árboles AVL) que permite encontrar filas sin recorrer toda la tabla: de O(n)O(n) a O(log⁡n)O(\log n). Acelera las búsquedas y los JOIN, pero ocupa espacio y ralentiza las inserciones.

Normalización

Diseñar las tablas para no repetir información y evitar incoherencias: Si en la tabla notas se guardara también el nombre del alumno, al cambiarlo habría que actualizarlo en muchas filas: eso se evita llevándolo a la tabla alumnos.

Transacciones

Un grupo de operaciones que se ejecutan todas o ninguna:
Cumplen las propiedades ACID: atomicidad, consistencia, aislamiento y durabilidad.

Ejemplos resueltos

Ejemplo 1 · Nota media de cada alumno

Con un INNER JOIN estos alumnos desaparecerían del resultado.
La condición nota >= 5 va en el ON y no en el WHERE para no perder a los alumnos sin aprobados. COALESCE cambia el NULL por 0.

Errores frecuentes

  • UPDATE o DELETE sin WHERE. Prueba antes la condición con un SELECT.
  • Comparar con = NULL. Se usa IS NULL: NULL = NULL no es verdadero.
  • Poner un agregado en WHERE. Va en HAVING.
  • Seleccionar columnas que no están en el GROUP BY ni en un agregado.
  • Construir consultas concatenando texto del usuario. Abre la puerta a la inyección SQL; usa siempre consultas parametrizadas.
  • Olvidar la condición del JOIN: sale el producto cartesiano.

Preguntas frecuentes

Las bases de datos relacionales son la opción por defecto cuando los datos tienen estructura y relaciones, y hace falta consistencia (bancos, gestión, comercio). Las NoSQL (MongoDB, Redis, Cassandra) se usan para datos sin esquema fijo, cachés o volúmenes enormes repartidos en muchas máquinas, a cambio de menos garantías.
SQLite viene incluido en Python (import sqlite3) y no necesita instalar un servidor. Para algo más completo, PostgreSQL es gratuito y el más fiel al estándar.

Temas relacionados

Fundamentos de Python

Usar SQLite desde Python.

Tablas hash

Índices hash para buscar por igualdad.

Lógica proposicional

AND, OR y NOT en las condiciones.
Última modificación el 12 de octubre de 2026