Structured Query Language - Taller Interactivo PILARES
¿Qué es SQL?
📖 Definición
SQL (Structured Query Language) es el lenguaje estándar para comunicarnos con bases de datos relacionales. Permite crear, leer, actualizar y eliminar información de forma estructurada.
💡 Dato Histórico: SQL fue creado por IBM en la década de 1970 con el nombre SEQUEL. En 1986 se convirtió en estándar ANSI y en 1987 en estándar ISO.
🎯 ¿Para qué sirve SQL?
Consultar Datos
Buscar y filtrar información específica de millones de registros
Modificar Datos
Actualizar, insertar o eliminar información en las tablas
Crear Estructuras
Diseñar bases de datos, tablas, índices y relaciones
Controlar Acceso
Gestionar permisos y seguridad de la información
🌐 Aplicaciones del SQL
Sitios Web: Facebook, Instagram, Twitter usan SQL para gestionar usuarios y publicaciones
E-commerce: Amazon, Mercado Libre manejan productos, pedidos y clientes
Banca: Transacciones, cuentas, movimientos bancarios
Telecomunicaciones: Registro de llamadas, facturación, clientes
⚠️ IMPORTANTE: Siempre usa WHERE en UPDATE, o actualizarás TODOS los registros de la tabla.
DELETE - Eliminar Datos
Eliminar un registro específico
DELETE FROM estudiantes
WHERE id_estudiante = 10;
Eliminar con condición
DELETE FROM estudiantes
WHERE fecha_nacimiento < '2000-01-01';
⚠️ PELIGRO: DELETE sin WHERE elimina TODOS los registros. Usa siempre una condición.
🔍 Patrones con LIKE
Patrón
Significado
Ejemplo
%
Cualquier cantidad de caracteres
nombre LIKE 'A%' → Nombres que empiezan con A
_
Un solo carácter
nombre LIKE 'J__n' → Juan, John
%texto%
Contiene el texto
email LIKE '%@gmail.com'
Funciones en SQL
⚙️ Las funciones: Permiten realizar cálculos y operaciones sobre los datos
📊 Funciones de Agregación
Operan sobre conjuntos de filas y devuelven un único valor
COUNT()
Cuenta registros
SELECT COUNT(*)
FROM estudiantes;
SUM()
Suma valores
SELECT SUM(precio)
FROM productos;
AVG()
Promedio
SELECT AVG(promedio)
FROM estudiantes;
MAX()
Valor máximo
SELECT MAX(salario)
FROM empleados;
MIN()
Valor mínimo
SELECT MIN(edad)
FROM clientes;
Ejemplo Práctico: Estadísticas de Estudiantes
SELECTCOUNT(*) AS total_estudiantes,
AVG(promedio) AS promedio_general,
MAX(promedio) AS mejor_promedio,
MIN(promedio) AS menor_promedio
FROM estudiantes;
🔤 Funciones de Texto
Función
Descripción
Ejemplo
UPPER()
Convierte a mayúsculas
UPPER('hola') → 'HOLA'
LOWER()
Convierte a minúsculas
LOWER('HOLA') → 'hola'
LENGTH()
Longitud de la cadena
LENGTH('Hola') → 4
CONCAT()
Concatena cadenas
CONCAT('Hola', ' ', 'Mundo')
SUBSTRING()
Extrae parte de una cadena
SUBSTRING('Hola', 1, 2) → 'Ho'
TRIM()
Elimina espacios
TRIM(' Hola ') → 'Hola'
Ejemplo: Formatear Nombres
SELECTCONCAT(UPPER(nombre), ' ', UPPER(apellido)) AS nombre_completo,
LENGTH(email) AS largo_email
FROM estudiantes;
📅 Funciones de Fecha
Función
Descripción
Ejemplo
NOW()
Fecha y hora actual
NOW() → '2024-11-28 14:30:00'
CURDATE()
Fecha actual
CURDATE() → '2024-11-28'
YEAR()
Extrae el año
YEAR('2024-11-28') → 2024
MONTH()
Extrae el mes
MONTH('2024-11-28') → 11
DAY()
Extrae el día
DAY('2024-11-28') → 28
DATEDIFF()
Diferencia entre fechas
DATEDIFF('2024-12-31', '2024-01-01')
Ejemplo: Calcular Edad
SELECT
nombre,
fecha_nacimiento,
YEAR(CURDATE()) - YEAR(fecha_nacimiento) AS edad
FROM estudiantes;
GROUP BY - Agrupar Datos
GROUP BY agrupa registros que tienen valores iguales en columnas especificadas
Ejemplo: Contar estudiantes por ciudad
SELECT
ciudad,
COUNT(*) AS total_estudiantes,
AVG(promedio) AS promedio_ciudad
FROM estudiantes
GROUP BY ciudad
ORDER BY total_estudiantes DESC;
HAVING - Filtrar grupos
SELECT
ciudad,
COUNT(*) AS total
FROM estudiantes
GROUP BY ciudad
HAVING total > 10;
💡 Diferencia: WHERE vs HAVING
WHERE: Filtra filas ANTES de agrupar
HAVING: Filtra grupos DESPUÉS de agrupar
Consultas Avanzadas
🔗 JOINS - Unir Tablas
📌 Concepto: Los JOINS permiten combinar datos de múltiples tablas relacionadas
INNER JOIN
Devuelve solo los registros que tienen coincidencias en ambas tablas
SELECT
estudiantes.nombre,
estudiantes.apellido,
cursos.nombre_curso
FROM estudiantes
INNER JOIN inscripciones ON estudiantes.id = inscripciones.id_estudiante
INNER JOIN cursos ON inscripciones.id_curso = cursos.id;
LEFT JOIN
Devuelve todos los registros de la tabla izquierda y los coincidentes de la derecha
SELECT
estudiantes.nombre,
cursos.nombre_curso
FROM estudiantes
LEFT JOIN inscripciones ON estudiantes.id = inscripciones.id_estudiante
LEFT JOIN cursos ON inscripciones.id_curso = cursos.id;
Incluye estudiantes aunque no tengan inscripciones
RIGHT JOIN
Devuelve todos los registros de la tabla derecha y los coincidentes de la izquierda
📊 Subconsultas
Subconsulta en WHERE
SELECT nombre, promedio
FROM estudiantes
WHERE promedio > (
SELECT AVG(promedio)
FROM estudiantes
);
Estudiantes con promedio mayor al promedio general
Subconsulta con IN
SELECT nombre
FROM estudiantes
WHERE id IN (
SELECT id_estudiante
FROM inscripciones
WHERE id_curso = 101
);
Estudiantes inscritos en el curso 101
🎨 Consultas Complejas Completas
Ejemplo Real: Reporte de Ventas
SELECT
c.nombre AS cliente,
COUNT(p.id) AS total_pedidos,
SUM(p.total) AS total_gastado,
AVG(p.total) AS promedio_pedido,
MAX(p.fecha) AS ultimo_pedido
FROM clientes c
INNER JOIN pedidos p ON c.id = p.id_cliente
WHERE p.fecha >= '2024-01-01'GROUP BY c.id, c.nombre
HAVING total_pedidos > 5ORDER BY total_gastado DESCLIMIT10;
📝 Orden de Ejecución en SQL
FROM - Selecciona las tablas
JOIN - Une las tablas
WHERE - Filtra registros
GROUP BY - Agrupa registros
HAVING - Filtra grupos
SELECT - Selecciona columnas
ORDER BY - Ordena resultados
LIMIT - Limita cantidad
Ejercicios Prácticos
🖥️ Simulador de Consultas SQL
Escribe consultas SQL y verifica si son correctas
Base de datos: TIENDA
Tabla: productos
id
nombre
precio
stock
categoria
1
Laptop HP
15000
10
Electrónica
2
Mouse Logitech
250
50
Accesorios
3
Teclado Mecánico
1200
30
Accesorios
4
Monitor Samsung
3500
15
Electrónica
5
Webcam Logitech
800
25
Accesorios
📝 Ejercicio 1: Consulta Básica
Tarea: Escribe una consulta que muestre el nombre y precio de todos los productos
📝 Ejercicio 2: Filtrado
Tarea: Selecciona productos con precio mayor a 1000
📝 Ejercicio 3: Funciones de Agregación
Tarea: Calcula el precio promedio de todos los productos
📝 Ejercicio 4: GROUP BY
Tarea: Cuenta cuántos productos hay por categoría
💪 Desafío Final
Escenario: Eres el administrador de base de datos de una universidad
Tarea: Crea las consultas SQL para:
Crear una tabla "profesores" con: id, nombre, apellido, especialidad, salario
Insertar 3 profesores
Actualizar el salario de un profesor
Consultar profesores con salario mayor a 20000
Calcular el salario promedio
Quiz de Evaluación SQL
🎯 Objetivo: Evalúa tu conocimiento de SQL
1. ¿Qué comando se usa para crear una nueva tabla?
2. ¿Cuál es la diferencia entre DELETE y TRUNCATE?
3. ¿Qué función devuelve la fecha actual?
4. ¿Cuál es el orden correcto de ejecución?
5. ¿Qué hace la función COUNT(*)?
6. ¿Cuál es la diferencia entre WHERE y HAVING?
7. ¿Qué tipo de JOIN devuelve solo las coincidencias?
8. ¿Qué restricción asegura que no haya valores duplicados?