0% encontró este documento útil (0 votos)
4 vistas7 páginas

SQL Programadores

El documento es una guía práctica sobre SQL para programadores, que cubre conceptos como consultas, relaciones, agregaciones, índices y migraciones con ejemplos claros y ejercicios. Se enfoca en la aplicación práctica de SQL, proporcionando fragmentos de código y patrones de trabajo para evitar errores comunes. Además, sugiere un enfoque activo de aprendizaje mediante la modificación de ejemplos para facilitar la comprensión y la práctica inmediata.

Cargado por

Andres Morales
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
4 vistas7 páginas

SQL Programadores

El documento es una guía práctica sobre SQL para programadores, que cubre conceptos como consultas, relaciones, agregaciones, índices y migraciones con ejemplos claros y ejercicios. Se enfoca en la aplicación práctica de SQL, proporcionando fragmentos de código y patrones de trabajo para evitar errores comunes. Además, sugiere un enfoque activo de aprendizaje mediante la modificación de ejemplos para facilitar la comprensión y la práctica inmediata.

Cargado por

Andres Morales
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

SQL para programadores

SQL para programadores


Consultas, relaciones, agregaciones, índices y migraciones explicadas con
ejemplos.

Qué encontrarás
Una guía práctica, compacta y original. Está diseñada para leerse rápido, copiar ejemplos, adaptarlos
y usarlos como punto de partida en proyectos reales.
- Conceptos explicados en lenguaje directo.

- Fragmentos de código pequeños y verificables.

- Patrones de trabajo que ayudan a evitar errores comunes.

- Ejercicios breves para practicar inmediatamente.

Uso recomendado
Lee un capítulo, ejecuta el ejemplo y cambia una variable o condición. Esa pequeña modificación
convierte la lectura pasiva en práctica real.

Contenido original de programación para estudio y práctica Página 1


SQL para programadores

1. Pensar en tablas, filas y relaciones


SQL no es solo sintaxis para consultar datos. Es una forma de modelar información con reglas claras:
entidades, atributos, relaciones y restricciones.

Modelo básico
CREATE TABLE usuarios (
id INTEGER PRIMARY KEY,
email TEXT NOT NULL UNIQUE,
nombre TEXT NOT NULL,
creado_en TIMESTAMP NOT NULL
);

CREATE TABLE ordenes (


id INTEGER PRIMARY KEY,
usuario_id INTEGER NOT NULL REFERENCES usuarios(id),
total NUMERIC NOT NULL,
estado TEXT NOT NULL
);

Restricciones que protegen datos


- PRIMARY KEY identifica cada fila.

- FOREIGN KEY evita referencias huérfanas.

- NOT NULL impide datos incompletos donde no tienen sentido.

- UNIQUE evita duplicados lógicos como emails repetidos.

Un buen esquema evita errores antes de que entren a la aplicación. No delegues toda la integridad al
código.

Ejercicio sugerido
Diseña dos tablas: productos y categorias. Agrega clave primaria, clave foránea y una restricción para que
el nombre de producto no sea nulo.

Contenido original de programación para estudio y práctica Página 2


SQL para programadores

2. SELECT, filtros y ordenamiento


La mayoría del trabajo diario empieza con SELECT. Dominar filtros, alias, ordenamiento y límites
permite explorar datos sin alterar nada.

Consulta base
SELECT id, email, creado_en
FROM usuarios
WHERE creado_en >= '2026-01-01'
ORDER BY creado_en DESC
LIMIT 50;

Operadores comunes
Operador Uso

=, <>, >, < Comparaciones directas

LIKE Búsqueda por patrón

IN Lista de valores aceptados

BETWEEN Rango inclusivo

IS NULL Valores ausentes

Evitar trampas
- NULL no se compara con =; usa IS NULL.

- ORDER BY es necesario si esperas orden estable.

- LIMIT sin ORDER BY puede devolver resultados impredecibles.

- Selecciona columnas necesarias; evita SELECT * en código de aplicación.


SELECT nombre
FROM productos
WHERE categoria_id IN (1, 2, 3)
AND eliminado_en IS NULL
ORDER BY nombre ASC;

Ejercicio sugerido
Escribe una consulta que devuelva los 10 productos más caros de una categoría activa.

Contenido original de programación para estudio y práctica Página 3


SQL para programadores

3. JOINs sin confusión


Los JOINs combinan filas relacionadas. La pregunta clave es: ¿quiero solo coincidencias o también
filas sin relación?

INNER JOIN
SELECT [Link], [Link], [Link]
FROM usuarios u
JOIN ordenes o ON o.usuario_id = [Link]
WHERE [Link] = 'pagada';

LEFT JOIN
SELECT [Link], COUNT([Link]) AS cantidad_ordenes
FROM usuarios u
LEFT JOIN ordenes o ON o.usuario_id = [Link]
GROUP BY [Link], [Link];

Cuándo usar cada uno


Necesidad JOIN

Solo usuarios con órdenes INNER JOIN

Todos los usuarios aunque no compraron LEFT JOIN

Detectar huérfanos o faltantes LEFT JOIN + IS NULL

Si un LEFT JOIN se comporta como INNER JOIN, revisa si pusiste condiciones de la tabla derecha en WHERE
en vez de ON.

Ejercicio sugerido
Consulta todas las categorías y la cantidad de productos en cada una, incluyendo categorías sin productos.

Contenido original de programación para estudio y práctica Página 4


SQL para programadores

4. Agregaciones y métricas confiables


COUNT, SUM y AVG parecen simples, pero pueden mentir si duplicas filas con JOINs o mezclas niveles
de agrupación.

GROUP BY básico
SELECT estado, COUNT(*) AS cantidad, SUM(total) AS total_ventas
FROM ordenes
GROUP BY estado
ORDER BY cantidad DESC;

Filtrar grupos con HAVING


SELECT usuario_id, COUNT(*) AS ordenes
FROM ordenes
GROUP BY usuario_id
HAVING COUNT(*) >= 3;

Cuidado con duplicación


Si unes ordenes con items, una orden con 5 items aparece 5 veces. Para contar órdenes únicas usa
COUNT(DISTINCT [Link]) o agrupa antes de unir.
SELECT [Link], COUNT(DISTINCT [Link]) AS ordenes
FROM usuarios u
JOIN ordenes o ON o.usuario_id = [Link]
JOIN orden_items i ON i.orden_id = [Link]
GROUP BY [Link];

- Define primero el grano: una fila por usuario, orden, item o día.

- Agrega después de filtrar datos irrelevantes.

- Usa nombres claros para métricas calculadas.

- Valida métricas con ejemplos manuales pequeños.

Ejercicio sugerido
Calcula ventas por día y estado. Luego agrega una condición HAVING para mostrar solo días con más de 10
órdenes.

Contenido original de programación para estudio y práctica Página 5


SQL para programadores

5. Índices y rendimiento básico


Un índice acelera búsquedas, pero también ocupa espacio y hace más costosas algunas escrituras.
No se agregan por intuición, se agregan por consultas reales.

Índice simple
CREATE INDEX idx_ordenes_usuario_id ON ordenes(usuario_id);
CREATE INDEX idx_ordenes_estado ON ordenes(estado);

Índice compuesto
CREATE INDEX idx_ordenes_estado_creado
ON ordenes(estado, creado_en);

Reglas prácticas
- Indexa claves foráneas usadas en JOINs frecuentes.

- Indexa columnas usadas en filtros selectivos.

- El orden importa en índices compuestos.

- No indexes columnas con muy pocos valores si la consulta no gana selectividad.

EXPLAIN
Usa el plan de ejecución de tu motor para confirmar si el índice se usa. El nombre exacto y salida
varían entre PostgreSQL, MySQL y SQLite, pero el objetivo es el mismo: entender cómo se buscarán
las filas.
EXPLAIN
SELECT *
FROM ordenes
WHERE estado = 'pagada'
ORDER BY creado_en DESC;

Ejercicio sugerido
Imagina una tabla logs con millones de filas. Propón un índice para consultar por servicio y fecha.

Contenido original de programación para estudio y práctica Página 6


SQL para programadores

6. Transacciones y migraciones
Una transacción agrupa operaciones para que se confirmen juntas o se deshagan juntas. Las
migraciones permiten versionar cambios de esquema como parte del código.

Transacción conceptual
BEGIN;

UPDATE cuentas SET saldo = saldo - 100 WHERE id = 1;


UPDATE cuentas SET saldo = saldo + 100 WHERE id = 2;

COMMIT;
-- ROLLBACK si algo falla antes de confirmar

Migración simple
-- 001_add_estado_to_ordenes.sql
ALTER TABLE ordenes ADD COLUMN estado TEXT NOT NULL DEFAULT 'pendiente';

CREATE INDEX idx_ordenes_estado ON ordenes(estado);

Buenas prácticas
- Cada migración debe ser pequeña y revisable.

- Evita cambios destructivos sin plan de reversa o respaldo.

- Prueba migraciones con datos parecidos a producción.

- Coordina cambios de esquema con despliegues de aplicación.

Una migración es código de producción. Debe revisarse, probarse y ejecutarse de forma repetible.

Ejercicio sugerido
Escribe una migración que agregue columna sku a productos y asegure que sea única cuando tenga valor.

Contenido original de programación para estudio y práctica Página 7

También podría gustarte