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
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 BYagrupa las filas con el mismo valor y calcula los agregados por grupo.WHEREfiltra filas antes de agrupar;HAVINGfiltra grupos después.
Combinar tablas: JOIN
Orden lógico de ejecución
Aunque se escribe empezando porSELECT, 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 a . 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:Ejemplos resueltos
Ejemplo 1 · Nota media de cada alumno
Ejemplo 1 · Nota media de cada alumno
Ejemplo 2 · Alumnos sin ninguna nota (LEFT JOIN)
Ejemplo 2 · Alumnos sin ninguna nota (LEFT JOIN)
INNER JOIN estos alumnos desaparecerían del resultado.Ejemplo 3 · Asignaturas con más de 10 aprobados
Ejemplo 3 · Asignaturas con más de 10 aprobados
Ejemplo 4 · Créditos aprobados por alumno
Ejemplo 4 · Créditos aprobados por alumno
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
UPDATEoDELETEsinWHERE. Prueba antes la condición con unSELECT.- Comparar con
= NULL. Se usaIS NULL:NULL = NULLno es verdadero. - Poner un agregado en
WHERE. Va enHAVING. - Seleccionar columnas que no están en el
GROUP BYni 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
¿SQL o NoSQL?
¿SQL o NoSQL?
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.
¿Con qué practico?
¿Con qué practico?
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.