Notebook interactivo para aprender SQL desde cero. Cubre DDL, DML, JOINs, subconsultas, window functions, CTEs, transacciones y diseno de bases de datos. Motor: PostgreSQL 16 via Docker.
- Python 3.13 instalado
uvinstalado (instrucciones)- Docker Desktop instalado (ver seccion siguiente)
- VS Code con extension Jupyter (
ms-toolsai.jupyter)
Ir a: https://www.docker.com/products/docker-desktop/
Hacer clic en "Download for Windows".
- Ejecutar el instalador descargado
- Cuando pregunte, dejar marcado "Use WSL 2 instead of Hyper-V" (recomendado)
- Completar la instalacion y reiniciar Windows si lo solicita
- Abrir Docker Desktop y esperar a que el icono en la barra de tareas quede en verde ("Engine running")
Abrir una terminal (CMD, PowerShell o terminal de VS Code) y ejecutar:
docker --versionDebe mostrar algo como Docker version 26.x.x.
Abrir una terminal dentro de la carpeta del proyecto y ejecutar:
uv add psycopg[binary] sqlalchemy ipykernelEn la raiz del proyecto ya existe el archivo docker-compose.yml.
Ejecutar:
docker compose up -dVerificar que el contenedor este corriendo:
docker psDebe aparecer sql_aprendizaje_db con status Up.
# Detener la base de datos (los datos se conservan)
docker compose down
# Levantar nuevamente
docker compose up -d
# Ver logs de PostgreSQL
docker logs sql_aprendizaje_db
# Eliminar todo incluyendo datos (reset completo)
docker compose down -v- Abrir VS Code en la carpeta del proyecto
- Abrir el notebook segun el tema a trabajar (ver seccion 7)
- Seleccionar el kernel:
Ctrl+Shift+P→ Jupyter: Select Kernel → Python Environments → seleccionar el.venvdel proyecto - Ejecutar las celdas de la seccion 0 para verificar la conexion
Definidas en docker-compose.yml, ya configuradas en los notebooks:
| Parametro | Valor |
|---|---|
| Host | localhost |
| Puerto | 5433 |
| Base de datos | ecommerce |
| Usuario | alumno |
| Contrasena | alumno123 |
sql-aprendizaje/
├── README.md # Este archivo
├── docker-compose.yml # Configuracion de PostgreSQL
├── sql_psycopg.ipynb # SQL puro con psycopg v3
├── sql_sqlalchemy.ipynb # ORM y Core con SQLAlchemy 2
├── sql_avanzado.ipynb # Temas avanzados con psycopg y SQLAlchemy
└── pyproject.toml # Dependencias del proyecto (generado por uv)
| Seccion | Temas |
|---|---|
| 01 — Fundamentos | DDL vs DML vs DCL, tipos de datos, CREATE TABLE |
| 02 — Constraints | PK, FK, UNIQUE, NOT NULL, DEFAULT, CHECK |
| 03 — CRUD | INSERT, SELECT, UPDATE, DELETE |
| 04 — Filtros | WHERE, operadores, BETWEEN, IN, LIKE, NULL |
| 05 — Agregacion | GROUP BY, HAVING, COUNT, SUM, AVG, MIN, MAX |
| 06 — JOINs | INNER, LEFT, RIGHT, FULL, SELF JOIN, CROSS JOIN |
| 07 — Subconsultas | Escalares, correlacionadas, IN/EXISTS |
| 08 — Normalizacion | 1NF, 2NF, 3NF — teoria y ejercicios |
| Seccion | Temas |
|---|---|
| 00 — Conexion | Engine, Session, text(), ejecutar_query() |
| 01 — DDL con Core | MetaData, Table, Column, tipos, constraints, create_all |
| 02 — INSERT con Core | insert(), executemany, returning() |
| 03 — SELECT con Core | select(), where(), join(), group_by(), having(), func |
| 04 — Modelos ORM | DeclarativeBase, Mapped, mapped_column, relationship |
| 05 — CRUD con ORM | session.add(), session.get(), update(), delete(), manejo de errores |
| 06 — Consultas avanzadas | Filtros, joins, subconsultas con ORM |
| 07 — Eager vs Lazy loading | selectinload, joinedload, lazy loading |
| 08 — Transacciones | Session, commit, rollback, savepoint |
| 09 — Migraciones | Alembic: init, revision, upgrade, downgrade |
| Seccion | Temas |
|---|---|
| 09 — Indices | Por que existen, cuando usarlos, EXPLAIN ANALYZE |
| 10 — Window Functions | ROW_NUMBER, RANK, DENSE_RANK, LAG, LEAD, PARTITION BY |
| 11 — CTEs | WITH, CTEs recursivas |
| 12 — Transacciones | ACID, COMMIT, ROLLBACK, SAVEPOINT |
| 13 — Vistas | CREATE VIEW, casos de uso |
Cada seccion muestra el mismo concepto implementado con ambas librerias para comparar el enfoque de SQL puro vs la abstraccion de SQLAlchemy.
- El schema simula un sistema de e-commerce (clientes, productos, categorias, pedidos) para que los ejercicios tengan sentido de negocio real.
- Cada seccion incluye explicacion en Markdown, query comentado y resultado visible.
sql_psycopg.ipynb— SQL puro, control total, mas cercano al motor.sql_sqlalchemy.ipynb— abstraccion ORM, orientado a uso en aplicaciones Python.sql_avanzado.ipynb— comparacion lado a lado de ambos enfoques en temas avanzados.