Certificado de SQL Intermedio
8h 0m
Aprende sintaxis SQL intermedio con funciones, agrupación, joins y subqueries para mejorar tus consultas y gestión de bases de datos.
Empezar cursoSQL intermedio representa el siguiente paso natural en el dominio de las bases de datos relacionales, donde los conceptos básicos de consultas simples evolucionan hacia técnicas más sofisticadas y versátiles. Este nivel de conocimiento es fundamental para cualquier profesional que trabaje con datos, ya que proporciona las herramientas necesarias para extraer información compleja y realizar análisis detallados de grandes volúmenes de información.
En el mundo profesional actual, las bases de datos relacionales contienen información distribuida en múltiples tablas interconectadas, y la capacidad de navegar eficientemente entre estas relaciones marca la diferencia entre un usuario básico y un profesional competente en gestión de datos.
Funciones
Las funciones integradas de SQL constituyen un arsenal de herramientas que permiten transformar, calcular y formatear datos directamente en las consultas. Estas funciones se clasifican en categorías específicas según el tipo de datos que procesan, ofreciendo soluciones elegantes para problemas comunes de manipulación de información.
Procesamiento de texto y cadenas
Las funciones de texto permiten manipular cadenas de caracteres de forma sofisticada, desde operaciones básicas como concatenación hasta transformaciones complejas como extracción de subcadenas. Estas funciones resultan especialmente útiles cuando trabajamos con datos que requieren limpieza, formateo o análisis de patrones textuales.
-- Ejemplo de manipulación de texto
SELECT
UPPER(nombre) AS nombre_mayusculas,
CONCAT(apellido, ', ', nombre) AS nombre_completo,
SUBSTRING(email, 1, POSITION('@' IN email) - 1) AS usuario_email
FROM empleados;
Cálculos numéricos y matemáticos
Las funciones numéricas proporcionan capacidades de cálculo que van desde operaciones aritméticas básicas hasta funciones matemáticas avanzadas. Estas herramientas son esenciales para realizar análisis cuantitativos, generar métricas de negocio y procesar datos financieros con precisión.
-- Cálculos matemáticos en consultas
SELECT
producto,
precio,
ROUND(precio * 1.21, 2) AS precio_con_iva,
CEILING(precio / 10) * 10 AS precio_redondeado
FROM productos
WHERE ABS(precio - 100) < 50;
Gestión temporal y fechas
El manejo de fechas y horas representa uno de los aspectos más críticos en el análisis de datos temporales. Las funciones temporales permiten extraer componentes específicos de fechas, realizar cálculos de intervalos y formatear información temporal según diferentes estándares.
-- Análisis temporal de datos
SELECT
EXTRACT(YEAR FROM fecha_venta) AS año,
EXTRACT(MONTH FROM fecha_venta) AS mes,
DATE_PART('quarter', fecha_venta) AS trimestre,
AGE(CURRENT_DATE, fecha_venta) AS antiguedad
FROM ventas
WHERE fecha_venta >= CURRENT_DATE - INTERVAL '1 year';
Agregación
Las funciones agregadas representan una de las características más potentes de SQL, permitiendo resumir grandes volúmenes de datos en métricas significativas. Estas funciones operan sobre conjuntos de filas para producir valores únicos que representan características del conjunto completo.
Funciones de agregación
Las funciones COUNT, SUM, AVG, MAX y MIN constituyen los pilares del análisis agregado. Cada una sirve un propósito específico en la generación de estadísticas descriptivas y métricas de negocio.
-- Análisis estadístico básico
SELECT
COUNT(*) AS total_registros,
COUNT(DISTINCT categoria) AS categorias_unicas,
SUM(cantidad) AS cantidad_total,
AVG(precio) AS precio_promedio,
MAX(fecha_creacion) AS fecha_mas_reciente,
MIN(stock) AS stock_minimo
FROM productos
WHERE activo = true;
Agrupación de resultados
La cláusula GROUP BY transforma consultas simples en análisis multidimensionales, permitiendo segmentar datos según criterios específicos y aplicar funciones agregadas a cada segmento independientemente.
-- Agrupación por múltiples dimensiones
SELECT
categoria,
EXTRACT(YEAR FROM fecha_venta) AS año,
COUNT(*) AS total_ventas,
SUM(importe) AS ingresos_totales,
AVG(importe) AS ticket_promedio
FROM ventas v
JOIN productos p ON v.producto_id = p.id
GROUP BY categoria, EXTRACT(YEAR FROM fecha_venta)
ORDER BY categoria, año;
Filtrado de grupos con HAVING
La cláusula HAVING proporciona capacidades de filtrado específicamente diseñadas para trabajar con resultados agregados, permitiendo aplicar condiciones que no serían posibles con WHERE tradicional.
-- Filtrado de grupos agregados
SELECT
cliente_id,
COUNT(*) AS total_pedidos,
SUM(importe) AS gasto_total
FROM pedidos
WHERE fecha_pedido >= '2024-01-01'
GROUP BY cliente_id
HAVING COUNT(*) >= 5 AND SUM(importe) > 1000
ORDER BY gasto_total DESC;
Relaciones entre tablas
El modelo relacional se basa en la premisa de que la información se distribuye eficientemente en múltiples tablas interconectadas mediante relaciones bien definidas. Comprender estos tipos de relaciones es fundamental para diseñar bases de datos eficientes y realizar consultas complejas.
Relación Many-to-One
La relación Many-to-One es la más común en bases de datos relacionales, donde múltiples registros de una tabla se relacionan con un único registro de otra tabla. Esta relación se implementa mediante claves foráneas y es fundamental para la normalización de datos.
-- Ejemplo de relación Many-to-One
-- Múltiples empleados pertenecen a un departamento
SELECT
e.nombre AS empleado,
e.salario,
d.nombre AS departamento,
d.presupuesto
FROM empleados e
JOIN departamentos d ON e.departamento_id = d.id;
Relación One-to-Many
La relación One-to-Many representa la perspectiva inversa de Many-to-One, donde un registro padre puede tener múltiples registros hijos asociados. Esta relación es esencial para modelar jerarquías y estructuras de dependencia.
Relación One-to-One
Las relaciones One-to-One son menos frecuentes pero importantes para casos específicos donde se requiere dividir información de una entidad en múltiples tablas por razones de rendimiento, seguridad o organización lógica.
Relación Many-to-Many
Las relaciones Many-to-Many requieren tablas intermedias para su implementación, ya que el modelo relacional no soporta directamente este tipo de asociación. Estas relaciones son comunes en escenarios como productos-categorías o estudiantes-cursos.
-- Implementación de relación Many-to-Many
SELECT
e.nombre AS estudiante,
c.nombre AS curso,
ec.fecha_inscripcion,
ec.calificacion
FROM estudiantes e
JOIN estudiante_curso ec ON e.id = ec.estudiante_id
JOIN cursos c ON ec.curso_id = c.id
WHERE ec.activo = true;
Técnicas de unión
Los JOIN representan el mecanismo fundamental para combinar información de múltiples tablas, permitiendo crear vistas unificadas de datos relacionados. Cada tipo de JOIN ofrece un comportamiento específico que determina qué registros se incluyen en el resultado final.
INNER JOIN
El INNER JOIN devuelve únicamente los registros que tienen correspondencias en ambas tablas, creando una intersección perfecta de datos relacionados. Es el tipo de JOIN más restrictivo y comúnmente utilizado.
-- INNER JOIN para datos con correspondencia exacta
SELECT
p.nombre AS producto,
p.precio,
c.nombre AS categoria,
v.nombre AS vendedor
FROM productos p
INNER JOIN categorias c ON p.categoria_id = c.id
INNER JOIN vendedores v ON p.vendedor_id = v.id
WHERE p.activo = true;
LEFT JOIN y RIGHT JOIN
Los LEFT JOIN y RIGHT JOIN permiten preservar todos los registros de una tabla (izquierda o derecha respectivamente) incluso cuando no existen correspondencias en la tabla relacionada, completando con valores NULL donde no hay datos.
-- LEFT JOIN para incluir todos los clientes
SELECT
c.nombre AS cliente,
c.email,
COUNT(p.id) AS total_pedidos,
COALESCE(SUM(p.importe), 0) AS gasto_total
FROM clientes c
LEFT JOIN pedidos p ON c.id = p.cliente_id
GROUP BY c.id, c.nombre, c.email
ORDER BY gasto_total DESC;
FULL JOIN
El FULL JOIN combina los comportamientos de LEFT y RIGHT JOIN, preservando todos los registros de ambas tablas y completando con NULL donde no existen correspondencias.
CROSS JOIN y SELF JOIN
El CROSS JOIN genera el producto cartesiano entre dos tablas, mientras que el SELF JOIN permite relacionar una tabla consigo misma, útil para estructuras jerárquicas o comparaciones internas.
-- SELF JOIN para estructuras jerárquicas
SELECT
e.nombre AS empleado,
m.nombre AS manager,
e.salario,
m.salario AS salario_manager
FROM empleados e
LEFT JOIN empleados m ON e.manager_id = m.id
WHERE e.activo = true;
Subconsultas
Las subconsultas o subqueries permiten anidar consultas dentro de otras consultas, proporcionando capacidades de análisis que van más allá de las operaciones básicas de JOIN. Estas técnicas son fundamentales para resolver problemas complejos que requieren múltiples niveles de filtrado o comparación.
Subconsultas en la cláusula WHERE
Las subconsultas en WHERE permiten filtrar registros basándose en resultados de consultas independientes, creando condiciones dinámicas y contextuales.
-- Subconsulta para encontrar productos por encima del precio promedio
SELECT
nombre,
precio,
categoria_id
FROM productos
WHERE precio > (
SELECT AVG(precio)
FROM productos
WHERE activo = true
)
ORDER BY precio DESC;
Subconsultas correlacionadas
Las subconsultas correlacionadas referencian columnas de la consulta externa, ejecutándose una vez por cada fila de la consulta principal. Aunque menos eficientes, proporcionan capacidades de análisis muy específicas.
-- Subconsulta correlacionada para ranking por categoría
SELECT
p.nombre,
p.precio,
c.nombre AS categoria
FROM productos p
JOIN categorias c ON p.categoria_id = c.id
WHERE p.precio = (
SELECT MAX(precio)
FROM productos p2
WHERE p2.categoria_id = p.categoria_id
AND p2.activo = true
);
Subconsultas con EXISTS y IN
Los operadores EXISTS e IN proporcionan métodos eficientes para verificar la existencia de registros relacionados o la pertenencia a conjuntos específicos de valores.
-- Uso de EXISTS para filtrado eficiente
SELECT
c.nombre AS cliente,
c.email
FROM clientes c
WHERE EXISTS (
SELECT 1
FROM pedidos p
WHERE p.cliente_id = c.id
AND p.fecha_pedido >= CURRENT_DATE - INTERVAL '30 days'
);
El dominio de estas técnicas avanzadas de SQL transforma la capacidad de análisis de datos, permitiendo extraer insights complejos y generar reportes sofisticados que son fundamentales en entornos profesionales modernos. La combinación efectiva de funciones, agregaciones, JOIN y subconsultas proporciona un conjunto de herramientas versátil para abordar prácticamente cualquier desafío de consulta de datos.
Otros cursos de programación con certificado
Supera todos los retos de SQL Intermedio y obtén estos certificados de superación para mejorar tu currículum y tu empleabilidad.

Fundamentos de programación
10h 0m

Git Básico
5h 0m

Git Avanzado
8h 0m

HTML Básico
3h 0m

HTML Intermedio
5h 0m

HTML Avanzado
8h 0m

CSS Básico
5h 0m

CSS Intermedio
7h 0m

CSS Avanzado
8h 0m

JavaScript Sintaxis
5h 0m

JavaScript OOP Intermedio
7h 0m

JavaScript Asíncrono y Funcional
6h 0m

JavaScript DOM
8h 0m

TypeScript Sintaxis Básica
5h 0m

TypeScript OOP
8h 0m

TypeScript Avanzado
8h 0m

Python Sintaxis Básica
5h 0m

Python Estructuras de datos
3h 0m

Python OOP
8h 0m

Python Funcional
7h 0m
Tecnologías que aprenderás

Al finalizar este curso obtendrás

Certificado de superación en SQL Intermedio
Tras completar todas las lecciones y ejercicios del curso SQL Intermedio se te genera un enlace con tu certificado para que lo puedas descargar o compartir directamente en cualquier plataforma, siempre accesible.